sun1993 发表于 2007-12-7 00:00

如何将循环矢量化

遇到个小优化问题:
      两个变量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 编辑 ]

花如月 发表于 2007-12-7 13:54

(1)并不是所有的循环都可以通过矢量化去掉
(2)要进行矢量化编程必须十分熟悉程序的结构
因此请根据对照矢量化编程的帖子,看什么地方可以优化。

实在不行的也不必苛求,能实现预定的功能就可以了。
页: [1]
查看完整版本: 如何将循环矢量化