前言
帮朋友做的一个题目,关于牛顿迭代法求方程的根. 不难,但是费了我很长时间,以前的知识,重新拾起来却很耗时间。今天做一记录,一来加深印象,二来备必要时查看。
1、牛顿迭代法的基本知识
参考资料:Newton’s Method and Loops
上面的资料阐述很详细,我就不多加补充。
2、问题简述
用牛顿迭代法求
3、问题求解
1、建立EquaNewton.m文件
function [k,x,f_value]=EquaNewton(f,Df,x0,eps,N)
fprintf( ' k x f\n');
f_value=f(x0);
for k=1:N
x=x0-f_value/Df(x0);
f_value=f(x);
fprintf( '%3d, %12.11f, %12.11f\n',k,x,f_value)
if abs(x-x0)<eps
return
else
x0=x;
if k==N
warning('算法超出最大迭代次数!');
end
end
end
参数解释:
f:原函数
Df: 原函数的导数
x0:初始迭代值
eps:结果的精度
N: 最大的迭代次数
2、命令行窗口运行
f=inline(‘9*x^2 - sin(x) - 1’);
Df=inline(‘18*x - cos(x)’);
x0=1;
eps=1e-5;
N=1e5;
运行:
EquaNewton(f,Df,x0,eps,N)
结果:
EquaNewton(f,Df,x0,eps,N)
k x f
1, 0.58999696669, 1.57650928396
2, 0.42894795297, 0.24005282000
3, 0.39370649299, 0.01142925889
4, 0.39185206418, 0.00003160878
5, 0.39184690704, 0.00000000024
ans =
5
取最后的结果:0.39184690704
以上是个人的总结,有不妥之处,麻烦在评论中指出.