煜宸0922 发表于 2011-5-24 11:33

这个程序运行时间太长求助

本帖最后由 煜宸0922 于 2011-5-24 11:35 编辑

各位大侠,这个程序运行时间太长,各位还有什么办法优化一下?
function =changerk344(N)
x(:,1)=;      % 初始状态
h=0.01;                % 初始步长,最大步长
AbsTol=1e-5;         % 容差
p=4;                        
T=zeros(1,N);          % 时间向量
T(1,1)=0;            % 时间起点
p21=2^p-1;
V =[];
tic
for i=1:N-1
   if abs(x(1,i))<0.09             % 定步长
      h=0.01;       % 固定步长
      x(:,i+1)=rk144(x(:,i),h,T(i));
      T(1,i+1) = T(1,i) + h;          % 更新时间
    else                                 % 变步长
      x1=rk144(x(:,i),h,T(1,i));
      x2=rk144(x(:,i),h/2,T(1,i));
      a=abs(x1-x2)/p21;
      while a(1,1)> AbsTol                % 选择合适步长
            h=h/10;
            x1=rk144(x(:,i),h,T(1,i));
            x2=rk144(x(:,i),h/2,T(1,i));
            a=abs(x1-x2)/p21;
      end
      x(:,i+1)=rk144(x(:,i),h,T(i));      % 根据选择的步长更新状态
      if   abs(x(1,i+1))>=0.1   
         V=x(3,i+1);
         x(3,i+1)=-0.8*x(3,i+1);
         x(1,i+1)=sign(x(1,i+1))*min(0.1,abs(x(1,i+1)));
      end
      T(1,i+1) = T(1,i) + h;   
      end
   h=0.01;
end
toc
T = T(:);   
x = x(:,1:N);

ChaChing 发表于 2011-5-24 22:51

自己看看老帖吧, 收穫较多!!
1.[原创] 提高matlab运行速度的一点心得 http://forum.vibunion.com/thread-25305-1-1.html
[原创] 提高matlab运行速度的一点心得(之二) http://forum.vibunion.com/thread-26449-1-1.html
[原创]提高matlab运行速度和节省空间的一点心得(之三) http://forum.vibunion.com/thread-33199-1-1.html
2.matlab矢量化编程技巧集锦 http://forum.vibunion.com/thread-41583-1-1.html
from http://forum.vibunion.com/home-space-uid-63979-do-blog-id-18250.html

zhouyang664 发表于 2011-5-29 18:26

本帖最后由 zhouyang664 于 2011-5-29 18:41 编辑

用profile分析一下!

真伤感情,相帮楼主试试,缺函数呢:rk144,这又是何方神圣啊?

hhbhhy 发表于 2011-6-4 10:15

你这里面循环挺多的,没有发挥MATLAB矩阵计算的优势。
页: [1]
查看完整版本: 这个程序运行时间太长求助