声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1091|回复: 2

[编程技巧] 程序运行中变量的值一直没变,错在哪了?

[复制链接]
发表于 2007-11-27 17:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
用共轭梯度法求最小值,其中在梯度方向上用0.618法一维搜索最优步长
但是程序运行中,a,b的值一直未变,a=7.6,b=0.65.
不知道怎么回事?哪位能给我个提示?谢谢!
%goldensection
A1=-3.0;B1=12.1;A2=4.1;B2=5.8;x=[1 4.5];y=[1 2];
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 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-11-27 17:27 | 显示全部楼层
像这种问题你自己调试一下吧:
1. 你的程序外人根本无法运行
2. while 语句就一个条件判断,自己调试就可以了

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

[ 本帖最后由 ChaChing 于 2010-6-14 21:47 编辑 ]
 楼主| 发表于 2007-11-27 19:24 | 显示全部楼层
明白问题出在哪了.谢谢eghit的批评指教
0.618法这样写不知道对否, 呵呵

[ 本帖最后由 sun1993 于 2007-11-27 19:45 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-18 14:29 , Processed in 0.058639 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表