3.1 MATLAB快速入门

3.1.1 MATLAB概要

MATLAB是矩阵实验室(Matrix Laboratory)之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算、文字处理、可视化建模仿真和实时控制等功能。MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C、FORTRAN等语言简洁得多。学习MATLAB,先要从MATLAB的历史开始,因为MATLB的发展史就是人类社会在科学计算领域快速发展的历史,同时我们可以了解MATLAB的两位缔造者Cleve Moler和John Little在科学史上做的贡献。

20世纪70年代后期,身为美国新墨西哥大学计算机系主任的Cleve Moler在给学生讲授线性代数课程时,想教学生使用EISPACK和LINPACK程序库,但他发现学生用FORTRAN编写接口程序很费时间,于是他开始自己动手,利用业余时间为学生编写EISPACK和LINPACK的接口程序。Cleve Moler给这个接口程序取名为MATLAB,该名为矩阵(Matrix)和实验室(Laboratory)两个英文单词的前三个字母的组合。在以后的数年里,MATLAB在多所大学里作为教学辅助软件使用,并作为面向大众的免费软件广为流传。1983年春天,Cleve Moler到斯坦福大学讲学,MATLAB深深地吸引了工程师John Little。John Little敏锐地觉察到MATLAB在工程领域的广阔前景。同年,他和Cleve Moler、Steve Bangert一起,用C语言开发了第二代专业版。这一代的MATLAB同时具备了数值计算和数据图示化的功能。1984年,Cleve Moler和John Little成立了MathWorks公司,正式把MATLAB推向市场,并继续进行MATLAB的研究和开发。

MathWorks公司顺应多功能需求的潮流,在其卓越的数值计算和图示功能的基础上,又率先开拓了专业水平符号计算、文字处理、可视化建模和实时控制功能,开发了适合多学科、多领域的新一代科技应用软件MATLAB。经过多年的国际竞争,MATLAB已经占据了数值软件市场的主导地位。MATLAB的出现,为各国科学家开发学科软件提供了新的基础。在MATLAB问世不久后的20世纪80年代中期,原先控制领域里的一些软件包纷纷被淘汰或在MATLAB上重建。

时至今日,经过MathWorks公司的不断完善,MATLAB已经发展成为适合多学科、多种工作平台的功能强大的大型软件。在国外,MATLAB已经经受了多年的考验。在欧美等高校,MATLAB已经成为线性代数、自动控制理论、数理统计、数字信号处理、时间序列分析、动态系统仿真等高级课程的基本教学工具;成为攻读学位的大学生、硕士生、博士生必须掌握的基本技能。在设计研究单位和工业部门,MATLAB被广泛用于科学研究和解决各种具体问题。可以说,无论你从事工程方面的哪个学科,都能在MATLAB里找到合适的功能。

当前流行的MATLAB 5.3/Simulink 3.0包括拥有数百个内部函数的主包和三十几种工具包(Toolbox)。工具包又可以分为功能性工具包和学科工具包。功能性工具包用来扩充MATLAB的符号计算、可视化建模仿真、文字处理及实时控制等功能。学科工具包是专业性比较强的工具包,控制工具包、信号处理工具包、通信工具包等都属于此类。

MATLAB的开放性使其广受用户欢迎。除内部函数外,所有MATLAB主包文件和各种工具包文件都是可读、可修改的文件,用户可以通过对源程序的修改或加入自己编写的程序构造新的专用工具包。

3.1.2 MATLAB的功能

MATLAB软件是一种用于数值计算、可视化及编程的高级语言和交互式环境。使用MATLAB,可以分析数据、开发算法、创建模型和应用程序。借助其语言、工具和内置的数学函数,可以探求多种方法,能够比电子表格或传统编程语言(如C/C++或Java)更快地求取结果。

经过多年的发展,MATLAB已增加了众多的专业工具箱(见图3-1),所以其应用领域非常广泛,包括信号处理和通信、图像和视频处理、控制系统、测试和测量、计算金融学及计算生物学等。在各行业和学术机构中,工程师和科学家都使用MATLAB这一软件提高他们的工作效率。

图3-1 MATLAB的家族产品(专业工具箱)

3.1.3 快速入门案例

MATLAB是一款程序开发工具,它可以像其他工具(如Word)一样易用。而传统的学习MATLAB的方式一般是从学习MATLAB知识开始的,如MATLAB矩阵操作、绘图、数据类型、程序结构、数值计算等内容。学习这些知识的目的是能够将MATLAB用起来,可是很多人即便学完了,还是不能独立、自如地使用MATLAB。这是因为其在学习这些知识的时候,目标是虚无的,不是具体的,具体的目标应该是解决某一问题。

多年来,笔者一直使用MATLAB,但记住的MATLAB命令不超过20个,每次都靠几个常用的命令来实现各种项目。所以说,想使用MATLAB并不需要积累那么多知识,只要掌握MATLAB的几个小技巧即可。还需要说明的一点是,最好的学习方式就是基于项目学习,因为这是一种问题驱动式的学习方式,能够让学习的目标更具体,更容易让学习的知识转化成实实在在的成果,最重要的是让学习者快速建立自信,感受到学习的快乐和成就感。

