haohao60302
2009-12-14, 17:39
在matlab窗口输入如下:
syms x;
f=x^2-x+2;
[x,mf]=min(f,x,-1,3)
其中自定义函数代码如下:
function [x,minf]=min(f,var,a1,a2)
%f是输入函数
%var是函数自变量
%a1、a2是自变量区间
format long;
eps=1e-6;
x2=a1+0.618*(a2-a1);
f2=subs(f,var,x2);
x1=a1+0.382*(a2-a1);
f1=subs(f,var,x1);
n=29;
while n
if f1<f2
a2=x2;
x2=x1;
f2=f1;
x1=a1+0.382*(a2-a1);
f1=subs(f,var,x1);
else if f1==f2
a1=x1;
a2=x2;
x2=a1+0.618*(a2-a1);
f2=subs(f,var,x2);
x1=a1+0.382*(a2-a1);
f1=subs(f,var,x1);
else f1>f2
a1=x1;
x1=x2;
f1=f2;
x2=a1+0.618*(a2-a1);
f2=subs(f,var,x2);
end
end
if n==1
break;
end
n=n-1;
end
x=x1;
minf=x2;
format short;
运行无错,得出[x,minf]的结果也没有错。但是更改n的值,从1到28,会发现:
n=1时,窗口输出x,minf的值
n=2时,输出ans=1,x和minf的值
n=3时,输出ans=1,x和minf的值
n=4时,输出ans=1,ans=1,x和minf的值
以此类推,每逢n等于偶数时,ans=1的个数就增加一个,
到n=28时,输出了14个ans=1,然后才是x和minf的值
我实在不知道哪里出了问题,怎么会有这种输出,请高人解答~~谢谢
syms x;
f=x^2-x+2;
[x,mf]=min(f,x,-1,3)
其中自定义函数代码如下:
function [x,minf]=min(f,var,a1,a2)
%f是输入函数
%var是函数自变量
%a1、a2是自变量区间
format long;
eps=1e-6;
x2=a1+0.618*(a2-a1);
f2=subs(f,var,x2);
x1=a1+0.382*(a2-a1);
f1=subs(f,var,x1);
n=29;
while n
if f1<f2
a2=x2;
x2=x1;
f2=f1;
x1=a1+0.382*(a2-a1);
f1=subs(f,var,x1);
else if f1==f2
a1=x1;
a2=x2;
x2=a1+0.618*(a2-a1);
f2=subs(f,var,x2);
x1=a1+0.382*(a2-a1);
f1=subs(f,var,x1);
else f1>f2
a1=x1;
x1=x2;
f1=f2;
x2=a1+0.618*(a2-a1);
f2=subs(f,var,x2);
end
end
if n==1
break;
end
n=n-1;
end
x=x1;
minf=x2;
format short;
运行无错,得出[x,minf]的结果也没有错。但是更改n的值,从1到28,会发现:
n=1时,窗口输出x,minf的值
n=2时,输出ans=1,x和minf的值
n=3时,输出ans=1,x和minf的值
n=4时,输出ans=1,ans=1,x和minf的值
以此类推,每逢n等于偶数时,ans=1的个数就增加一个,
到n=28时,输出了14个ans=1,然后才是x和minf的值
我实在不知道哪里出了问题,怎么会有这种输出,请高人解答~~谢谢