如何将循环矢量化
遇到个小优化问题:两个变量A,B, 通过一程序算得结果 (Ea, Eb), 与标准值 (Ea0, Eb0) 比较,求二者相差最小时的A和B。Ea主要由A决定,A越大Ea越小,B对Ea也有影响,但比较小。而Eb-Ea主要由B决定,B越大
Eb-Ea越小,同样A对Eb-Ea也有较小的影响。
自己先编了个越看越傻的小程序:
目标函数 function =myfun(A,B)
=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;
=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;
=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;
=myfun(A,B);
end
else
while abs(fb)>e2
if fb>0
a2=B;
else
b2=B;
end
B=(a2+b2)/2;
=myfun(A,B);
end
end
如是再三,可用二分法继续作下去。上面的程序只是示意一下下
现在,有两个问题请教大家:
1)这里面的这么多 if, while语句如何用矢量化来代替?
2)还有什么好的方法搜索?
看在这么有勇气提出这种糟糕的问题,大家给点意见哈,谢谢
[ 本帖最后由 sun1993 于 2007-12-7 00:16 编辑 ] (1)并不是所有的循环都可以通过矢量化去掉
(2)要进行矢量化编程必须十分熟悉程序的结构
因此请根据对照矢量化编程的帖子,看什么地方可以优化。
实在不行的也不必苛求,能实现预定的功能就可以了。
页:
[1]