matlab中,如何加快数据运算速度?

matlab中,如何加快数据运算速度?,第1张

matlab中,如何加快数据运算速度?建议如下:

1、能用数组形式计算,尽可能使用数组点运算。

2、尽量减少循环运算,能不用循环过程尽量不用。

3、使用全局变量和临时变量,尽可能减少内存消耗。

。。。。。。

等等

1、一定要利用好M-file编辑器,因为会有一些着重标示的优化建议。

   例如,你在编辑器里输入以下代码:

      for k = 1:NumTrials

       r = rand

       x(k) = runsim(r)

       end

       hist(x)

   它会用红色波浪线表示出来,提示你最好先预设x的值。

另外:

   最好在一个单独的文件夹里运行程序;

   写好程序代码的注释,利人利己;

   将常用的命令存下来,方便以后调用。

2、在运行循环的时候,一定要预设变量值!

可以用 cell 和zeros这两个矩阵命令,对变量进行预设。

例如,

a(1) = 1

b(1) = 0

for k = 2:8000

a(k) = 0.99803 * a(k -1)-0.06279 * b(k-1)

b(k) = 0.06279 * a(k-1) + 0.99803 * b(k-1)

end

,没有预设,大约耗费0.47秒;

a = zeros(1,8000)% Preallocation

b = zeros(1,8000)

a(1) = 1

b(1) = 0

for k = 2:8000

a(k) = 0.99803 * a(k -1)-0.06279 * b(k-1)

b(k) = 0.06279 * a(k-1) + 0.99803 * b(k-1)

end

有预设,大约耗费0.14秒!

1.在使用数组或矩阵之前先定义维数

MATLAB中的变量在使用之前不需要明确地定义和指定维数。但当未预定义数组或矩阵的维数时,当需赋值的元素下标超出现有的维数时,MATLAB 就为该数组或矩阵扩维一次,这样就会大大降低程序的执行效率。因此,在使用数组或矩阵之前,预定义维数可以提高程序的执行效率。

2.对矩阵元素使用下标或者索引 *** 作

在MATLAB中,矩阵元素的引用可用两个下标来表示。例如:A(i,j) 表示矩阵的第i行第j列的元素;A(1:k,j)表示矩阵A的第j列的前k个元素;A(:,j) 表示矩阵的第j列的所有元素。求矩阵A的第j列元素的平均值的表达式为mean(A(:,j))。

3.用函数代替脚本文件

因为每次调用MATLAB的脚本文件都需要将不必要的中间变量加载到内存中,每执行一次,就加载一次。函数在调用时被编译成了伪代码,只需要加载到内存一次。当多次调用同一个函数时会运行快一些。因此尽量多使用函数文件而少使用脚本文件,也是提高执行效率的一种方法。

4.用Mex文件编写循环代码

Matlab提供了与C和C++的接口,那么我们可以在用C或C++语言编写耗时的循环代码,然后通过接口程序在Matlab中转换成dll文件,这就是我们所要的Mex文件,可以在MATLAB环境下直接执行。通过这种方法可以极大地提高计算速率。一般来说,C-MEX 文件的执行速度是相同功能的M文件执行速率的20~40倍。

5.尽可能利用matlab内部提供的函数

因为matlab内部提供的函数绝对是各种问题的最优算法,那写程序都是他们大师级人物写出来的,程序应该说相当高效,有现成的为什么不用那!这个原则就不用实际的程序测试了。

6.给数组或矩阵预分配内存

特别是使用大型数组或矩阵时,Matlab进行动态内存分配和取消时,可能会产生内存碎片,这将导致大量闲置内存产生,预分配可通过提前给大型数据结构预约足够空间来避免这个问题。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12119108.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存