MATLAB实例:非线性方程数值解法(迭代解)
MATLAB实例:非线性方程数值解法(迭代解)
作者:凯鲁嘎吉 – 云海天 http://www.cnblogs.com/kailugaji/
很久之前写过一篇关于“MATLAB用二分法、不动点迭代法及Newton迭代(切线)法求非线性方程的根”,本博文相当于之前这一篇的延续与拓展,介绍四种求解一元非线性方程的数值解法(迭代解),包括:牛顿迭代法,Halley迭代法,Householder迭代法以及预测校正牛顿-哈雷迭代法(Predictor-Corrector Newton-Halley,PCNH),具体参考文献[1],来源于这篇文章:THREE-STEP ITERATIVE METHOD WITH EIGHTEENTH ORDER CONVERGENCE FOR SOLVING NONLINEAR EQUATIONS。
1. 迭代更新公式
2. MATLAB程序
newton.m
function [x1, k]=newton(t1,esp,m) syms x; fun=x^3+4*(x^2)-10; for k=1:m if abs(subs(diff(fun,"x"),x,t1))<esp x1=t1; break; else if subs(diff(fun,"x",2),x,t1)==0 break; disp("解题失败!") else t0=t1; t1=t0-subs(fun,x,t0)/subs(diff(fun,"x"),x,t0); if abs(t1-t0)<esp x1=t1; break; end end end end % x1=vpa(x1,15);