|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
遇到个小优化问题:
两个变量A,B, 通过一程序算得结果 (Ea, Eb), 与标准值 (Ea0, Eb0) 比较,求二者相差最小时的A和B。Ea主要由A决定,A越大Ea越小,B对Ea也有影响,但比较小。而Eb-Ea主要由B决定,B越大
Eb-Ea越小,同样A对Eb-Ea也有较小的影响。
自己先编了个越看越傻的小程序:
目标函数 function [fa fb]=myfun(A,B)
[Ea Eb]=fun(A,B); %结果是七位小数
fa=Ea-Ea0;
fb=Eb-Eb0-fa;
优化文件 a1=1;b1=11;
a2=2;b2=12; %给定A,B的搜索范围
e=1e-6;e2=1e-8;
A=(a1+b1)/2;B=(a2+b2)/2;
[fa fb]=myfun(A,B);
while abs(fa)>e&abs(fb)>e
if fa>0
a1=A;
else
b1=A;
end
if fb>0
a2=B;
else
b2=B;
end
A=(a1+b1)/2;B=(a2+b2)/2;
[fa fb]=myfun(A,B);
end
if abs(fa)>abs(fb) %尚未达到精度要求的继续搜索,达到的就固定不动
while abs(fa)>e2
if fa>0
a1=A;
else
b1=A;
end
A=(a1+b1)/2;
[fa fb]=myfun(A,B);
end
else
while abs(fb)>e2
if fb>0
a2=B;
else
b2=B;
end
B=(a2+b2)/2;
[fa fb]=myfun(A,B);
end
end
如是再三,可用二分法继续作下去。上面的程序只是示意一下下
现在,有两个问题请教大家:
1)这里面的这么多 if, while语句如何用矢量化来代替?
2)还有什么好的方法搜索?
看在这么有勇气提出这种糟糕的问题,大家给点意见哈,谢谢
[ 本帖最后由 sun1993 于 2007-12-7 00:16 编辑 ] |
|