MATLAB中关于disp的问题

> f=inline('x^2-7*x+10','x');
a=2;
b=8;
epsilon=0.25;
x1=b-0.618*(b-a);
f1=f(x1);
x2=a+0.618*(b-a);
f2=f(x2);
for k=1:7
fprintf(1,'迭代次数 k=%3.0f\n',k)
if f1<=f2
b=x2;
x2=x1;
f2=f1;
x1=b-0.618*(b-a);
f1=f(x1);
else
a=x1;
x1=x2;
f1=f2;
x2=a+0.618*(b-a);
f2=f(x2);
end
x=0.5*(b+a);
fprintf(1,'迭代区间-左端 a=%3.4f\n',a)
fprintf(1,'试点1坐标值 a=%3.4f\n',x1)
fprintf(1,'函数值 f1=%3.4f\n',f(x1))
fprintf(1,'迭代区间-右端 b=%3.4f\n',b)
fprintf(1,'试点2坐标值 x2=%3.4f\n',x2)
fprintf(1,'函数值 f2=%3.4f\n',f(x2))
fprintf(1,'区间中点 x=%3.4f\n',x)
disp''
end
迭代次数 k= 1
迭代区间-左端 a=2.0000
试点1坐标值 a=3.4165
函数值 f1=-2.2430
迭代区间-右端 b=5.7080
试点2坐标值 x2=4.2920
函数值 f2=-1.6227
区间中点 x=3.8540

结果只输出了一次迭代的结果并且提示如下错误:
??? Error using ==> disp
Too many output arguments.
请问如何改进能将7次迭代结构全部输出来????

f=inline('x^2-7*x+10','x');
a=2;
b=8;
epsilon=0.25;
x1=b-0.618*(b-a);
f1=f(x1);
x2=a+0.618*(b-a);
f2=f(x2);
for k=1:7
fprintf(1,'迭代次数 k=%3.0f\n',k)
if f1<=f2
b=x2;
x2=x1;
f2=f1;
x1=b-0.618*(b-a);
f1=f(x1);
else
a=x1;
x1=x2;
f1=f2;
x2=a+0.618*(b-a);
f2=f(x2);
end
x=0.5*(b+a);
fprintf(1,'迭代区间-左端 a=%3.4f\n',a)
fprintf(1,'试点1坐标值 a=%3.4f\n',x1)
fprintf(1,'函数值 f1=%3.4f\n',f(x1))
fprintf(1,'迭代区间-右端 b=%3.4f\n',b)
fprintf(1,'试点2坐标值 x2=%3.4f\n',x2)
fprintf(1,'函数值 f2=%3.4f\n',f(x2))
fprintf(1,'区间中点 x=%3.4f\n',x)
% disp''
end

让disp函数不工作,即可,不过看起来你这编的是0.618算法。好像网上有源代码
不过你这是控制迭代次数,下面我给了你控制迭代精度的代码,希望对你有所帮助,
如果你喜欢我的回答,那就给个精华吧
clc
clear all;
a=1; %区间下限
b=7; %区间上限
e=0.1; %精确度
f = inline('x^2-7*x+10');
%构造的目标函数
x1=a+0.382*(b-a);
y1=f(x1);
x2=a+0.618*(b-a);
y2=f(x2);
while abs(b-a)>e
if y1<y2
b=x2;
x2=x1;
y2=y1;
x1=a+0.382*(b-a);
y1=f(x1);
else
a=x1;
x1=x2;
y1=y2;
x2=a+0.618*(b-a);
y2=f(x2);
end
end
xp=0.5*(a+b); %算出目标值
fp=f(xp);
sprintf('xp=%f,\nfp=%f',xp,fp)追问

特别满意,留个QQ吧,我是菜鸟级的,还有好多问题想咨询呢

追答

1150153553
你是学生吗

追问

嗯。是的,太感谢啦

温馨提示:答案为网友推荐,仅供参考
相似回答