一道matlab不动点迭代求高手指点function [k,p,err]=fixpt(g,p0)P(1)=p0;tol=1.e-8;max1=50;for k=2:max1P(k)=feval(g,P(k-1));err=abs(P(k)-P(k-1));relerr=err/(abs(P(k))+eps);p=P(k);if(err

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/25 17:51:16
一道matlab不动点迭代求高手指点function [k,p,err]=fixpt(g,p0)P(1)=p0;tol=1.e-8;max1=50;for k=2:max1P(k)=feval(g,P(k-1));err=abs(P(k)-P(k-1));relerr=err/(abs(P(k))+eps);p=P(k);if(err

一道matlab不动点迭代求高手指点function [k,p,err]=fixpt(g,p0)P(1)=p0;tol=1.e-8;max1=50;for k=2:max1P(k)=feval(g,P(k-1));err=abs(P(k)-P(k-1));relerr=err/(abs(P(k))+eps);p=P(k);if(err
一道matlab不动点迭代求高手指点
function [k,p,err]=fixpt(g,p0)
P(1)=p0;
tol=1.e-8;
max1=50;
for k=2:max1
P(k)=feval(g,P(k-1));
err=abs(P(k)-P(k-1));
relerr=err/(abs(P(k))+eps);
p=P(k);
if(err

一道matlab不动点迭代求高手指点function [k,p,err]=fixpt(g,p0)P(1)=p0;tol=1.e-8;max1=50;for k=2:max1P(k)=feval(g,P(k-1));err=abs(P(k)-P(k-1));relerr=err/(abs(P(k))+eps);p=P(k);if(err
我报的错不是这样的...
>> [k,p,err]=fixpt('x^5-3*x^3-2*x^2+2',3.8)
Invalid function name 'x^5-3*x^3-2*x^2+2'.
Error in ==> fixpt at 7
P(k)=feval(g,P(k-1));
这是因为不能把字符串作为一个函数句柄传过去,把这一句:P(k)=feval(g,P(k-1));改为
x = P(k-1); P(k) = eval(g);
就可以了.不过这个迭代好像有问题,迭代两步就溢出了~
用solve('x^5-3*x^3-2*x^2+2-x','x')可以算出你输入的函数有以下几个不动点,作为参考:
2.0000
-1.6180
0.6180
-0.5000 - 0.8660i
-0.5000 + 0.8660i

你给的这个x的式子照这种算法是发散的,只要几步就超过电脑的计算能力了。你把3.8的值改成别的试试。

劳烦各位高手指点一二问题补充:看了一楼朋友的回答,确实是不动点迭代法,地球可是真小啊,看来老师布置作业都一样啊! 前段时间刚做过这道题!给你