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);