MATLAB的使用其实很简单,哪怕用户从来没有用过MATLAB,也可以很快入门。

下面将通过一个小项目,带着大家一步一步用MATLAB解决一个实际问题,假设我们都是MATLAB的门外汉(还达不到菜鸟的水平)。

现已知股票的交易数据:日期、开盘价、最高价、最低价、收盘价、成交量和换手率,试用某种方法来评价这只股票的价值和风险。

这是一个开放的问题,但比较好的方法是用定量的方式来评价股票的价值和风险,所以这是一个很典型的科学计算问题。通过前面对MATLAB功能的介绍,我们确信MATLAB可以帮助我们(选择合适的工具)。

现在抛开MATLAB,来看一个科学计算问题的典型的处理流程是怎样的。一个典型的科学计算的流程如图3-2所示,即获取数据、数据探索和建模,最后是项目的发布。

图3-2 一个典型的科学计算的流程

现在根据上述流程,用MALTAB实现这个项目。

第一阶段,利用MATLAB从外部(Excel)读取数据。

作为一个门外汉,我们并不知道如何用命令来操作,但计算机操作经验告诉我们当不知道如何操作的时候,不妨尝试一下右键。

Step1.1:选中数据文件,单击鼠标右键,将弹出快捷菜单,可发现“导入数据”选项,如图3-3所示。

图3-3 “导入数据”选项

Step1.2:选择“导入数据”选项,进入导入数据界面,如图3-4所示。

图3-4 导入数据界面

Step1.3:在如图3-4所示界面中,单击右上角的“导入所选内容”按钮,在MATLAB的工作区(当前内存中的变量)就会显示这些导入的数据,并以列矢量的方式表示(因为默认的数据类型就是“列矢量”),如图3-5所示。也可以选择其他数据类型,大家不妨尝试一下选择不同的数据类型后结果会有什么不同。

图3-5 导入的数据在工作区中的显示方式

至此,第一阶段获取数据的工作完成了。下面转入第二阶段的工作。

第二阶段,数据探索和建模。

对于该问题,我们的目标是能够评估股票的价值和风险,但现在我们不知道该如何去评估。MATLAB是工具,它不能代替我们决定用何种方法来评估,但是可以辅助我们找到合适的方法。下面尝试如何在MATLAB中进行数据的探索和建模。

Step2.1:查看数据的统计信息,了解数据。具体操作方式是双击工具区,此时会看到所有变量的详细统计信息,如图3-6所示。

图3-6 变量的统计信息界面

查看工具区中变量的基本的统计信息,有助于快速认识我们正在研究的数据。当然,只要大体浏览这些信息即可,除非这些统计信息对某个问题有更重要的意义。数据的统计信息是认识数据的基础,但不够直观,更直观也更容易发现数据规律的方式就是数据可视化,也就是以图的形式呈现数据的信息。下面尝试用MATLAB对这些数据进行可视化。

由于变量比较多,所以有必要对这些变量进行初步梳理。对于这个问题,我们一般关心收盘价随时间的变化趋势,因此可以初步选定日期(DateNum)和收盘价(Pclose)为重点研究对象。也就是说,下一步要对这两个变量进行可视化。

作为一个新手,我们还不知道如何绘图,但不要紧,MATLAB(2012a以后版本)提供了非常方便的绘图功能。MALTAB中有一个“绘图”面板,这里提供了非常丰富的图例,如图3-7所示。

图3-7 MATLAB“绘图”面板中的图例

需要注意的是,需要先在工作区选中变量,“绘图”面板中的这些图标才会激活。接下来就可以选择图标进行绘图,一般先选第一个(plot)看一下效果,然后浏览整个面板,看看有没有更合适的。下面进行绘图操作。

Step2.2:选中变量DataNum和Pclose,在“绘图”面板中单击plot图标,得到这两个变量的可视化结果,如图3-8所示。同时,在命令行窗口区会显示绘制此图的命令:

图3-8 通过plot图标绘制的原图

下次再绘制这样的图时直接用plot命令即可。一般情况下,用这种方式绘制的图往往不能满足要求,比如我们希望更改如下内容:

(1)曲线的颜色、线宽、形状;

(2)坐标轴的线宽、坐标,增加坐标轴描述;

(3)在相同的坐标轴中绘制多条曲线。

我们需要了解更多关于plot命令的用法,此时就会用到MATLAB强大的帮助系统。获取帮助的两个命令是doc和help。对于新手来说,推荐使用doc,因为doc直接打开的是帮助系统中的某个命令的用法说明,不仅全面,还有应用实例(见图3-9)。这样用户就可以参考实例“照猫画虎”,将实例快速转化成自己需要的代码。

图3-9 通过doc启动的plot帮助信息界面

