关于Matlab运行速度的有趣现象


  Matlab对向量和矩阵有很多可以直接调用的函数,如果能够直接调用这些函数无疑是最理想的。但是,如果不能直接调用,而又不得不要在循环中对矩阵的元素进行运算,往往会有两种方法:一,直接对矩阵或者对矩阵分行(列)进行运算;二,对矩阵的每个元素进行运算。签字代码可能较为简洁,后者代码较为繁琐,但是,通过下面这个简单例子的比较,我们发现后者极大地提升了运行速率。
  考虑两个3行N列的矩阵相加这样一个简单地运算,下面给出三种方法:1. 直接用矩阵的加法;2. 利用循环语句,对列循环,每次循环各自对每一行进行相加;3. 利用循环语句,对列循环,每次循环里将三行行直接相加;为了比较程序运行时间差异,我们选取N=10000000,代码分别如下:

clear all;
clc;
tic
N=10000000;
X1=rand(3,N);
X2=rand(3,N);
Y=X1+X2;
toc
clear all;
clc;
tic
N=10000000;
X1=rand(3,N);
X2=rand(3,N);
for k=1:N
    Y(1,k)=X1(1,k)+X2(1,k);
    Y(2,k)=X1(2,k)+X2(2,k);
    Y(3,k)=X1(3,k)+X2(3,k);
end
toc
clear all;
clc;
tic
N=10000000;
X1=rand(3,N);
X2=rand(3,N);
for k=1:N
    Y(:,k)=X1(:,k)+X2(:,k);
end
toc

  利用Matlab运行结束,发现各自的运行时间如下:法1:时间已过 0.614669 秒;法2:时间已过 1.912717 秒;法3:时间已过 13.293288 秒。
  由此可见,以后在编程程序时,为了充分利用Matlab的优势,我们应该尽量将需要完成的任务转化成可用其自带函数的语言完成,如果实在不行,我们可以考虑对矩阵的每个元素分开计算,这样会极大地节约运行时间。

2019.10.19 王飞


posted @ 2019-10-19 22:55  Wang_Fei  阅读(245)  评论(0编辑  收藏  举报