sun1993 发表于 2007-11-27 17:24

程序运行中变量的值一直没变,错在哪了?

用共轭梯度法求最小值,其中在梯度方向上用0.618法一维搜索最优步长
但是程序运行中,a,b的值一直未变,a=7.6,b=0.65.
不知道怎么回事?哪位能给我个提示?谢谢!
%goldensection
A1=-3.0;B1=12.1;A2=4.1;B2=5.8;x=;y=;
a1=(A1-x(1))/y(1);a2=(B1-x(2))/y(1);a=max(a1,a2);
b1=(A2-x(1))/y(2);b2=(B2-x(2))/y(2);b=min(b1,b2);
epsilon=1e-3;
a1=b-0.618*(b-a);f1=feval(@myfun,x+a1*y);
a2=a+0.618*(b-a);f2=feval(@myfun,x+a2*y);
while b-a>epsilon
    if f1>f2
      a=a1;a1=a2;f1=f2;a2=a+0.618*(b-a);f2=feval(@myfun,x+a2*y);
    else
      b=a2;a2=a1;f2=f1;a1=b-0.618*(b-a);f1=feval(@myfun,x+a1*y);
    end
end
z=(b+a)/2;

另外 function z=myfun(v)
x=v(1);y=v(2);
z=21.5+x*sin(4*pi*x)+y*sin(20*pi*y);

程序很简单,可我自己没看出来,可能是算法的问题吧

[ 本帖最后由 sun1993 于 2007-11-27 19:15 编辑 ]

eight 发表于 2007-11-27 17:27

像这种问题你自己调试一下吧:
1. 你的程序外人根本无法运行
2. while 语句就一个条件判断,自己调试就可以了

如果你不懂得如何调试,请看“写给学习 matlab 的新人们”这个精华帖

[ 本帖最后由 ChaChing 于 2010-6-14 21:47 编辑 ]

sun1993 发表于 2007-11-27 19:24

明白问题出在哪了.谢谢eghit的批评指教
0.618法这样写不知道对否, 呵呵

[ 本帖最后由 sun1993 于 2007-11-27 19:45 编辑 ]
页: [1]
查看完整版本: 程序运行中变量的值一直没变,错在哪了?