程序性能优化是编程工作的必需环节之一。为什么要编程?为的就是提高处理事情的效率。计算机的计算效率远高于人类,所以,我们利用编程语言,“告诉”计算机应该怎样操作来完成任务。采用怎样的方式”告诉“计算机,计算机才能提高任务完成的效率?这就需要我们对程序性能不断优化。
在MATLAB语言中,程序优化的方法是:
矩阵作为操作主体;
预定义变量;
内存的管理。
我们要比较两个程序的性能优劣,就必须选择一个衡量标准。
MATLAB语言中提供了三种种计时函数,我们可以利用计时函数来定量获得程序运行时间,把时间作为比较程序优劣的一种定量标准。计时函数主要有cputime,tic、toc和etime、clock函数。
cputime:表示CPU的时间;
etime(t,t0):用来计算两个日期向量t和t0之间的时间差;
clock:表示此时的现实时间;
tic:启动一个计时器;
toc:停止一个计时器。
第一种方法:利用cputime,单位和CPU工作频率有关 ,返回程序实际的运行时间;
第二种方法:利用tic和toc,单位为秒,程序开始前启动一个计时器,即使用tic;程序结束后停止计时器,即使用toc;最后返回计时器存在的时间;
第三种方法:利用clock和etime函数,单位为秒,返回程序实际的运行时间,返回程序实际的运行时间;
在上面的三个例子中,我们把pause(3)作为被测程序段;只要把需要计算运行时间的代码替换pause(3),即可测出程序运行时间。可以看出,tic和toc的组合测时间最为精确。
下面介绍两种常用的程序优化方法。
1. 循环向量化
以矩阵作为操作主体,尽可能避免循环运算,避免对矩阵元素的操作;当可以用一个等效数组来解决给定问题时,应避免用for循环。
从上面的例子中可以看出,循环向量化后,程序运行时间从 0.012844 seconds减少到 0.003219 seconds。
2. 预定义变量
数据的预定义:对于可能出现变量维数不断扩大的问题,应预先估计变量可能出现的最大维数,进行预定义。
虽然在MATLAB语言中,一般时候,变量不需要定义,但是对变量进行预定义,可使程序在执行循环结构时加快速度。
从上面的例子中可以看出,预定义变量后,程序运行时间从 0.006704 seconds减少到 0.003407 seconds。
我们上面的例子中,都是只有几行的程序,但仍然可以看出程序优化后的运行时间明显减少。试想,如果我们写了百行、千行甚至万行程序,优化后的程序,节约的时间将是相当可观的!所以,对程序性能进行优化还是很有必要的!
最后,感谢您的耐心阅读!