您好, 访客   登录/注册

提高MATLAB速度的方法

来源:用户上传      作者:

  摘要:介绍科学计算软件MATLAB的几则使用技巧,对加快启动速度和提高运行速度有重要的参考价值。
  关键词:MATLAB;启动速度;运行速度
  中图分类号:TP312文献标识码:A文章编号:1009-3044(2011)20-4968-02
  The Method of Improving the Speed of MATLAB
  ZHANG Xiao-li
  (Computer Department, Xi'an Institute Of Post & Telecommunication, Xi'an 710061, China)
  Abstract: Several methods ofhow to use the scientific computing software MATLAB, are presented in this paper. They would be beneficial to accelerate its start-up speed and improve its running speed.
  Key words: MATLAB; start-up speed; running speed
  科学计算软件MATLAB在各专业领域得到越来越广泛的应用,逐渐成为教学和科研不可缺少的工具。工具包之多,软件所占资源之多,使得硬件条件较差的计算机不能很好的运行MATLAB软件。本文介绍加快MATLAB的启动速度和运行速度的几则使用技巧,供读者参考。
  1 加快MATLAB启动速度
  MATLAB版本升级很快,每次升级给用户带来很多新的工具箱,提供很多新的功能,但对计算机硬件配置的要求越来越高,启动和运行速度也越来越慢。为了加快MATLAB的启动速度,有以下三种方法。
  1.1 更改MATLAB启动快捷方式
  在缺省配置下,MATLAB有一个启动闪屏(splash windows),去掉它可以节省一定的内存消耗,从而加快启动。在MATLAB启动快捷方式后添加命令行参数“-nos-plash”即可去掉闪屏。
  缺省配置下,MATLAB会启动虚拟机,这会消耗大量内存。添加命令行-nojvm”可禁用JAVA 虚拟机。
  MATLAB启动快捷方式命令形如:"%MATLABROOT%\bin\win32\matlab.exe -nosplash -nojvm"。经过以上配置,MATLAB启动和运行速度会得到大幅提升。
  禁用JAVA虚拟机后,MATLAB中有些功能,诸如:调试功能、可视化界面设计功能不能使用,但大多数其它功能可正常运行。如果使用的功能需要JAVA虚拟机支持,启动时将命令行参数“-nojvm”去掉即可。
  1.2 修改matlabrc.m文件
  MATLAB在多种操作系统中、多种屏幕分辨率下均可正常运行,MATLAB启动时自动运行matlabrc.m文件。而这个MATLAB脚本会判断当前操作系统,会检测运行环境(比如屏幕分辨率),从而设置相关系统参数。但一般用户都只在一种操作系统中(比如Windows XP)、一种喜好的环境下(比如将屏幕分辨率设为1024x768)使用MATLAB,我们可以把这些判断语句去掉,直接设置系统参数,并删去(或注释掉)一些无关的语句,从而一定程度上缩短MATLAB启动时间。
  1.3 更改MATLAB搜索路径
  MATLAB启动时会添加搜索路径。如果安装了多个工具箱,搜索路径会很多。过多的搜索路径除了减缓启动速度外,还会影响MATLAB执行效率。因为MATLB执行程序时会在这些路径中寻找M文件。而实际上我们不会为完成某个任务使用所有的工具箱。为提高启动和运行速度,可以修改pathdef.m文件,将我们暂时不用的工具箱和其它搜索路径注释掉(MATLAB程程序以%为注释标识),从而加快启动和运行。
  2 提高MATLAB运行速度
  加快了MATLAB的启动速度还是不够的,在编程的过程中,总结出遵循以下的原则才能保证MATLAB程序高速的运行。
  2.1 尽量避免使用循环结构
  MATLAB变量的基本类型是矩阵,当对矩阵的每个元素循环处理时,运算速度很慢。因此编程时应尽量把数组和矩阵看作一个整体来进行编程,而不是像其他的程序设计语言那样,使用循环结构对矩阵的元素循环进行处理。利用MATLAB提供的用于矢量化操作的函数,把循环矢量化,这样既可以提高编程效率,也可以提高程序的执行效率。
  2.2 在使用数组或矩阵之前先定义维数
  MATLAB中的变量在使用之前不需要明确地定义和指定维数。但当未预定义数组或矩阵的维数时,当需赋值的元素下标超出现有的维数时,MATLAB 就为该数组或矩阵扩维一次,这样就会大大降低程序的执行效率。因此,在使用数组或矩阵之前,预定义维数可以提高程序的执行效率。
  2.3 尽量多使用函数文件少使用脚本文件
  因为每次调用MATLAB的脚本文件都需要将不必要的中间变量加载到内存中,每执行一次,就加载一次。函数在调用时被编译成了伪代码,只需要加载到内存一次。当多次调用同一个函数时会运行快一些。因此尽量多使用函数文件而少使用脚本文件,也是提高执行效率的一种方法。
  2.4 内存管理
  MATLAB在进行复杂的运算时需要占用大量的内存。合理使用内存和提高内存的使用效率,可以加快运行速度,减少系统资源的占用。对于内存中不再使用的或者临时变量使用Clear指令删除掉,使用 Save指令将变量存入磁盘, 使用 Load指令将save命令存入的变量载入内存,使用Quit指令退出MATLAB,并释放所有分配的内存,使用 Pack指令把内存中的变量存入磁盘,再用内存中的连续空间载回这些变量,考虑到执行效率问题,不能在循环中使用。
  2.5 数据选取和书写
  1)在能解决实际问题的提前下,使用以下数据类型,matlab才会对其加速:logical,char,int8,uint8,
  int16,uint16,int32,uint32,double 。尽量避免使用以下数据类型:numeric,cell,structure,single,
  function handle,java classes,user classes,int64,uint64
  2)matlab不会对超过三维的数组进行加速。
  3)当使用for循环时,只有遵守以下规则才会被加速:
  ① for循环的范围只用标量值来表示;
  ② for循环内部的每一条语句都要满足上面的两条规则,即只使用支持加速的数据类型,只使用三维以下的数组;
  ③ 循环内只调用了内建函数(build-in function)。
  4)当使用if、elseif、while和switch时,其条件测试语句中只使用了标量值时,将加速运行。
  5)不要在一行中写入多条操作,这样会减慢运行速度。即不要有这样的语句: x = 5; for k=1:10000, sin(A(k)), end;
  6)当某条操作改变了原来变量的数据类型或形状(大小,维数)时将会减慢运行速度。
  3 实例
  利用plot指令绘制分段函数y1=sin(x),x1 (1,5)和y2=0,x2 (5,10)。
  clc;clear;x1=0:0.01:5;x2=5:0.0001:10;for i=1:length(x1),
  y1(i)=sin(x1(i)); end;y2=0;plot(x1,y1,x2,y2);
  在MATLAB的 M 文件运行后,图形出来的速度很慢(10秒以上的时间),怎么回事?是电脑硬件问题,还是程序结构问题?仔细对照提高运行速度的原则,发现使用数组运算可以代替循环,多条指令写在一行上,x2和y2的维数不同,调用plot时matlab自动进行维数转换耽误了时间,程序修改以后运行,图形一下子就出来了。代码如下:
  clc;
  clear;
  x1=0:0.01:5;
  x2=5:0.0001:10;
  y1=sin(x1);
  [m,n]=size(x2);
  y2=zeros(m,n);
  plot(x1,y1,x2,y2);
  4 结论
  MATLAB针对各专业领域都提供了相应的功能,对MATLAB进行适当地配置,同时编写代码时注意以上原则,不仅可以提高运行效率,又不会减少在相关领域的MATLAB提供的强大科学计算和图形可视化功能。
  参考文献:
  [1] 张志涌.MATLAB R2008a[M].北京:北京航空航天大学出版社,2009.
  [2] 蔡苗苗.MATLAB使用技巧几则[J].电脑学习,2004,12(6).

转载注明来源:https://www.xzbu.com/8/view-8699648.htm