用不动点迭代法求某函数的近似解的matlab程序怎么写

用不动点迭代法求某函数的近似解的matlab程序怎么写,第1张

%%以下是不动点主程序

function

[xc,num,eps]

=

fpi(g,x0,phi,step)

if

nargin<3

phi

=

1e-6

end

if

nargin<4

step

=

100

end

prenum=x0

num

=

0

eps

=

1

while

eps>phi

afternum=g(prenum)

eps

=

abs(afternum-prenum)

prenum

=

afternum

num

=

num+1

if

num

>

step

disp('超过迭代次数,可能不收敛')

break

end

end

xc

=

afternum

==================

下面是该程序的用法,比如我们想要求x^3+x-1=0的根,按如下的步骤进行:

1、首先将其转换成x=g(x)的形式,比如我将其转换成

x

=

(1-x)^(1/3)这种开立方的形式

2、将这种形式写成函数,即此时有g(x)

=

(1-x)^(1/3),将下面的代码保存成g.m文件:

function

y

=

g(x)

y

=

nthroot(1-x,3)

3、调用上面的主程序,后面两个参数是可选的,第三个参数表示你要求的最低精度,默认值为1e-6,第四个参数表示最大迭代次数,默认是100次。

[xc,num,eps]

=

fpi(@g,0.8)

获得结果如下:(xc就是根,num是实际迭代次数,eps是根的精度)

xc

=

0.6823

num

=

38

eps

=

9.5514e-07

================

以下是几点说明:

不动点的形式也可能有其它种形式,比如x=1-x^3,但是它不收敛,具体原因请参考数学书,这里可以提示一下,在根附近的其导数的绝对值大小1

所取的初始值最好在根附近,别太远。不动点法在离根较远时可能不收敛(虽然在根附近会收敛),上面的程序若取初值为1的话,最后并不收敛,会在0与1之间来回折腾。可自行验证

有问题请留言

用matlab不动点迭代法求方程x^3+4x^2-10=0根,可以这样来求解。

1、从一元三次方程中,得到下列迭代式

x(k+1)=sqrt(10-x(k)³)/2

2、选择x的初值,x(0)=1

3、计算过程

x(1)=sqrt(10-x(0)³)/2=sqrt(10-1³)/2=1.5

x(2)=sqrt(10-x(1)³)/2=sqrt(10-1.5³)/2=1.287

。。。。。。

迭代20,得到结果,误差为1e-6

4、为了快速计算,可以借助于Excel来求解。求解如下


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8039968.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存