请高手帮忙改matlab程序

来源:百度知道 编辑:UC知道 时间:2024/09/20 03:00:09
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;
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)/(

在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);