声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 816|回复: 1

[编程技巧] 如何将循环矢量化

[复制链接]
发表于 2007-12-7 00:00 | 显示全部楼层 |阅读模式

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

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

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 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-12-7 13:54 | 显示全部楼层
(1)并不是所有的循环都可以通过矢量化去掉
(2)要进行矢量化编程必须十分熟悉程序的结构
因此请根据对照矢量化编程的帖子,看什么地方可以优化。

实在不行的也不必苛求,能实现预定的功能就可以了。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-18 12:23 , Processed in 0.075085 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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