1、2010.41matlab excel 混合编程 MATLAB 与Excel 数据连接及绘图3.1 MATLAB 与 Excel 数据连接EXCEL 和 MATLAB 在数据显示和数值计算上各有优势,EXCEL 是商业运用最广泛的工具,非常直观,但是数值编程比较差,而 MATLAB 可以弥补这一点,有时在程序开发上需要将两者结合起来,实现两者之间的优势互补,为此 MATLAB 提供了 EXCEL Link连接工具,实现 MATLAB 与 EXCEL 之间的混合编程。EXCEL Link是一个在Microsoft Windows 环境下实现对 Microsoft EXCEL和MATLAB 进行链
2、接的插件。通过对EXCEL和MATLAB 的连接,用户可以在EXCEL的工作空间里,利用EXCEL的宏编程工具,使用MATLAB 的数据处理和图形处理功能进行相关操作,同时由EXCEL Link来保证两个工作环境中数据的交换和同步更新。使用EXCEL Link 时,不必脱离EXCEL环境,而是直接在EXCEL工作区或宏操作中调用MATLAB函数。EXCEL Link允许在MATLAB和EXCEL之间进行数据交换,在两个功能强大的数学处理、分析与表示平台之间建立无缝连接。 EXCEL作为一个可视化的数据处理环境是进行数组编辑的最佳选择,而MATLAB 则作为数据分析和可视化的引擎。任何输入到EX
3、CEL环境中的数据都可以直接进入MTATLAB 进行处理,而这一过程完全是“现场” 处理的,没有任何中间文件,也不需要进行编程工作。2010.423.1.1 MATLAB 和 Excel 的接口安装:. Excel Link 的安装和和设置首先,在系统中安装 Excel 软件。然后安装 Matlab 和 Excel Link,用 Matlab 安装盘开始安装,选择自定义安装中,在选中组件 ExcelLink,如下图所示:安装完 Excel Link 后还需要在 Excel 中进行一些设置后才能使用。启动 Excel,选择菜单“工具”项下的“加载宏”项,弹出如下对话框:2010.43选中 Exc
4、el Link 项。如果该项不存在,则通过浏览目录,在目录MATLABtoolboxexlink 下找到 excllink.xla 文件,如下图示,并确定。选中 ExcelLink 项并确定后,在 Excel 中多了一个 Excel Link 工具条,如下图示:2010.44经过以上的设置后就可以开始使用 Excel Link 了。其中 4 个按钮的意义分别如下:startmatlab %启动 MATLABputmatrix %将变量输入到 MATLABgetmatrix %把 MATLAB 的变量输入到 EXCELevalstring %执行 MATLAB 命令注:Excel 中的起始时间与
5、 MATLAB 的起始时间相差 693960 天,用户需要将该数据加在MATLAB 上,转换为 MATLAB 的数据。3.1.2 . ExcelLink 管理函数1、ExcelLink 连接管理函数按如上设置好后,下次启动 excel 时会默认启动 matlab,要不想在每次启动时都启动matlab,则可以在电子表格中或函数输入框中输入以下命令=MLAutoStart(“no”)这时要启动 matlab 需手动启动,有三种方法,一种是在 excel 电子表格中调用 MLOpen 函数,即输入命令=MLOpen()第二种方法是利用 excel 的宏工具,在宏对话框中输入 Matlabinit,然
6、后单击执行按钮,同样可以启动 MATLAB。第三种方法是按左上按钮“startmatlab“。2010.45下面介绍一下常用的连接、启动和关闭 matlab 的常用函数:(1) Matlabinit该函数只能在宏子例程中使用。初始化 ExcelLink 和启动 Matlab 进程。只有在MLAutoStart 函数中使用“no” 参数,才需要手动使用 Matlabinit 来初始化 ExcelLink 和启动Matlab 进程,如果使用参数“yes”,则 Matlabinit 是自动执行的。使用语法:Matlabinit(2) MLAutoStart设置自动启动 Matlab 和 ExcelL
7、ink。在工作表中的使用语法:MLAutoStart(“yes“)MLAutoStart(“no“)在宏中的使用语法:MLAutoStart “yes“MLAutoStart “no“使用“yes”参数,则当 Excel 启动时,自动启动 Matlab 和 ExcelLink;如果使用参数“no” ,则当 Excel 启动时,不启动 Matlab 和 ExcelLink。如果在此之前它们已经启动,则无任何影响。 (3) MLClose终止 Matlab 进程并删除 Matlab 工作空间的所有变量。并通知 Excel,Matlab 不再运行。在工作表中的使用语法:MLClose ()在宏中的使
8、用语法:MLClose(4) MLOpen启动 Matlab 进程。如果 Matlab 进程已经启动,则 MLOpen 函数不进行任何操作。在使用MLClose 关闭 Matlab 进程后使用 MLOpen 来重新启动 Matlab。在工作表中的使用语法:MLOpen()在宏中的使用语法:MLOpen 2010.46注释:EXCEL 的默认日期数开始与 1900 年 1 月 1 日,而 MATLAB 的日期数开始于 0000年 1 月 1 日。 如果用户使用 MATLAB 中的日期数计算, 常数 693960 起关键作用: EXCEL日期数加上它进入 MATLAB,或从 MATLAB 日期数中
9、减去它 进入 EXCEL 2. ExcelLink 数据管理函数(1) Matlabfcn根据给定的 Excel 数据执行 Matlab 命令。在工作表中使用时的语法: matlabfcn(command, inputs)参数 command,Matlab 将执行的命令,命令需要写成“command”(使用双引号引起来)的形式。参数 inputs 传给 Matlab 命令的变长输入参数列表。列表是包含数据的工作表单元格范围。函数返回单一数值或者是字符串,结果返回到调用函数的单元格中。例如 matlabfcn(”sum” ,B1:B10);把从 B1 到 B10 的单元格中数据相加,如下图示:并
10、将结果返回到当前的活动单元格。即 A11,结果如下图。2010.47例:在 Matlab 中生成 12 维均匀随机向量 aa,利用 matlabfcn 在 Excel 中求其分量之和。(2) Matlabsub根据给定的 Excel 数据执行 Matlab 命令,并将结果返回到指定的单元格中。在工作表中的使用语法:matlabsub(command,edat,inputs)command 和 inputs 参数的与 matlabfcn 相同。参数 edat,指定返回值写入在工作表中的位置。如果 edat 用双引号引起来,则 edat 必须是单元格地址或范围的名字。如果参数不用引号引起 edat
11、 的形式,则通过计算获得矩阵名。例如:=matlabsub(”sum”, ”A1”,B1:B10);把工作表中从单元格 B1 到 B10 的数据相加,并将结果返回到单元格 A1 中。注意:edat 指定的位置不能包含 matlabsub 所在的位置。(3)MLAppendMatrix将 Excel 工作表中的数据追加到 Matlab 中指定的矩阵中如果该矩阵不存在,则创建矩阵。在工作表中使用的语法:MLAppendMatrix(var_name,mdat)在宏中使用的语法:MLAppendMatrix var_name,mdat注意要追加的数据维数要和原矩阵中的维数相匹配,否则出错。例如:ML
12、AppendMatrix(”a”,A1:A2 );假设矩阵 a 是个 2 行 3 列的矩阵,如下图:2010.48将 A1:A2 中的数据追加到矩阵后,如下图示成为矩阵的第四列,如下图示。单元格 B1 中是字符 a,函数 MLAppendMatrix(B1,A1:A2)的作用于MLAppendMatrix(”a”,A1:A2 )相同。(4) MLDeleteMatrix删除 Matlab 空间中指定的矩阵在工作表中使用的语法:MLDeleteMatrix(var_name) ;在宏中使用的语法:MLDeleteMatrix var_nameVar_name,是要删除的矩阵名,如果矩阵名在引号内
13、“var_name”的形式,则直接指定变量名,如果 var_name 不用引号引起来,则通过计算获得实际矩阵的名字。例如,单元格 B1 中的内容为 a,MLDeleteMatrix (B1 ) ,则表示删除 Matlab 工作空间的矩2010.49阵 a,它等价于 MLDeleteMatrix(”a”)(5) MLEvalString将命令(写成字符串的形式)传到 Matlab 中执行。在工作表中使用的语法:MLEvalString(command) ;在宏中使用的语法:MLEvalString command参数 command 如果是用引号引起来”command”的形式,则是直接指定命令;
14、如果不用引号引起来 command 的形式,则 command 必须是包含了命令字符串的工作表的单元格地址或者是范围。例如:MLEvalString(”b=magic(4)” ) ;表示在 Matlab 中执行命令 b=magic(4);(6) MLGetMatrix将指定的 Matlab 矩阵写入到 Excel 工作表中的指定位置。在工作表中使用的语法:MLGetMatrix(var_name ,edat)在宏中使用的语法:MLGetMatrix var_name ,edat参数 Var_name,是要写入工作表的矩阵名,如果矩阵名在引号内“var_name”的形式,则直接指定变量名,如果
15、var_name 不用引号引起来,则通过计算获得实际矩阵的名字。参数 edat 指定了矩阵写入工组表的位置。如果参数是用引号引起”edat”的形式,则是直接指定矩阵名,如果参数不用引号引起 edat 的形式,则通过计算获得矩阵名。例如:MLGetMatrix(”a”, ”sheet1!B1”) ;将矩阵 a 写入工作表 sheet1 以单元格 B1 起始的位置,如果 a 是一个 2 行 3 列的矩阵,则矩阵占据 sheet1 的 B1 到 D2 的空间。如果在 A1 中有字符串 a,则 MLGetMatrix(A1, ” 2010.410sheet1!C1”)的作用与 MLGetMatrix(
16、”a” , ”sheet1!C1”)相同。函数运行结果如图示。(7) MLGetVar将 MatLab 矩阵传送给 Excel VBA 变量,只能在宏子例程中使用。使用语法:MLGetVar ML_var_name,VBA_var_name参数 ML_var_name 是将获取的矩阵名。如果矩阵名在引号内“ML_var_name”的形式,则直接指定变量名,如果 ML_var_name 不用引号引起来,则通过计算获得实际矩阵的名字。参数 VBA_var_name,将其 Matlab 矩阵数据传给的 VBA 变量名,不用引号将其引起来。例如:Sub Fetch()MLGetVar “J“, Dat
17、aJEnd Sub表示将 Matlab 矩阵 J 的数据写入到 VBA 变量 DataJ 中。(8) MLPutMatrix用指定位置的 Excel 工作表中的数据,创建或者覆盖 Matlab 矩阵。在工作表中使用的语法:MLPutMatrix(var_name,mdat)在宏中使用的语法:MLPutString var_name,mdat参数 var_name 是将有被创建或者被覆盖的矩阵名。如果指定的矩阵不存在,则创建该矩阵,如果矩阵已经存在,则覆盖该矩阵。参数 mdat,指定工作表中的位置。2010.411例如:工作表中有 A1 到 C2 的数据,使用函数 MLPutMatrix(”c”
18、,A1:C2) ,则可以将这些数据写到 Matlab 矩阵 c 中,如下图示。注意:如果修改工作表中的数据,则 Matlab 中的矩阵相应发生变化。如果把数据剪切到别的地方,如 D1 到 F2,则函数 MLPutMatrix(”c”,A1:C2)会自动更改为 MLPutMatrix(”c”,D1:F2)(9) MLPutVar使用 VBA 变量的数据创建或者覆盖 Matlab 矩阵。只能在宏子例程中使用。使用语法:MLPutVar ML_var_name,VBA_var_name参数 ML_var_name 是将被创建或覆盖的矩阵名。如果矩阵名在引号内“ML_var_name”的形式,则直接指
19、定变量名,如果 ML_var_name 不用引号引起来,则通过计算获得实际矩阵的名字。参数 VBA_var_name,将其数据传给 Matlab 矩阵的 VBA 变量名,不用引号将其引起来。如果 VBA_var_name 变量包含字符串的数据,则输出到 Matlab 为元胞数组格式。例如:Sub Put()MLPutVar “K“, DataKEnd Sub用 VBA 变量 DataK 中的数据创建或着覆盖 Matlab 矩阵 K。3. 补充使用 Excel Link 的注意事项(1) Excel 工作表通常以“”作为起始标记,例如matlabfcn(”sum”,B1:B10);2010.41
20、2(2) 大多数的 Excel Link 函数中有两种定义变量的方式:直接定义,即将变量用双引号标记则是直接定义变量,例如 MLGetMatrix(”bonds”,”sheet1!C1”),其中 bonds 是直接定义的变量;间接定义,函数中的不用双引号的工作表单元地址或行列名称被看作是间接变量,函数对其指引的内容进行操作。工作表单元地址可以包含页表序号,例如MLDeleteMatrix(B1);单元格 B1 中的内容为 a,则相当于执行 MLDeleteMatrix(”a”);(3) 建议使用 Excel Link 的自动计算模式。如果在手动计算模式下使用 MLGetMatrix 函数,当在
21、单元格中输入完函数等式时,需要按 F9 键执行,而按下 F9 键将有可能引起其他工作表函数的重复执行,产生不可预料的后果。设置 Excel Link 自动计算模式方法如下:在 Excel“工具”菜单的“选项”,选择重新计算标签,见下图。(4) 如果需要在工作表中重新计算 Excel Link 函数,最好按 F2 键和回车键单步执行每个函数。(5) 如果在 MLGetMatrix 函数中使用了单元的直接地址,那么当删除了行或列或者将函数从其他单元复制到新的单元后,一定要重新修改地址。Excel Link 不能自动改变MLGetMatrix 中的地址。(6) 在打开一个包含 ExcelLink 函
22、数的 Excel 数据表的时候,Excel 会自动从上到下,从左到右地执行这些函数,所有有可能出现如“#COMMAND!”或“#NONEXIST”等 Excel 错误提示,只需关闭所有 Matlab 图形窗口,然后按 F2 键并回车重新单步执行单元格里地函数就可以了。2010.4134. xlswrite 与 xlsreadMATLAB 提供的函数 xlswrite,具有将 MATLAB 中的数据写入 EXCEL 的功能。调用方式:xlswrite(filename, M)xlswrite(filename, M, sheet)xlswrite(filename, M, range)xlswr
23、ite(filename, M, sheet, range)输入参数:filename % EXCEL 文件名M % MATLAB 工作空间中的大小为 mn 的数组,该数组可以是字符型的,数值型的也可以是单元数组,其中 m xlswrite(v, 1 5 -8 3.9 0)打开 v.xls,用户就可以看到数据已经写入到文件 v.xls 中了。例 3.1.1 把元胞数组 d = Time, Temp; 12 98; 13 99; 14 97写入到 EXCEL 文件 m.xls 的一个规定的工作簿当中。在 MATLAB 中执行如下命令:d = Time, Temp; 12 98; 13 99; 1
24、4 97s = xlswrite(m.xls, d, Temperatures, E1)Warning: Added specified worksheet.s =1s=1 表明操作成功。s = xlswrite(m.xls, d, Sheet1, E1)s =1打开 m.xls 文件,就可以看到数据已经写入了文件 m.xls 中。MATLAB 提供的函数 xlsread,具有将 EXCEL 中的数据读入 MATLAB 的功能。num = xlsread(filename)%如果 filename 中有非双精度数据则会忽略该数据,导致数据减少,如果某一列中既包含文字型数据又包含数值型数据,则文
25、字型数据记为 NaNnum = xlsread(filename, -1)%同时打开相应的 EXCEL 文件,手动选择要读入的数据区域num = xlsread(filename, sheet)num = xlsread(filename, range)num = xlsread(filename, sheet, range)num, txt = xlsread(filename, sheet, range)2010.415输入参数:filename % EXCEL 文件名sheet % EXCEL 中的工作簿名range % EXCEL 工作簿中的数据区域输出参数:num %读入 Excel
26、 文件数据txt %保存文本内容例 3.1.2 将 m.xls 复制到 matlab 当前工作目录下,并在 matlab 命令窗口输入以下命令 num=xlsread(m.xls)num =1 2 NaN NaN NaN NaN2 4 NaN NaN 12 983 6 NaN NaN 13 994 8 NaN NaN 14 975 10 NaN NaN NaN NaN6 12 NaN NaN NaN NaN7 14 NaN NaN NaN NaN8 16 NaN NaN NaN NaN9 18 NaN NaN NaN NaN10 20 NaN NaN NaN NaN11 22 NaN NaN
27、NaN NaN12 24 NaN NaN NaN NaN2010.41613 26 NaN NaN NaN NaN14 28 NaN NaN NaN NaN15 30 NaN NaN NaN NaN16 32 NaN NaN NaN NaN17 34 NaN NaN NaN NaN18 36 NaN NaN NaN NaN19 38 NaN NaN NaN NaN20 40 NaN NaN NaN NaN21 42 NaN NaN NaN NaN22 44 NaN NaN NaN NaN23 46 NaN NaN NaN NaN num=xlsread(m.xls,-1) num,txt=xl
28、sread(m.xls)num =1 2 NaN NaN NaN NaN2 4 NaN NaN 12 983 6 NaN NaN 13 994 8 NaN NaN 14 975 10 NaN NaN NaN NaN6 12 NaN NaN NaN NaN7 14 NaN NaN NaN NaN8 16 NaN NaN NaN NaN2010.4179 18 NaN NaN NaN NaN10 20 NaN NaN NaN NaN11 22 NaN NaN NaN NaN12 24 NaN NaN NaN NaN13 26 NaN NaN NaN NaN14 28 NaN NaN NaN NaN
29、15 30 NaN NaN NaN NaN16 32 NaN NaN NaN NaN17 34 NaN NaN NaN NaN18 36 NaN NaN NaN NaN19 38 NaN NaN NaN NaN20 40 NaN NaN NaN NaN21 42 NaN NaN NaN NaN22 44 NaN NaN NaN NaN23 46 NaN NaN NaN NaNtxt = Time Temp a x c b num,txt=xlsread(m.xls,Sheet1,E1:F4)2010.418num =12 9813 9914 97txt = Time Temp5. 在工作表和在
30、宏中使用 ExcelLink 的例子例 3.1.3 :(在工作表中使用 ExcelLink)如下图所示:使用 mlopen()函数启动 Matlab,使用 mlevalstring(“load census“)载入 matlab 自带的数据文件 census,其中包含矩阵 cdate 和pop。使用 mlgetmatrix(“cdate“,“E1“),将 Matlab 空间的矩阵 cdata 写入到工作表中以 E1 开始的位置;2010.419mlgetmatrix(“pop“,“F1“) ;将 Matlab 空间的矩阵 pop 写入到工作表中以 F1 开始的位置;运行结果如下图所示: mlp
31、utmatrix(“x“,E1:E21)mlputmatrix(“y“,F1:F21)将 E1 到 E21 中的数据以及 F1 到 F21 中的数据分别写入到 Matlab 空间的矩阵变量 x 和 y中。mlevalstring(“z=x-mean(x)./std(x)“)mlevalstring(“p2,s2=polyfit(z,y,2)“)mlevalstring(“pop2,de12=polyval(p2 ,z ,s2)“)根据所给的数据拟合多项式并进行偏差计算。mlevalstring(“plot(x,y,+, x,pop2,g-,x,pop2+2*del2,r:,x,pop2-2*d
32、el2,r:)“)2010.420绘出离散点、拟合曲线图及偏差曲线图,结果如下图示:mlclose();关闭 Matlab。例 3.1.4:在宏中使用 Excel Link新建一个 Excel 工作表,打开 Visual Basic 编辑器,操作如下图示:2010.421然后在工程管理器中插入模块,如下图:在模块代码区域写下如下代码,如下图:2010.422Function excellinktest()MLOpenmlevalstring “load census“mlgetmatrix “cdate“, “E1“mlgetmatrix “pop“, “F1“mlputmatrix “x“,
33、 Range(“E1:E21“)mlputmatrix “y“, Range(“F1:F21“)Matlabrequestmlevalstring “z=(x-mean(x)./std(x)“mlevalstring “p2,s2=polyfit(z,y,2)“mlevalstring “pop2,del2=polyval(p2 ,z,s2)“mlevalstring “plot(x,y,+ ,x,pop2,g-,x,pop2+2*del2,r:,x,pop2-2*del2,r:)“End Function选中模块 1,在“工具” 菜单,“ 引用”选项,如下图示。2010.423弹出引用对话框
34、,选择 Excel Link,如下图:确定后,即可运行该程序,结果与例 3.3 相同。3.2 MATLAB 绘图人们很难从一大堆原始的数据中发现它们的含义,而数据图形恰能使视觉感官直接感受到数据的许多内在本质,发现数据的内在联系。MATLAB 可以表达出数据的二维,三维,甚至四维的图形。通过图形的线型,立面,色彩,光线,视角等属性的控制,可把数据的内在特征表现得淋漓尽致。本节主要介绍 MATLAB 中常用的绘图函数,及如何将计算结果用图形的方式显示出来。2010.4243.2.1 二维数据曲线图在 MATLAB 自动生成的图形窗口上,图形窗口和命令窗口是相互独立的。图形窗口的属性是由系统和 M
35、ATLAB 共同控制。当 MATLAB 中没有图形窗口时,将新建一个图形窗口作为输出窗口,当 MATLAB 中已经存在一个或多个图形窗口时,MATLAB 一般指定最后一个图形窗口作为当前图形命令的输出窗口。不同的图形结果分别在不同的图形窗口中输出。在 MATLAB 的二维曲线的绘图指令中,最重要最基本的指令是 plot,其他的绘图指令都是以它为基础的。一般情况下,连续执行两条 plot 命令,则后面一条命令的输出结果会把前面的一条语句的输出图形给覆盖掉。但是,MATLAB 提供了一条命令能够使得情况有所不同,即 hold 命令。当 hold 开关为 on 时,后续图形叠加在原来的图形上面。1、
36、绘制单根二维曲线在 MATLAB 中调用 plot 函数可以绘制直角坐标系下的二维曲线。plot 函数的基本调用格式:plot(x,y)其中 x 和 y 为长度相同的向量,分别用来存储 x 坐标和 y 坐标数据。例 3.2.1 在 0x2 区间内,绘制曲线y=2e-0.5xcos(4x)x=0:pi/100:2*pi;y=2*exp(-0.5*x).*cos(4*pi*x);plot(x,y)例 3.2.2 假如你的帐户中有一笔 10 年的$1000 存款,年利率为 r,那么 10 年后你的钱数与利率的关系是 ,画出该函数的图像。在 MATLAB 中执行下列命令: r=0:0.01:0.1;2
37、010.425 y=1000*(1+r).10; plot(r,y)程序执行后,在图形窗口中产生注:plot 函数最简单的调用格式是只包含一个输入参数:plot(x)在这种情况下,当 x 是实向量时,以该向量元素的下标为横坐标,元素值为纵坐标画出一条连续曲线,这实际上是绘制折线图。2、绘制多根二维曲线(1)plot 函数的输入参数是矩阵形式(i) 当 x 是向量,y 是有一维与 x 同维的矩阵时,则绘制出多根不同颜色的曲线。曲线条数等于 y 矩阵的另一维数,x 被作为这些曲线共同的横坐标。(ii) 当 x,y 是同维矩阵时,则以 x,y 对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列
38、数。(iii) 对只包含一个输入参数的 plot 函数,当输入参数是实矩阵时,则按列绘制每列元素值相对其下标的曲线,曲线条数等于输入参数矩阵的列数。当输入参数是复数矩阵时,则按列分别以元素实部和虚部为横、纵坐标绘制多条曲线。例 3.2.3 画出 Sload spdata sp08;sd=datenum(02-Jan-2008)-sp08(1,1);mydate=sp08(:,1)+sd;dsp08=sp08(:,2:5);plot(dsp08);pause;plot(mydate,dsp08);pause;plot(mydate,sp08(:,5);(2)含多个输入参数的 plot 函数调用格
39、式为:plot(x1,y1,x2,y2,xn,yn)(i) 当输入参数都为向量时,x1 和 y1,x2 和 y2,xn 和 yn 分别组成一组向量对,每一组向量对的长度可以不同。每一向量对可以绘制出一条曲线,这样可以在同一坐标内绘制出多条曲线。(ii) 当输入参数有矩阵形式时,配对的 x,y 按对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。例 3.2.4 分析下列程序绘制的曲线。x1=linspace(0,2*pi,100);x2=linspace(0,3*pi,100);x3=linspace(0,4*pi,100);y1=sin(x1);2010.427y2=1+sin(x2
40、);y3=2+sin(x3);x=x1;x2;x3;y=y1;y2;y3;plot(x,y,x1,y1-1)3具有两个纵坐标标度的图形在 MATLAB 中,如果需要绘制出具有不同纵坐标标度的两个图形,可以使用 plotyy 绘图函数。调用格式为:plotyy(x1,y1,x2,y2)其中 x1,y1 对应一条曲线,x2,y2 对应另一条曲线。横坐标的标度相同,纵坐标有两个,左纵坐标用于 x1,y1 数据对,右纵坐标用于 x2,y2 数据对。例 3.2.5 用不同标度在同一坐标内绘制曲线 y1=0.2e-0.5xcos(4x) 和 y2=2e-0.5xcos(x)。程序如下:x=0:pi/100
41、:2*pi;y1=0.2*exp(-0.5*x).*cos(4*pi*x);y2=2*exp(-0.5*x).*cos(pi*x);plotyy(x,y1,x,y2);例 3.2.6 在同一幅图中画出 Scre=price2ret(sp08(:,5);rdate=mydate(2:end);plotyy(mydate,sp08(:,5),rdate,cre)2010.4284图形保持hold on/off 命令控制是保持原有图形还是刷新原有图形,不带参数的 hold 命令在两种状态之间进行切换。例 3.2.7 采用图形保持,在同一坐标内绘制曲线 y1=0.2e-0.5xcos(4x) 和 y2
42、=2e-0.5xcos(x)。程序如下:x=0:pi/100:2*pi;y1=0.2*exp(-0.5*x).*cos(4*pi*x);plot(x,y1)hold ony2=2*exp(-0.5*x).*cos(pi*x);plot(x,y2);hold off5、设置曲线样式MATLAB 提供了一些绘图选项,用于确定所绘曲线的线型、颜色和数据点标记符号,它们可以组合使用。例如,“b-.”表示蓝色点划线,“y:d” 表示黄色虚线并用菱形符标记数据点。当选项省略时,MATLAB 规定,线型一律用实线,颜色将根据曲线的先后顺序依次。要设置曲线样式可以在 plot 函数中加绘图选项,其调用格式为:
43、plot(x1,y1,选项 1,x2,y2,选项 2,xn,yn,选项 n)Maltab 允许用户对线条定义如下的特性:(1)线型定义符 - - : -.线型 实线(缺省值) 划线 点线 点划线2010.429(2)线条宽度指定线条的宽度,取值为整数(单位为像素点)(3)颜色定义符 R(red) G(green) b(blue) c(cyan)颜色 红色 绿色 兰色 青色定义符 M(magenta) y(yellow) k(black) w(white)颜色 品红 黄色 黑色 白色(4)标记类型定义符 + o(字母) * . x标记类型 加号 小圆圈 星号 实点 交叉号定义符 d v t = 0:pi/20:2*pi;plot(t,t.*cos(t),-.r*)hold onplot(exp(t/100).*sin(t-pi/2),-mo)plot(sin(t-pi),:bs)hold off图形结果为图 3.2.1例 3.2.9plot(t,sin(2*t),-mo, LineWidth,2,MarkerEdgeColor,k,MarkerFaceColor,.49 1 .63,MarkerSize,12)图形结果为图 3.2.2。