请高手帮忙改matlab程序
发布网友
发布时间:2024-10-03 05:17
我来回答
共2个回答
热心网友
时间:2024-10-03 05:39
不好意思,我不懂这个,看看而以.
热心网友
时间:2024-10-03 05:36
在while前面加上下面这两句
infomation=sprintf('初始状态下\nfa=%f\tfb=%f\tfx=%f\n计算出来的新的解为%f\t误差%f\n',fa,fb,fx,root,tol)
iter=1;
在两个end 前加上下面这两句
infomation=sprintf('在第%d次迭代中\nfa=%f\tfb=%f\tfx=%f\n计算出来的新的解为%f\t误差%f\n',iter,fa,fb,fx,root,tol)
iter=iter+1;
也就是说,将你的程序改为:
function root=Parabola(f,a,b,x,eps)
if(nargin==4)
eps=1.0e-4;
end
f1=subs(sym(f),findsym(sym(f)),a);
f2=subs(sym(f),findsym(sym(f)),b);
if(f1==0)
root=a;
end
if(f2==0)
root=b;
end
if(f1*f2>0)
disp('两端点函数值乘积大于0!');
return;
else
tol=1;
fa=subs(sym(f),findsym(sym(f)),a);
fb=subs(sym(f),findsym(sym(f)),b);
fx=subs(sym(f),findsym(sym(f)),x);
d1=(fb-fa)/(b-a);
d2=(fx-fb)/(x-b);
d3=(d2-d1)/(x-a);
B=d2+d3*(x-b);
root=x-2*fx/(B+sign(B)*sqrt(B^2-4*fx*d3));
t=zeros(3);
t(1)=a;
t(2)=b;
t(3)=x;
infomation=sprintf('初始状态下\nfa=%f\tfb=%f\tfx=%f\n计算出来的新的解为%f\t误差%f\n',fa,fb,fx,root,tol)
iter=1;
while(tol>eps)
t(1)=t(2);
t(2)=t(3);
t(3)=root;
f1=subs(sym(f),findsym(sym(f)),t(1));
f2=subs(sym(f),findsym(sym(f)),t(2));
f3=subs(sym(f),findsym(sym(f)),t(3));
d1=(f2-f1)/(t(2)-t(1));
d2=(f3-f2)/(t(3)-t(2));
d3=(d2-d1)/(t(3)-t(1));
B=d2+d3*(t(3)-t(2));
root=t(3)-2*f3/(B+sign(B)*sqrt(B^2-4*f3*d3));
tol=abs(root-t(3));
infomation=sprintf('在第%d次迭代中\nfa=%f\tfb=%f\tfx=%f\n计算出来的新的解为%f\t误差%f\n',iter,fa,fb,fx,root,tol)
iter=iter+1;
end
end
就可以了。