一道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/06/29 02:41:35
![一道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](/uploads/image/z/5607010-10-0.jpg?t=%E4%B8%80%E9%81%93matlab%E4%B8%8D%E5%8A%A8%E7%82%B9%E8%BF%AD%E4%BB%A3%E6%B1%82%E9%AB%98%E6%89%8B%E6%8C%87%E7%82%B9function+%5Bk%2Cp%2Cerr%5D%3Dfixpt%28g%2Cp0%29P%281%29%3Dp0%3Btol%3D1.e-8%3Bmax1%3D50%3Bfor+k%3D2%3Amax1P%28k%29%3Dfeval%28g%2CP%28k-1%29%29%3Berr%3Dabs%28P%28k%29-P%28k-1%29%29%3Brelerr%3Derr%2F%28abs%28P%28k%29%29%2Beps%29%3Bp%3DP%28k%29%3Bif%28err)
一道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的值改成别的试试。
劳烦各位高手指点一二问题补充:看了一楼朋友的回答,确实是不动点迭代法,地球可是真小啊,看来老师布置作业都一样啊! 前段时间刚做过这道题!给你