第13章 MATLAB 7.0与Word、Excel的混合使用
Math Works公司开发的MATLAB 7.0 Notebook成功地将Microsoft Word和MATLAB 7.0结合在一起,为文字处理、科学计算和工程设计营造了一个完美的工作环境。这样MATLAB 7.0不仅兼具原有的计算能力,而且又增加了Word软件的编辑能力,MATLAB 7.0 Notebook可以在Word中随时修改计算命令,随时计算并生成图像返回,使用户能在Word环境中“随心所欲地享用”MATLAB 7.0的浩瀚科技资源。在MATLAB 7.0 Notebook中,用户可以在word文档中创建命令,然后送到MATLAB 7.0的后台中执行,最后将结果返回到word中。
建议撰写科技报告、论文、专著的科学工作者使用MATLAB 7.0 Notebook,建议讲授、编写理工科教材的教师使用MATLAB 7.0 Notebook,建议对于演算理工科习题的广大学生使用MATLAB 7.0 Notebook。MATLAB 7.0 Notebook的强大功能将会使你事半功倍。
除此之外,MATLAB 7.0与Excel的混合使用使得用户在很多方面获得了极大的方便,在本章的第2节中将详细地介绍它们的使用方法。
13.1 Notebook的安装和使用环境
从上面的介绍中可以看出,使用MATLAB 7.0 Notebook时,计算机中必须有Word和MATLAB 7.0。本书以MATLAB 7.0和Word 2000为例。MATLAB 7.0 Notebook文件又称为M-book文件,它是在MATLAB 7.0环境下安装的。下面介绍其具体步骤。
(1)在系统中分别安装MATLAB 7.0和Word 2000,并启动MATLAB 7.0命令窗口;
(2)在命令窗口中输入:
就会得到如下代码:
(3)根据安装的Word的版本选择相应的代号,本文选择如下:
这样你就可以使用MATLAB 7.0 Notebook了。通过下面地两种方法可以打开一个M-book文件。
(1)直接在MATLAB 7.0命令窗口键入命令来新建或打开一个M-book文件:
(2)直接打开M-book.dot文件,如图13-1所示。
图13-1 打开的M-book.dot文件
13.2 一个Notebook实例
使用Notebook,在某种意义上就是在Word中使用M-book模板文档。Notebook是通过动态链接和MATLAB 7.0交互的。Notebook和MATLAB 7.0交互的基本单位为细胞(在Notebook中,Word和MATLAB 7.0之间交换的信息叫做“细胞”)。M-book需要把在Word中输入的MATLAB 7.0命令或者语句行组成细胞,再传到MATLAB 7.0中运行,运行输出的结果再以细胞的方式传回Notebook。
1.在Word中执行命令的基本过程
Notebook采用输入细胞(input cell)来定义MATLAB 7.0的输入命令。具体操作步骤如下:
· 采用文本格式输入命令,在命令结束时不要按回车和空格键;
· 从Notebook菜单中选中“Define Input Cell”选项,用来定义输入细胞;
· 从Notebook菜单中选中“Evaluate Cell”选项或者按Ctrl+Enter键。
其中输入细胞都显示为黑方括号包括的绿色字符,输出细胞都是黑方括号包括的蓝色字符,如果出现错误黑方括号包括的红色字符,其他文本都默认为黑色字符。如下:(作者注释:无专门标示的行为蓝色)
m=eye(3)(作者注释:此行为绿色)
2.实例讲解
【例13.1】在一段文本中间执行代码。
在MATLAB 7.0中,可以把输入细胞放在文本中间运行,而不影响其他文本。步骤如下:
· 输入样本如下,将m=eye(3)放到文本中间。
· 选中命令,代码设置如下:
· 从Notebook菜单中选中“Evaluate Cell”选项或者按Ctrl+Enter键。将会出现上面例子中类似的结果。
· 如果要将输出细胞转化为普通文本,选中要转换的细胞,然后从Notebook菜单中选中“Undefine Cells”选项或者按Alt+U键。执行结果为:
【例13.2】绘制一幅图片。
生成完整图形的多条图形指令必须定义在同一细胞群中:
将以上程序写到Word当中,然后全部选上,然后选择“Notebook|Define Input Cell”,最后从Notebook菜单中选中“Evaluate Cell”选项,或者按Ctrl+Enter键,得到的结果如图13-2所示。
图13-2 图片显示结果
13.3 Notebook使用的几个问题
最后强调一下Notebook使用中应该特别注意的几个问题。
· M-book文档即在Word中输入的MATLAB 7.0函数命令、语句或程序,其指令与标点符号都必须在英文状态下输入;
· 带鼠标操作的图形MATLAB 7.0交互指令最好不在M-book文档中运行;
· Windows是一种多任务操作系统。但在运行M-book文档时,最好不运行其他程序,不执行其他任务,以免影响M-book文档中程序的正确执行;
· 由于计算机硬件与软件配合方面诸多不确定因素的影响,M-book文档中的程序执行可能出现异常情况。这可以用以下方法解决:第一,MATLAB 7.0主程序首行用语句clear以清除内存中的变量和函数;第二,重新启动计算机后,再执行M-book文档中的程序;第三,将M-book文档中的程序拷贝为M文件,然后到MATLAB 7.0的命令窗口下去执行;
· MATLAB 7.0指令在M-book文档中运行的速度比在MATLAB 7.0命令窗口中执行要慢很多,但这对撰写科技文章或数据没有什么影响;
· 可将细胞转换为普通文本。输入细胞在Word里编辑的文件中是绿色字符,而输出细胞是蓝色字符,这会影响Word文件的印刷效果。可以将Notebook中的输入细胞、输出细胞转换为普通文本,其转换步骤为先将光标放在细胞中,然后选中Notebook菜单中的“Undefine Cells”选项命令或者按组合键Alt+U。还可以用鼠标左键选中输入细胞即“刷黑”,接着运行Notebook菜单中的“Undefine Cells”子项命令,全部输入细胞和输出细胞都会被转换为文本格式显示,黑色的方括号对也被取消。所有绿色字符的输入细胞与蓝色字符的输出细胞均变成黑色字符。此时黑色字符为“Courier New”字体的10号字。在Word中,就可以按照撰写要求对其进行编辑;
· 如果需要的话,使用Notebook菜单中的“Bring MATLAB 7.0 to Font”命令或者按组合键Alt+M可以把MATLAB 7.0的命令窗口调到前台;
· 使用Notebook菜单中的“Toogle Graph Output for Cell”命令可以控制是否显示输入细胞或输出细胞的输出图形。若控制为不输出图形,可将光标置于欲运行的细胞内,选中该“Toggle Graph Output for Cell”命令项,在细胞后将生成“no graph”,运行细胞就不输出图形;再一次选中该项,即可输出图形。
13.4 Excel link的安装和使用环境
Excel link是一个在Microsoft Windows环境下实现对Microsoft Excel和MATLAB 7.0进行链接的插件。通过对Excel和MATLAB 7.0的链接,用户可以在Excel的工作空间里,利用Excel的宏编程工具,使用MATLAB 7.0的数据处理和图像处理功能进行相关操作,同时由Excel link来保证两个工作环境中数据的交换和同步更新。使用Excel link时,不必脱离Excel环境,而是直接在Excel工作区或宏操作中调用MATLAB 7.0函数。Excel link提供了11条功能函数来实现数据的链接和操作,对这些函数将在后面的小节中陆续说明。
13.4.1 Excel link的安装
系统需要在Windows环境下先安装Excel,然后再安装MATLAB 7.0和Excel link。Excel link的安装可以按MATLAB 7.0安装向导的提示进行,即在MATLAB 7.0安装组件选择框中选中Excel link,并按提示继续安装。
安装完毕Excel link后,还需要在Excel link中做相应的设置,完成Excel与Excel link的链接。具体操作如下:
· 启动Microsoft Excel,单击工具菜单(Tools),执行“加载宏”命令,如图13-3所示。
图13-3 “加载宏”菜单
· 在打开的“加载宏”对话框中单击“浏览”按钮,选择用户自己的\matlab\toolbox\exlink路径下的excllink.xla文件,然后单击“确定”按钮,如图13-4所示。
图13-4 加载的宏文件
· 返回“加载宏”窗口,此时已经选中了“Excel link”选项,如图13-5所示。单击“确定”按钮后,Excel link插件即可加载MATLAB 7.0,并可以看到其运行窗口。
注意:这个MATLAB 7.0窗口是以传统方式打开的,也就是说没有启动Java界面。
图13-5 已经选中Excel link界面
13.4.2 设置Excel link的启动方式
当用户按照上一节的步骤安装了Excel link,并在Excel中进行了确认之后,在每一次启动Excel的时候,Excel link和MATLAB 7.0将自动运行。如果不希望Excel link和MATLAB 7.0自动运行,那么可以通过在Excel数据表单元中输入“=MLAutoStart("no")”函数,即可改变Excel的初始化文件中对自动启动Excel link和MATLAB 7.0的设置,如图13-6所示。此时当再次启动该文件时,Excel link和MATLAB 7.0就不会自动运行。
图13-6 A1单元中输入命令
用户也可以从Excel环境手动启动Excel link和MATLAB 7.0。首先,在工具菜单中选择“宏”菜单,如图13-7所示。
图13-7 选择宏
在打开的“宏”对话框中输入“MATLABinit”,如图13-8所示,单击“执行”按钮后即可启动Excel link,并同时启动MATLAB 7.0。
图13-8 输入“MATLAB 7.0init”指令启动Excel link以及MATLAB 7.0
13.4.3 终止Excel link的运行
当终止Excel的时候,Excel link和MATLAB 7.0会被同时终止。
如果需要在Excel环境中终止MATLAB 7.0和Excel link的运行,则在工作表单元中输入“=MLClose()”。例如在B1单元中输入“=MLClose()”,如图13-9所示,确认后,将终止MATLAB 7.0和Excel link的运行,此时B1的状态如图13-10所示。
当需要重新启动Excel link和MATLAB 7.0时,可以选择用前面提到的MLOpen或MATLABinit命令来启动。
图13-9 在B1单元中输入=mlclose()
图13-10 B1的状态
13.5 一个Excel link实例
本节的应用举例中涉及到的Excel文件,包含在MATLAB 7.0安装路径下的\toolbox\exlink子目录下,文件名为:ExliSamp.xls。
在数据处理的过程中,使用回归和曲线拟合的目的是寻找最充分的反映变量之间的相互关系的函数,从效果而言,它们试图建立基于某一数据集的数学模型,MATLAB 7.0提供了许多功能强大并且操作简便的矩阵操作和运算函数来支持此项业务。
本例中同时利用了回归分析和曲线拟合两种技术,并提供了工作表执行和宏命令执行两种方式。在Excel数据表中管理和显示数据,由Excel link函数把数据表中的数据拷贝到MATLAB 7.0中并执行MATLAB 7.0的计算和图形函数。宏命令执行模式实现了把运算结果返回给Excel数据表的功能。
13.5.1 数据表执行方式
启动Excel、Excel link和MATLAB 7.0,打开示例文件exlisamp.xls。
单击exlisamp.xls中的Sheet1标签,可以看到数据表中包含一个被命名为DATA的数组A4:C28,如图13-11所示。
具体的执行步骤如下:
· 选中单元E5,按F2键,回车执行Excel link函数MLPutMatrix("data", DATA),将DATA拷贝到MATLAB 7.0中。DATA包含了对3个变量的25次观测值,并且已知观测值之间具有强线性相关性;
· 对E8、E9和E10执行相同的操作,在Excel中一次执行下列语句:
这些语句实现对回归目标数据的设置,即用第一列和第二列数据对第三列进行回归。变量y用来存储第三列的数据,变量A的第一列为单位向量,后两列分别为原data的第一列和第二列。
图13-11 exliamp.xls中的sheet1数据页
· 执行E13的命令,代码设置如下:
利用MATLAB 7.0中的反除法计算A*beta=y的回归系数。
· 执行E16的命令,代码设置如下:
利用MATLAB 7.0的矩阵向量乘法计算回归结果。
· 执行E19、E20和E21的命令,代码设置如下:
这些语句实现原始数据和回归数据的比较,将数据按升序排列后进行拟合,生成对观察数据的比例因子。
· 执行E24和E25的命令对data进行多项式拟合,代码设置如下:
· 执行E28的命令,代码设置如下:
利用MATLAB 7.0绘图函数显示原始数据data、拟合数据fit和多项式拟合数据newfit,如图13-12所示。
图13-12 data、fit和newfit的比较
对图13-12中data、fit和newfit三条曲线进行比较,可以发现数据具有很强的相关性,不是线性独立的,拟合曲线和原始数据并不是十分吻合,而5阶多项式拟合则显示了更加精确的数学模型。
13.5.2 宏命令执行模式(Macro Version)
单击Sheet2标签,可以运行本例的宏命令执行模式。
激活单元A4,如图13-13所示,但先不要执行它。
图13-13 数据表2
单元A4调用宏CurveFit,可以在Visual Basic环境下打开CurveFit。操作步骤如下:
· 在Excel中执行工具菜单下“宏”选项中的“Visual Basic编辑器”选项,启动Visual Basic;
· 在Visual Basic的工程里打开模块文件夹,如图13-14所示;
图13-14 Visual Basic的工程栏
· 选中Moduel,则可以打开该模块,CurveFit的程序代码如下:
在此模块为打开的状态下,在工具菜单栏中单击“引用”命令,在弹出的“引用”对话框中查看是否选中了“Excellink”项,如图13-15所示,如果没有则需要加载。
图13-15 “引用”对话框
返回到Sheet2的单元A4,按F2回车,执行宏CurveFit。宏CurveFit包含了工作表执行模式的第1步到第7步的操作,并且将排序后的数据y、fit和newfit从MATLAB 7.0拷贝到数据表中,如图13-16所示。
图13-16 从MATLAB 7.0拷贝到数据表中的y、fit和newfit
13.6 Excel link使用的几个问题
为了更有效地利用Excel link,下面对一些细节问题做进一步地说明。使用者必须牢记Excel link函数执行的是一个特定操作,而Microsoft Excel的函数返回一个确定的数值,所以Excel的操作和函数在Excel link函数的控制下会有不同的表现。
13.6.1 关于语法
1.大小写的区分
Excel link函数名对字母的大小写不作区分,例如MLPutMatrix和mlptmatrix代表同一函数。而MATLAB 7.0函数名是区分大小写的,例如BONDS、Bonds和bonds就代表不同的变量。标准的MATLAB 7.0函数名通常使用小写字母,比如plot()。
2.等式的起始标记
Excel工作表等式通常以“+”或“=”作为起始标记,例如=mlputmatrix("a", C10)。
3.变量的定义方式
在大多数Excel link函数中有两种定义变量的方式,即直接定义和间接定义。将变量用双引号标记即可直接定义变量,例如MLDeleteMatrix("Bonds"),函数中的不加双引号的工作区单元地址或行列名称被视为间接变量,函数对其指引内容进行操作。工作区单元地址可以包含页表序号。
13.6.2 关于工作表
1.工作表的单元值
Excel link函数执行过程中其所在数据单元将一直显示其函数内容,函数执行完毕后,数据单元将被赋值为0。
2.数据输入模式的是指
建议读者检查Excel工具菜单里“选项”的“编辑”选项卡中“按Enter键后移动”选项,如图13-17所示,以保证输入完毕经确认后再改变当前工作单元。
图13-17 选择“按Enter键后移动”模式