当然,也可以在“绘图”面板上选择其他图标,这样就可以与plot绘制的图进行对照,看哪种绘图形式更适合数据的可视化。一般地,我们在对数据进行初步的认识之后,就能够在脑海中勾绘出比较理想的数据呈现形式,这时快速浏览一下“绘图”面板中的可用图标,即可很快选定自己中意的绘图形式。对于案例中的问题,中规中矩的曲线图更容易描绘出收盘价随时间的变化趋势,所以这里选择plot图标对数据进行可视化。

接下来我们就要考虑如何评估股票的价值和风险了。

对于一只好的股票,如图3-8所示的走势,我们希望股票的增幅越大越好,体现在数学上,就是曲线的斜率越大越好。而对于风险,同样对于如图3-8所示的走势,则用最大回撤来描述更合适。

经过这样的分析,我们就可以确定,接下来要计算曲线的斜率和该股票的最大回撤。计算曲线的斜率这个问题比较简单,由于从数据的可视化结果来看,数据近似成线性,所以不妨用多项式拟合的方法来拟合该组数据的方程,这样就可以得到斜率。

如何拟合呢?作为一个新手,并不清楚用什么命令。此时就可以用MATLAB自带的强大的帮助系统。在MATLAB主面板中单击“帮助”按钮(靠近右侧),就可以打开帮助系统,在搜索框中搜索多项式拟合的关键词“polyfit”,马上就会显示与该关键词相关的帮助信息,同时很快就会发现,正好有一个polyfit命令,选择该命令,进入该命令的用法页面,了解该命令的用法,即可直接使用。也可以直接找到合适的案例,然后将案例中的代码复制过去,再修改数据和参数。

Step2.3:通过帮助系统搜索多项式拟合的命令,并计算股票的价值,具体代码如下。

Step2.4:用通常的方法,即通过help查询的方法,可以很快得到计算最大回撤值的代码,具体代码如下。

至此,我们已经找到了评估股票价值和风险的方法,并能用MALTAB来实现。但是,我们都是在命令行中实现的,并不能很方便地修改代码。MATLAB最经典的一种用法就是脚本,因为脚本不仅能够完整地呈现整个问题的解决方法,同时便于维护、完善和执行,优点很多。所以,当我们的探索和开发工作比较成熟后,通常会将这些有用的程序归纳整理起来,形成脚本。现在来分析如何快速开发解决该问题的脚本。

Step2.5:像Step1.1一样,重新选中数据文件,单击鼠标右键,选择“导入数据”选项,待启动导入数据界面后,选择“生成脚本”选项,然后就会得到导入数据的脚本,并保存该脚本。

Step2.6:从命令历史中选择一些有用的命令,并将其复制到Step2.5得到的脚本中,这样就可以很容易地得到解决该问题的完整脚本,如下所示。

至此,第二阶段的数据探索和建模工作全部完成。

第三阶段,项目的发布。

当项目的主要工作完成之后,就进入了项目的发布阶段,换句话说,就是将项目的成果展示出去。通常来讲,发布项目的形式有如下几种:

(1)能够独立运行的程序,比如在第二阶段得到的脚本;

(2)报告或论文;

(3)软件和应用。

第一种发布形式,在第二阶段已完成。第三种形式更适合大中型项目,当然用MATLAB开发应用也比较高效。这里重点关注第二种发布形式,因为这是一种比较常用也比较实用的项目发布形式。下面将继续利用上述案例介绍如何通过MATLAB的发布功能来快速发布报告。

Step3.1:在脚本编辑器的“发布”面板中,从“发布”按钮(最右侧)的下拉菜单中,选择“编辑发布”选项,打开“编辑配置”窗口,如图3-10所示。

图3-10 “编辑配置”窗口

Step3.2:根据要求,选择合适的输出文件格式,默认为html,但比较常用的是doc格式,因为doc格式便于编辑,尤其是对于写报告或论文。然后单击“发布”按钮,就可以运行程序,同时会得到一份详细的运行报告,包括目录、实现过程、主要结果和图,当然也可以通过配置其他选项来控制是否显示代码等内容。

至此,整个项目就完成了。从这个过程中可以发现,我们并不需要记住所有MATLAB命令,只使用少数几个命令,MATLAB就帮我们完成了想做的事情。通过这个项目,我们可以有如下基本认识:一是MATLAB的使用真的很简单,就像一般的办公工具那样好用;二是在项目进行过程中,思路是核心,我们只是用MATLAB快速实现了我们想做的事情。

3.1.4 入门后的提高

快速入门是为了让我们快速建立使用MATLAB的信心,有了信心后,提高使用水平是自然而然的事情。为了帮助读者更自如地应用MATLAB,下面将介绍几个入门后提高MATLAB使用水平的方法。

一是要了解MATLAB常用的操作技巧和知识点,这些操作技巧和知识点基本上是每个项目中都会用到的。

二是要了解MATLAB的开发模式,这样无论项目多复杂,读者都能灵活应对。

三是基于项目学习,积累经验和知识。

做到上述三点,读者将会逐渐变成MATLAB高手,从而自如地使用MATLAB。