回 帖 发 新 帖 刷新版面

主题:[讨论]奇怪现象,matlab编程有额外输出的疑问

在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的值

我实在不知道哪里出了问题,怎么会有这种输出,请高人解答~~谢谢

回复列表 (共1个回复)

沙发

上述程序主要有2处不足
1.代码format long;
      eps=1e-6;是不必要的,matlab系统默认的
2.matlab的if结构不是你那样使用的,具体你可以help if
将上述程序中 else f1>f2改为else即可,matlab运行后不会再有ans=1
的出现。
建议学会查看matlab的editer中最右侧的程序提示说明,matlab会自动检测所编程序并且给出提示。当最右上侧的小方框为绿色时,表明程序初步检测无语法错误和缺陷。

我来回复

您尚未登录,请登录后再回复。点此登录或注册