0.2 基础知识

(1)MATLAB是做什么的?为什么MATLAB叫做MATLAB?

MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。

MATLAB是Matrix和Laboratory两个词的组合,意为矩阵工厂(矩阵实验室),之所以叫做矩阵工厂(矩阵实验室),是因为MATLAB的基本数据单位是矩阵。

(2)MathWorks公司的创始人是谁?

Cleve Moler和Jack Little是MathWorks公司的创始人。其中Cleve Moler是MATLAB首个版本的开发者,Jack Little是信号处理工具箱和控制系统工具箱早期版本的共同开发者和首席架构师。

(3)新手如何开始学习MATLAB?

如果你的英文阅读还算可以,那么MATLAB官方的帮助文档将是最好且最全面的学习材料,你可以通过在MATLAB的命令窗口(Command Window)中键入“doc”来调出MATLAB官方的帮助文档,或者你也可以在MathWorks公司官方网站的文档中心(http://www.mathworks.cn/cn/help/documentation-center.html)查看在线的MATLAB官方帮助文档。

另外MathWorks公司官方网站的用户中心(http://www.mathworks.cn/matlabcentral/)中有一些MATLAB相关问题的讨论及一些MATLAB大牛的博客,其中包括Cleve Moler的博客——Cleve's Corner(http://blogs.mathworks.com/cleve),在MATLAB用户中心你可以学习MATLAB。

MATLAB技术论坛(http://www.matlabsky.com)是一个不错的学习MATLAB的中文网站,本书的作者之一李洋(Faruto)是MATLAB技术论坛核心管理团队的成员之一,在这个论坛里你可以找到大量的学习资料(代码、数据、视频等)或直接提出问题同大家讨论。

当然,你也可以购买一些MATLAB相关的中外文书籍进行学习。

(4)使用MATLAB需要很厉害的编程能力吗?

大多数时候并不需要,因为MATLAB有很多的函数和工具箱,官方的工具箱还有数十种,第三方的工具箱不计其数而且每天都在增加,你用到的一般方法和函数都可以在MATLAB的工具箱中找到。

(5)能否简单举一个MATLAB的例子?

生成100个高斯(正态)分布随机数,并对这100个数进行特征描述。MATLAB代码如下:

运行结果(由于是生成随机数,多次运行结果可能不同)为:

(6)如何查看使用的MATLAB的版本信息以及内存信息?

在MATLAB的命令窗口(Command Window)中键入“version”和“memory”来查看所使用的MATLAB版本信息和内存信息。运行结果(由于MATLAB版本的不同以及电脑配置的不同,运行结果可能不同)为:

(7)MATLAB支持中文吗?

支持!但在MATLAB中,有相当一部分工具箱的作者都是以英文为母语的,所以建议熟练全英文环境。

(8)MATLAB支持自动补全(Tab Completion)吗?

支持!在较新版本中,MATLAB引入了命令自动补全功能,使用Tab键能自动补全MATLAB命令或给出所有可能的补全命令列表。

(9)MATLAB有哪些常用的热键?

MATLAB除了支持常见的Windows热键(复制:Ctrl+C,剪切:Ctrl+X,粘贴:Ctrl+P等),在MATLAB文件编辑器(Editor)中,还有如下一些常见的热键。

●F5:运行当前的M文件

●F9:运行选中的代码段

●Ctrl+R:注释选中的代码段

●Ctrl+T:反注释选中的代码段

●Ctrl+I:将选中的代码段智能缩进调整

(10)如何清除变量?

使用clear命令可以清除工作空间(Workspace)中的所有变量,清除工作空间中名字为name的变量,使用clear name命令。

(11)如何清空命令窗口(Command Window)?

使用clc命令可以清空命令窗口(Command Window)。

(12)MATLAB常用的数据类型有哪些?

MATLAB支持的基本数据类型有基本数值类型、字符串、元胞数组、结构、函数句柄、Java对象、逻辑类型等。其中基本数值类型包括双精度类型、单精度类型、整数类型等。

(13)如何查看函数的代码?

MATLAB文件编辑器(Editor)菜单栏中可以使用file->Open直接打开相关M文件查看源码,或者也可以只用edit函数打开,如“edit mean”会直接打开求均值函数mean查看源码:

(14)MATLAB里面可以使用科学计数法吗?

可以,如下例。

(15)什么叫做MATLAB的当前路径(目录)、工作搜索路径(目录)?

“当前路径(目录)(Current Folder)”是指MATLAB当前所在的路径,MATLAB菜单栏下面有一个Current Folder可以在这里进行当前所在目录的更改,如图0-1所示。

图0-1 MATLAB当前路径(目录)(Current Folder)更改位置

“工作搜索路径(目录)”是指当你使用某一个函数的时候,MATLAB可以搜索该函数的所有目录集合。在MATLAB菜单栏File->Set Path中可以查看所有的工作搜索路径(目录)集合,如图0-2所示。

当你使用某一个函数的时候,MATLAB首先会从当前目录搜索调用该函数,如果当前目录没有该函数,MATLAB就会在工作搜索目录按照从上到下的顺序搜索调用该函数,如果工作搜索目录中也没有该函数,会给出如下的报错:

图0-2 MATLAB工作搜索路径(目录)设置

(16)在MATLAB中如何安装第三方的工具箱?

如果待安装的第三方的工具箱使用纯M语言编写,这种情况比较简单,工具箱下载后只需将第三方的工具箱所在目录添加到MATLAB工作搜索目录即可。具体操作就是在MATLAB菜单栏中选择File->Set Path->Add with Subfolders,然后选择之前存放第三方工具箱的文件夹,单击“保存(Save)”就可以了。

如果待安装的第三方的工具箱并不是单纯用M语言编写的,比如LIBSVM工具箱中的MATLAB版本核心是使用C++代码编写的,安装这样的第三方工具箱的步骤就稍微复杂一些,下面以安装LIBSVM工具箱为例简要介绍一下。

安装LIBSVM工具箱是在MATLAB平台下使用LIBSVM的前提。在MATLAB平台下安装LIBSVM工具箱的本质其实就是将LIBSVM工具箱的MATLAB版本文件svmtrain.c和svmpredict.c在MATLAB中进行编译生成mex文件(依操作系统不同,32位操作系统编译后生成svmtrain.mexw32和svmpredict.mexw32,64位操作系统编译后生成svmtrain.mexw64和svmpredict.mexw64),之后就能在MATLAB中使用。安装LIBSVM工具箱主要有以下几个步骤:

① 下载LIBSVM工具箱并将其所在目录添加到MATLAB工作搜索目录

可在http://www.csie.ntu.edu.tw/~cjlin/libsvm/下载最新版本的LIBSVM工具箱,然后在MATLAB菜单栏中选择 File->Set Path->Add with Subfolders,并选择之前存放LIBSVM工具箱的文件夹,最后单击“保存”即可。

② 选择编译器

由于LIBSVM的原始版本是用C++写的,需要用编译器编译一下,生成一个*.mexw32或*.mexw64文件,这样就可以在MATLAB平台下使用LIBSVM。

如果编译器没有选择好的话,下一步进行make编译的时候就会出现如下报错:

表示你没有选择好编译器。

这里需要本机事先安装一个C++编译器然后才能进行选择,推荐使用Microsoft Visual C++6.0编译器或者更高版本的Visual Studio。一般MATLAB会自带一个编译器Lcc-win32 C,但这个在这里无法使用,因为LIBSVM源代码是用C++写的,而Lcc-win32 C是一个C编译器,无法编译C++源代码。

下面看一下选择编译器的具体操作。

首先在MATLAB命令窗(Commond Window)中输入:

注意mex后面要打一个空格然后是-setup,然后会出现如下类似内容:

这里问你是否选择本机已安装的编译器,正规地选择“y”然后指定编译器即可。根据本机安装的编译器,会出现如下类似内容:

然后选择相应的编译器并确认即可:

这样就表示编译器选择成功了(此步骤中可能会出现警告,是正常现象)。

MATLAB支持的编译器列表可以在如下网址查看:

http://www.mathworks.com/support/compilers/current_release/。

如果输入“mex–setup”会出现:

选择y后,可选择的编译器里没有已经安装的编译器,表示MATLAB可能没有识别、记录安装的编译器的名字和目录(有时候会发生这种情况),此时应该重新输入“mex–setup”,选择“n”手动进行编译器的设置:

这样的话就可以手动选择你想要的编译器了:

这是确认步骤,如果你的编译器确实安装在MATLAB给出的这个目录(这里是D:\Microsoft Visual Studio),选择“y”确认即可;如果不是,说明MATLAB没有识别出安装的地方,选择“n”手动指定目录。选择n后的结果如下:

此时输入安装的编译器的完整目录即可。

③ 编译文件

这一步的具体操作就是运行LIBSVM工具箱中MATLAB版本文件夹中的make.m文件。首先需要把MATLAB的当前目录(Current Folder)调整到LIBSVM工具箱所在的文件夹,然后在MATLAB命令窗口(Commond Window)输入“make”。

如果成功运行并没有报错,到此就说明LIBSVM工具箱成功安装了。LIBSVM工具箱中有自带的heart_scale.mat测试数据集,可以运行以下代码来检查是否安装成功:

出现如下结果,则说明安装成功了:

当你使用某一函数时,MATLAB首先会从当前目录搜索调用该函数,为了防止其他位置也有类似名字的make.m函数进而运行错误,这一步要把MATLAB的当前目录(Current Folder)调整到LIBSVM所在的文件夹,优先运行LIBSVM文件夹下的make.m文件。

make.m(LIBSVM版本3.14)的文件内容如下:

安装完LIBSVM工具箱后,可能会有人要用help svmtain和help svmpredict来查看这两个函数的帮助文件,但结果会是运行help svmtain在较新版本下得到的是MATLAB自带的svmtrain函数的帮助文件,运行help svmpredict会有如下报错:

因为svmtrain和svmpredict的源代码是svmtrain.c和svmpredict.c,其源代码是用C++写的,编译后生成的文件是svmtrain.mexw32和svmpredict.mexw32(或svmtrain.mexw64和svmpredict.mexw64)。编译后的*.mexw32(或*.mexw64)文件是加密过的,打开是乱码,没有帮助文件说明注释,想看svmtrain和svmpredict的源代码可以直接查看svmtrain.c和svmpredict.c。

由于较新版本的MATLAB有自带的SVM实现,其函数名也为svmtrain,文件位置在MATLAB根目录下\toolbox\bioinfo\biolearning\svmtrain.m,为避免MATLAB自带的svmtrain函数与LIBSVM工具箱svmtrain函数调用错误,可以将MATLAB自带的svmtrain.m函数备份后改名,比如改成svmtrain_matlab.m或svmtrain.m_backup。

(17)如何恢复MATLAB的文件关联?

有时候重装系统或者其他错误操作会导致MATLAB文件关联失效,运行如下代码可以恢复MATLAB的文件关联。