(1) 不动点迭代法

将方程变形为 x=g(x),则 g(x)=3/2x-1/2exp(x)-1。

matlab程序:

function [x,k]=fixpoint(x0) g=@(x)3/2x-1/2exp(x)-1; x=g(x0); k=1; while abs(x-x0)>=1e-8 x0=x; x=g(x0); k=k+1; end

输出结果:

[x,k]=fixpoint(0)

x = 0.999999997484802 k = 6

(2) 牛顿迭代法

设方程的一个根为 x0,则有 f(x0)=0,令 xk=x0+h,其中 h 为待确定的增量,则有 f(xk)=f(x0+h)=f(x0)+h*f'(x0)+O(h^2)。

因为 f(xk)=0,所以有 h=-f(x0)/f'(x0),即 xk=x0-f(x0)/f'(x0)。

则牛顿迭代法的迭代公式为 xk=xk-1-f(xk-1)/f'(xk-1)。

matlab程序:

function [x,k]=newton(x0) f=@(x)x^2-3x+2-exp(x); df=@(x)2x-3-exp(x); x=x0; k=1; while true x=x-f(x)/df(x); if abs(x-x0)<1e-8 break; end x0=x; k=k+1; end

输出结果:

[x,k]=newton(0)

x = 0.999999997486062 k = 3

比较方法的优劣:

不动点迭代法需要进行多次迭代才能达到精度要求,但每次迭代的计算量较小,适用于迭代函数比较简单的情况。而牛顿迭代法每次迭代需要计算函数值和导数值,计算量较大,但迭代次数较少,适用于迭代函数比较复杂的情况。从上述两种方法的结果来看,牛顿迭代法的收敛速度更快,迭代次数更少,但需要给出初始值的导数值,不太方便


原文地址: https://www.cveoy.top/t/topic/fdzM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录