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进行动态内存分配和取消时,可能会产生内存碎片,这将导致大量闲置内存产生,预分配可通过提前给大型数据结构预约足够空间来避免这个问题。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)