实验七 牛顿迭代法
【实验目的】
1.了解牛顿迭代法的基本概念。
2.了解牛顿迭代法的收敛性和收敛速度。
3.学习掌握MATLAB 软件有关的命令。
【实验内容】
用牛顿迭代法求方程0123=-++x x x 的近似根,误差不超过310-。
【实验准备】
1.牛顿迭代法原理
设已知方程0)(=x f 的近似根0x ,则在0x 附近)(x f 可用一阶泰勒多项式))((')()(000x x x f x f x p -+=近似代替.因此, 方程0)(=x f 可近似地表示为0)(=x p .用1x 表示0)(=x p 的根,它与0)(=x f 的根差异不大.
设0)('0≠x f ,由于1x 满足,0))((')(0100=-+x x x f x f 解得
)
(')(0001x f x f x x -= 重复这一过程,得到迭代格式
)
(')(1n n n n x f x f x x -=+ 这就是著名的牛顿迭代公式,它相应的不动点方程为
)
(')()(x f x f x x g -=. 2. 牛顿迭代法的几何解析
在0x 处作曲线的切线,切线方程为))((')(000x x x f x f y -+=。
令
0=y ,可得切线与x 轴的交点坐标)
(')(0001x f x f x x -=,这就是牛顿法的迭代公式。
因此,牛顿法又称“切线法”。
3.牛顿迭代法的收敛性 计算可得2)]
('[)(")()('x f x f x f x g -=,设*x 是0)(=x f 的单根,有0)(',0)(**≠=x f x f ,则
0)]('[)(")()('2****
=-=x f x f x f x g , 故在*x 附近,有1)('<x g .根据不动点原理知牛顿迭代法收敛.
4.迭代的MATLAB 命令
MATLAB 中主要用for, while 等控制流命令实现迭代.
【实验方法与步骤】
练习1 用牛顿迭代法求方程0123=-++x x x 在5.0=x 附近的近似根,误差不超过310-.
牛顿迭代法的迭代函数为
1
231)(')()(223++-++-=-=x x x x x x x f x f x x g , 相应的MATLAB 代码为:
>>clear;
>>x=0.5;
>>for i=1:3
>>x=x-(x^3+x^2+x-1)/(3*x^2+2*x+1)
>>end
可算得迭代数列的前3项0.5455, 0.5437, 0.5437.近三次迭代,就大大超过了精度要求.
练习2用牛顿迭代法求方程)0(2>=a a x .的近似正实根,由此建立一种求平方根的计算方法.
由计算可知,迭代格式为)(21)(x
a x x g +=
.,在实验12的练习4种已经进行了讨论.
练习3用牛顿迭代法求方程1=x xe 的正根.
牛顿迭代法的迭代函数为
,)1(1)(')()(x x e
x xe x x f x f x x g +--=-= 如果取初值为00=x ,相应的MATLAB 代码为:
>>clear;
>>x=0.0;
>>for i=1:6
>>x=x-(x*exp(x)-1)/((x+1)*exp(x))
>>end
可算得迭代数列的前6项1, 0.6839, 0.5775, 0.5672, 0.5671, 0.5671,说明迭代是收敛的.
如果取初值为100=x ,相应的MATLAB 代码为:
>>clear;
>>x=10.0;
>>for i=1:20
>>x=x-(x*exp(x)-1)/((x+1)*exp(x))
>>end
可算得迭代数列的前20项为
9.0909, 8.1900, 7.2989, 6.4194, 5.5544, 4.7076, 3.8844, 3.0933, 2.3487, 1.6759,
1.1195, 0.7453, 0.5902, 0.5676, 0.5671, 0.5671, 0.5671, 0.5671, 0.5671, 0.5671 说明迭代是收敛的.
如果取初值为10-=x ,或5.10-=x ,可算得(MATLAB 代码略去)迭代数列是发散的.请根据函数图形分析原因,
练习4求方程x e x -=在5.0=x 附近的根,精确到510-.
先直接使用x e x g -=)(的迭代格式, 相应的MATLAB 代码为:
>>n=0; eps=1.0e-5; x=0.5;
>>while abs(x-exp(-x))>eps
>>x=x-(x-exp(-x))/(1+exp(-x)); n=n+1;
>>end
>>x, n
结果为x= 0.5671, n = 17,说明迭代17次后达到精度要求.
x = fzero( F, X , tol ) 返回函数F 的一个零点;
fzero 使用二分法和插值法求一元函数的零点,要求函数在所求零点附近
变号;
F为字符串表示的函数或是M函数名,必须用单引号括起来;
X为标量时,作为迭代的初始值;X为向量[ a, b ]时,返回函数F在区间[ a, b ]中的一个零点,这时要求F在a、b两点异号;
tol为精度,缺省值为1e-4。
上例中:
x=fzero('x-exp(-x)',6)
x=fzero('x-exp(-x)',[0,8])
【练习与思考】
用牛顿迭代法求方程1
x的近似根.
x
ln。