您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > Matlab中提高m文件执行效率的小技巧
Matlab中提高m文件执行效率的小技巧(2011-03-1300:21:57)转载▼标签:杂谈分类:计算方法&matlab这篇文章是同学发给我的,不知原文出自哪里,介绍的基本上是有些用的小技巧,关于for循环的应用,据我个人的经验,有些时候下述第一条产生的时间差别甚至会达到一个数量级,还是相当可观的。不过提高matlab程序效率的最为根本的是结合matlab的特点,精简算法,曾经写过一个积分程序,在访问矩阵的时候,由于及时清除掉了冗余的部分,竟使得速度提高了200倍,而且矩阵规模越大,速度提高越是显著---------------------------------------------------------要提高M文件的执行效率,可采用下述的一些技巧。1.尽量避免使用循环结构MATLAB变量的基本类型是矩阵,当对矩阵的每个元素循环处理时,运算速度很慢。因此编程时应尽量把数组和矩阵看作一个整体来进行编程,而不是像其他的程序设计语言那样,使用循环结构对矩阵的元素循环进行处理。利用MATLAB提供的用于矢量化操作的函数,把循环矢量化,这样既可以提高编程效率,也可以提高程序的执行效率。下面给出一个循环的例子:i=0;forn=0:0.1:100i=i+1;y(i)=cos(n)end上述程序段把数组中的每个元素都进行函数值计算,这样会耗费大量的运算时间,我们可以把数组看作一个整体来处理,计算函数值,可以修改这个程序段如下。n=0:0.1:100;y=cos(n)通过使用MATLAB专门提供的测试程序运行时间的函数,可以发现,把数组看作一个整体,进行操作后,执行效率提高约300倍。另外,在必须使用多重循环的情况下,建议在循环的外环执行循环次数少的,内环执行循环次数多的,这样也可以显著提高程序执行速度。2.在使用数组或矩阵之前先定义维数MATLAB中的变量在使用之前不需要明确地定义和指定维数。但当未预定义数组或矩阵的维数时,当需赋值的元素下标超出现有的维数时,MATLAB就为该数组或矩阵扩维一次,这样就会大大降低程序的执行效率。因此,在使用数组或矩阵之前,预定义维数可以提高程序的执行效率。3.对矩阵元素使用下标或者索引操作在MATLAB中,矩阵元素的引用可用两个下标来表示。例如:A(i,j)表示矩阵的第i行第j列的元素;A(1:k,j)表示矩阵A的第j列的前k个元素;A(:,j)表示矩阵的第j列的所有元素。求矩阵A的第j列元素的平均值的表达式为mean(A(:,j))。4.尽量多使用函数文件少使用脚本文件因为每次调用MATLAB的脚本文件都需要将不必要的中间变量加载到内存中,每执行一次,就加载一次。函数在调用时被编译成了伪代码,只需要加载到内存一次。当多次调用同一个函数时会运行快一些。因此尽量多使用函数文件而少使用脚本文件,也是提高执行效率的一种方法。5.在必须使用循环时,可以考虑转换为C-MEX当必须使用耗时的循环时,可以考虑将循环体中的语句转换为C-MEX。C-MEX是将M文件通过MATLAB的编译器转换为可执行文件,是按照MEX技术要求的格式编写相应的程序,通过编译连接,生成扩展名为.dll的动态链接库文件,可以在MATLAB环境下直接执行。这样,循环体中的语句在执行时不必每次都解释(interpret)。一般来说,C-MEX文件的执行速度是相同功能的M文件执行速率的20~40倍。编写C-MEX不同于M文件,需要了解MATLABC-MEX规范。幸运的是MATLAB提供了将M文件转换为C-MEX的工具。Lan:在我看来,这一条尤其的重要,在处理大规模数据的时候6.内存优化MATLAB在进行复杂的运算时需要占用大量的内存。合理使用内存和提高内存的使用效率,可以加快运行速度,减少系统资源的占用。7.内存管理函数和命令●Clearvariablename:从内存中删除名称为variablename的变量。●Clearall:从内存中删除所有的变量。●Save:将指令的变量存入磁盘。●Load:将save命令存入的变量载入内存。●Quit:退出MATLAB,并释放所有分配的内存。●Pack:把内存中的变量存入磁盘,再用内存中的连续空间载回这些变量。考虑到执行效率问题,不能在循环中使用。8.节约内存的方法●避免生成大的中间变量,并删除不再需要的临时变量。●当使用大的矩阵变量时,预先指定维数并分配好内存,避免每次临时扩充维数。●当程序需要生成大量变量数据时,可以考虑定期将变量写到磁盘,然后清除这些变量。当需要这些变量时,再重新从磁盘加载。●当矩阵中数据极少时,将全矩阵转换为稀疏矩阵。
本文标题:Matlab中提高m文件执行效率的小技巧
链接地址:https://www.777doc.com/doc-2887045 .html