一道matlab不动点迭代求高手指点

function[k,p,err]=fixpt(g,p0)P(1)=p0;tol=1.e-8;max1=50;fork=2:max1P(k)=feval(g,P(k-1)... 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<tol)|(relerr<tol)
break;
end
end
if k==max1
disp('maximum number of iterations exceeded')
end
然后输入
[k,p,err]=fixpt('x^5-3*x^3-2*x^2+2',3.8)
出现错误提示
??? Error using ==> fixpt
Too many input arguments.
这是哪里出错了
展开
zhouw06
2011-12-16 · TA获得超过462个赞
知道小有建树答主
回答量:231
采纳率:0%
帮助的人:293万
展开全部
我报的错不是这样的...
>> [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
VSH艾羽
2025-09-30 广告
上海艾羽信息科技有限公司是一家以CAE软件销售、技术咨询及服务,仿真咨询及规划布局为一体的高科技公司。作为ANSYS的合作伙伴,艾羽致力于将ANSYS推出的产品,通过业界性能颇佳、丰富的工程仿真软件产品组合帮助客户解决复杂的仿真难题。力求与... 点击进入详情页
本回答由VSH艾羽提供
wskapge
2011-12-16 · TA获得超过332个赞
知道小有建树答主
回答量:117
采纳率:0%
帮助的人:110万
展开全部
你给的这个x的式子照这种算法是发散的,只要几步就超过电脑的计算能力了。你把3.8的值改成别的试试。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式