matlab 利用excellink达到在excel中直接画图_第1页
matlab 利用excellink达到在excel中直接画图_第2页
matlab 利用excellink达到在excel中直接画图_第3页
matlab 利用excellink达到在excel中直接画图_第4页
matlab 利用excellink达到在excel中直接画图_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2010.4matlab excel混合编程 MATLAB与Excel数据连接及绘图3.1 MATLAB与Excel数据连接EXCEL和MATLAB在数据显示和数值计算上各有优势,EXCEL是商业运用最广泛的工具,非常直观,但是数值编程比较差,而MATLAB可以弥补这一点,有时在程序开发上需要将两者结合起来,实现两者之间的优势互补,为此MATLAB提供了EXCEL Link连接工具,实现MATLAB与EXCEL之间的混合编程。 EXCEL Link是一个在Microsoft Windows环境下实现对Microsoft EXCEL和MATLAB 进行链接的插件。通过对EXCEL和MATLAB

2、的连接,用户可以在EXCEL的工作空间里,利用EXCEL的宏编程工具,使用MATLAB的数据处理和图形处理功能进行相关操作,同时由EXCEL Link来保证两个工作环境中数据的交换和同步更新。使用EXCEL Link 时,不必脱离EXCEL环境,而是直接在EXCEL工作区或宏操作中调用MATLAB函数。 EXCEL Link允许在MATLAB和EXCEL之间进行数据交换,在两个功能强大的数学处理、分析与表示平台之间建立无缝连接。 EXCEL作为一个可视化的数据处理环境是进行数组编辑的最佳选择,而MATLAB则作为数据分析和可视化的引擎。任何输入到EXCEL环境中的数据都可以直接进入MTATLA

3、B进行处理,而这一过程完全是“现场”处理的,没有任何中间文件,也不需要进行编程工作。3.1.1 MATLAB和Excel的接口安装:. Excel Link的安装和和设置首先,在系统中安装Excel软件。然后安装Matlab和Excel Link,用Matlab安装盘开始安装,选择自定义安装中,在选中组件ExcelLink,如下图所示:安装完Excel Link后还需要在Excel中进行一些设置后才能使用。启动Excel,选择菜单“工具”项下的“加载宏”项,弹出如下对话框:选中Excel Link项。如果该项不存在,则通过浏览目录,在目录MATLABtoolboxexlink下找到exclli

4、nk.xla文件,如下图示,并确定。选中ExcelLink项并确定后,在Excel中多了一个Excel Link工具条,如下图示:经过以上的设置后就可以开始使用Excel Link了。其中4个按钮的意义分别如下:startmatlab %启动MATLABputmatrix %将变量输入到MATLABgetmatrix %把MATLAB的变量输入到EXCELevalstring %执行MATLAB命令注:Excel中的起始时间与MATLAB的起始时间相差693960天,用户需要将该数据加在MATLAB上,转换为MATLAB的数据。3.1.2 . ExcelLink管理函数1、ExcelLink连

5、接管理函数按如上设置好后,下次启动excel时会默认启动matlab,要不想在每次启动时都启动matlab,则可以在电子表格中或函数输入框中输入以下命令=MLAutoStart(“no”)这时要启动matlab需手动启动,有三种方法,一种是在excel电子表格中调用MLOpen函数,即输入命令=MLOpen()第二种方法是利用excel的宏工具,在宏对话框中输入Matlabinit,然后单击执行按钮,同样可以启动MATLAB。第三种方法是按左上按钮"startmatlab"。 下面介绍一下常用的连接、启动和关闭matlab的常用函数:(1) Matlabinit该函数只能在

6、宏子例程中使用。初始化ExcelLink和启动Matlab进程。只有在MLAutoStart函数中使用“no”参数,才需要手动使用Matlabinit来初始化ExcelLink和启动Matlab进程,如果使用参数“yes”,则Matlabinit是自动执行的。使用语法:Matlabinit(2) MLAutoStart设置自动启动Matlab和ExcelLink。在工作表中的使用语法:MLAutoStart("yes")MLAutoStart("no")在宏中的使用语法:MLAutoStart "yes"MLAutoStart &qu

7、ot;no"使用“yes”参数,则当Excel启动时,自动启动Matlab和ExcelLink;如果使用参数“no”,则当Excel启动时,不启动Matlab和ExcelLink。如果在此之前它们已经启动,则无任何影响。 (3) MLClose终止Matlab进程并删除Matlab工作空间的所有变量。并通知Excel,Matlab不再运行。在工作表中的使用语法:MLClose()在宏中的使用语法:MLClose(4) MLOpen启动Matlab进程。如果Matlab进程已经启动,则MLOpen函数不进行任何操作。在使用MLClose关闭Matlab进程后使用MLOpen来

8、重新启动Matlab。在工作表中的使用语法:MLOpen()在宏中的使用语法:MLOpen 注释:EXCEL的默认日期数开始与1900年1月1日,而MATLAB 的日期数开始于0000年1月1日。 如果用户使用MATLAB中的日期数计算, 常数693960起关键作用: EXCEL日期数加上它进入MATLAB,或从MATLAB 日期数中减去它进入EXCEL 2. ExcelLink数据管理函数(1) Matlabfcn根据给定的Excel数据执行Matlab命令。在工作表中使用时的语法:  matlabfcn(command, inputs)参数command,Matlab将

9、执行的命令,命令需要写成“command”(使用双引号引起来)的形式。参数 inputs 传给Matlab命令的变长输入参数列表。列表是包含数据的工作表单元格范围。函数返回单一数值或者是字符串,结果返回到调用函数的单元格中。例如matlabfcn(”sum”,B1:B10);把从B1到B10的单元格中数据相加,如下图示: 并将结果返回到当前的活动单元格。即A11,结果如下图。例:在Matlab中生成12维均匀随机向量aa,利用matlabfcn在Excel中求其分量之和。(2) Matlabsub根据给定的Excel数据执行Matlab命令,并将结果返回到指定的单元格中。在工作表中的

10、使用语法:matlabsub(command,edat,inputs)command和inputs参数的与matlabfcn相同。参数edat,指定返回值写入在工作表中的位置。如果edat用双引号引起来,则edat必须是单元格地址或范围的名字。如果参数不用引号引起edat的形式,则通过计算获得矩阵名。例如:=matlabsub(”sum”,”A1”,B1:B10);把工作表中从单元格B1到B10的数据相加,并将结果返回到单元格A1中。注意:edat指定的位置不能包含matlabsub所在的位置。(3)MLAppendMatrix将Excel工作表中的数据追加到Matlab中指定的矩阵中如果该矩

11、阵不存在,则创建矩阵。在工作表中使用的语法:MLAppendMatrix(var_name,mdat)在宏中使用的语法:MLAppendMatrix var_name,mdat注意要追加的数据维数要和原矩阵中的维数相匹配,否则出错。例如:MLAppendMatrix(”a”,A1:A2);假设矩阵a是个2行3列的矩阵,如下图: 将A1:A2中的数据追加到矩阵后,如下图示 成为矩阵的第四列,如下图示。单元格B1中是字符a,函数MLAppendMatrix(B1,A1:A2)的作用于MLAppendMatrix(”a”,A1:A2)相同。 (4) MLDeleteMa

12、trix删除Matlab空间中指定的矩阵在工作表中使用的语法:MLDeleteMatrix(var_name);在宏中使用的语法:MLDeleteMatrix var_nameVar_name,是要删除的矩阵名,如果矩阵名在引号内“var_name”的形式,则直接指定变量名,如果var_name不用引号引起来,则通过计算获得实际矩阵的名字。例如,单元格B1中的内容为a,MLDeleteMatrix(B1),则表示删除Matlab工作空间的矩阵a,它等价于MLDeleteMatrix(”a”)(5) MLEvalString将命令(写成字符串的形式)传到Matlab中执行。在工作表中使用的语法:

13、MLEvalString(command);在宏中使用的语法:MLEvalString command参数command如果是用引号引起来”command”的形式,则是直接指定命令;如果不用引号引起来command的形式,则command必须是包含了命令字符串的工作表的单元格地址或者是范围。例如:MLEvalString(”b=magic(4)”);表示在Matlab中执行命令b=magic(4);(6) MLGetMatrix将指定的Matlab矩阵写入到Excel工作表中的指定位置。在工作表中使用的语法:MLGetMatrix(var_name,edat)在宏中使用的语法:MLGetMat

14、rix var_name,edat参数Var_name,是要写入工作表的矩阵名,如果矩阵名在引号内“var_name”的形式,则直接指定变量名,如果var_name不用引号引起来,则通过计算获得实际矩阵的名字。参数edat指定了矩阵写入工组表的位置。如果参数是用引号引起”edat”的形式,则是直接指定矩阵名,如果参数不用引号引起edat的形式,则通过计算获得矩阵名。例如:MLGetMatrix(”a”,”sheet1!B1”);将矩阵a写入工作表sheet1以单元格B1起始的位置,如果a是一个2行3列的矩阵,则矩阵占据sheet1的B1到D2的空间。如果在A1中有字符串a,则MLGetMatr

15、ix(A1,” sheet1!C1”)的作用与MLGetMatrix(”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变量名,不用引号将其引起来。例如:Su

16、b Fetch()MLGetVar "J", DataJEnd Sub表示将Matlab矩阵J的数据写入到VBA变量DataJ中。(8) MLPutMatrix用指定位置的Excel工作表中的数据,创建或者覆盖Matlab矩阵。在工作表中使用的语法:MLPutMatrix(var_name,mdat)在宏中使用的语法:MLPutString var_name,mdat参数var_name是将有被创建或者被覆盖的矩阵名。如果指定的矩阵不存在,则创建该矩阵,如果矩阵已经存在,则覆盖该矩阵。参数mdat,指定工作表中的位置。例如:工作表中有A1到C2的数据,使用函数MLPutMa

17、trix(”c”,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”的形式,则直接指定变量

18、名,如果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);(2) 大多数的Exc

19、el Link函数中有两种定义变量的方式:直接定义,即将变量用双引号标记则是直接定义变量,例如MLGetMatrix(”bonds”,”sheet1!C1”),其中bonds是直接定义的变量;间接定义,函数中的不用双引号的工作表单元地址或行列名称被看作是间接变量,函数对其指引的内容进行操作。工作表单元地址可以包含页表序号,例如MLDeleteMatrix(B1);单元格B1中的内容为a,则相当于执行MLDeleteMatrix(”a”);(3) 建议使用Excel Link的自动计算模式。如果在手动计算模式下使用MLGetMatrix函数,当在单元格中输入完函数等式时,需要按F9键执

20、行,而按下F9键将有可能引起其他工作表函数的重复执行,产生不可预料的后果。设置Excel Link自动计算模式方法如下:在Excel“工具”菜单的“选项”,选择重新计算标签,见下图。(4) 如果需要在工作表中重新计算Excel Link函数,最好按F2键和回车键单步执行每个函数。(5) 如果在MLGetMatrix函数中使用了单元的直接地址,那么当删除了行或列或者将函数从其他单元复制到新的单元后,一定要重新修改地址。Excel Link不能自动改变MLGetMatrix中的地址。(6) 在打开一个包含ExcelLink函数的Excel数据表的时候,Excel会自动

21、从上到下,从左到右地执行这些函数,所有有可能出现如“#COMMAND!”或“#NONEXIST”等Excel错误提示,只需关闭所有Matlab图形窗口,然后按F2键并回车重新单步执行单元格里地函数就可以了。4. xlswrite与xlsread MATLAB提供的函数xlswrite,具有将MATLAB中的数据写入EXCEL的功能。调用方式:xlswrite('filename', M)xlswrite('filename', M, sheet)xlswrite('filename', M, 'range')xlswrite(&#

22、39;filename', M, sheet, 'range')输入参数:filename % EXCEL文件名M % MATLAB工作空间中的大小为m×n的数组,该数组可以是字符型的,数值型的也可以是单元数组,其中m < 65536且n < 256sheet % EXCEL中的工作簿range % EXCEL工作簿中的数据区域例如:将一个向量写入EXCEL文件v.xls,在MATLAB中执行如下命令:>>xlswrite('v', 1 5 -8 3.9 0)打开v.xls,用户就可以看到数据已经写入到文件v.xls中了

23、。例3.1.1 把元胞数组d = 'Time', 'Temp' 12 98; 13 99; 14 97写入到EXCEL文件m.xls的一个规定的工作簿当中。在MATLAB中执行如下命令:>>d = 'Time', 'Temp' 12 98; 13 99; 14 97>>s = xlswrite('m.xls', d, 'Temperatures', 'E1')Warning: Added specified worksheet. s = 1s=1表明操作成功。

24、>>s = xlswrite('m.xls', d, 'Sheet1', 'E1')s = 1打开m.xls文件,就可以看到数据已经写入了文件m.xls中。MATLAB提供的函数xlsread,具有将EXCEL中的数据读入MATLAB的功能。num = xlsread(filename)%如果filename中有非双精度数据则会忽略该数据,导致数据减少,如果某一列中既包含文字型数据又包含数值型数据,则文字型数据记为NaNnum = xlsread(filename, -1)%同时打开相应的EXCEL文件,手动选择要读入的数据区域num

25、 = xlsread(filename, sheet)num = xlsread(filename, 'range')num = xlsread(filename, sheet, 'range')num, txt = xlsread(filename, sheet, 'range')输入参数:filename % EXCEL文件名sheet % EXCEL中的工作簿名range % EXCEL工作簿中的数据区域输出参数:num %读入Excel文件数据txt %保存文本内容例 3.1.2 将m.xls复制到matlab当前工作目录下,并在matl

26、ab命令窗口输入以下命令>> num=xlsread('m.xls')num = 1 2 NaN NaN NaN NaN 2 4 NaN NaN 12 98 3 6 NaN NaN 13 99 4 8 NaN NaN 14 97 5 10 NaN NaN NaN NaN 6 12 NaN NaN NaN NaN 7 14 NaN NaN NaN NaN 8 16 NaN NaN NaN NaN 9 18 NaN NaN NaN NaN 10 20 NaN NaN NaN NaN 11 22 NaN NaN NaN NaN 12 24 NaN NaN NaN NaN

27、13 26 NaN NaN NaN NaN 14 28 NaN NaN NaN NaN 15 30 NaN NaN NaN NaN 16 32 NaN NaN NaN NaN 17 34 NaN NaN NaN NaN 18 36 NaN NaN NaN NaN 19 38 NaN NaN NaN NaN 20 40 NaN NaN NaN NaN 21 42 NaN NaN NaN NaN 22 44 NaN NaN NaN NaN 23 46 NaN NaN NaN NaN>> num=xlsread('m.xls',-1)>> num,txt=xl

28、sread('m.xls')num = 1 2 NaN NaN NaN NaN 2 4 NaN NaN 12 98 3 6 NaN NaN 13 99 4 8 NaN NaN 14 97 5 10 NaN NaN NaN NaN 6 12 NaN NaN NaN NaN 7 14 NaN NaN NaN NaN 8 16 NaN NaN NaN NaN 9 18 NaN NaN NaN NaN 10 20 NaN NaN NaN NaN 11 22 NaN NaN NaN NaN 12 24 NaN NaN NaN NaN 13 26 NaN NaN NaN NaN 14 28

29、 NaN NaN NaN NaN 15 30 NaN NaN NaN NaN 16 32 NaN NaN NaN NaN 17 34 NaN NaN NaN NaN 18 36 NaN NaN NaN NaN 19 38 NaN NaN NaN NaN 20 40 NaN NaN NaN NaN 21 42 NaN NaN NaN NaN 22 44 NaN NaN NaN NaN 23 46 NaN NaN NaN NaNtxt = '' '' '' '' 'Time' 'Temp' 'a

30、' '' '' '' '' '' '' '' '' '' '' '' '' '' 'x' '' '' '' '' '' '' 'c' '' '' '' '' '' '&

31、#39; 'b'>> num,txt=xlsread('m.xls','Sheet1','E1:F4')num = 12 98 13 99 14 97txt = 'Time' 'Temp'5. 在工作表和在宏中使用ExcelLink的例子例3.1.3 :(在工作表中使用ExcelLink)如下图所示:使用mlopen()函数启动Matlab,使用mlevalstring("load census")载入matlab自带的数据文件census,其中包含矩阵cdate和p

32、op。使用mlgetmatrix("cdate","E1"),将Matlab空间的矩阵cdata写入到工作表中以E1开始的位置;mlgetmatrix("pop","F1");将Matlab空间的矩阵pop写入到工作表中以F1开始的位置;运行结果如下图所示: mlputmatrix("x",E1:E21)mlputmatrix("y",F1:F21)将E1到E21中的数据以及F1到F21中的数据分别写入到Matlab空间的矩阵变量x和y中。mlevalstring(

33、"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*del2,'r:')")绘出离散点、拟合曲线图及偏差曲线图,结果如下图示:mlcl

34、ose();关闭Matlab。例3.1.4:在宏中使用Excel Link新建一个Excel工作表,打开Visual Basic编辑器,操作如下图示:然后在工程管理器中插入模块,如下图:在模块代码区域写下如下代码,如下图:Function excellinktest()MLOpenmlevalstring "load census"mlgetmatrix "cdate", "E1"mlgetmatrix "pop", "F1"mlputmatrix "x", Range(&q

35、uot;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,

36、9;r:',x,pop2-2*del2,'r:')"End Function选中模块1,在“工具”菜单,“引用”选项,如下图示。弹出引用对话框,选择Excel Link,如下图:确定后,即可运行该程序,结果与例3.3相同。3.2 MATLAB绘图人们很难从一大堆原始的数据中发现它们的含义,而数据图形恰能使视觉感官直接感受到数据的许多内在本质,发现数据的内在联系。MATLAB可以表达出数据的二维,三维,甚至四维的图形。通过图形的线型,立面,色彩,光线,视角等属性的控制,可把数据的内在特征表现得淋漓尽致。本节主要介绍MATLAB中常用的绘图函数,及如何将计算结果用

37、图形的方式显示出来。3.2.1 二维数据曲线图在MATLAB自动生成的图形窗口上,图形窗口和命令窗口是相互独立的。图形窗口的属性是由系统和MATLAB共同控制。当MATLAB中没有图形窗口时,将新建一个图形窗口作为输出窗口,当MATLAB中已经存在一个或多个图形窗口时,MATLAB一般指定最后一个图形窗口作为当前图形命令的输出窗口。不同的图形结果分别在不同的图形窗口中输出。 在MATLAB的二维曲线的绘图指令中,最重要最基本的指令是 plot,其他的绘图指令都是以它为基础的。一般情况下,连续执行两条plot命令,则后面一条命令的输出结果会把前面的一条语句的输出图形给覆盖掉。但是,MATLAB提

38、供了一条命令能够使得情况有所不同,即hold命令。当hold开关为on时,后续图形叠加在原来的图形上面。1、绘制单根二维曲线在MATLAB中调用plot函数可以绘制直角坐标系下的二维曲线。plot函数的基本调用格式:plot(x,y)其中x和y为长度相同的向量,分别用来存储x坐标和y坐标数据。例3.2.1 在0x2p区间内,绘制曲线 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年后你的钱数与利率的关系是,画出该函数的图像。在

39、MATLAB中执行下列命令:>> r=0:0.01:0.1;>> y=1000*(1+r).10;>> plot(r,y)程序执行后,在图形窗口中产生注:plot函数最简单的调用格式是只包含一个输入参数:plot(x)在这种情况下,当x是实向量时,以该向量元素的下标为横坐标,元素值为纵坐标画出一条连续曲线,这实际上是绘制折线图。2、绘制多根二维曲线(1)plot函数的输入参数是矩阵形式 (i) 当x是向量,y是有一维与x同维的矩阵时,则绘制出多根不同颜色的曲线。曲线条数等于y矩阵的另一维数,x被作为这些曲线共同的横坐标。 (ii) 当x,y是同维矩阵时,则以

40、x,y对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。 (iii) 对只包含一个输入参数的plot函数,当输入参数是实矩阵时,则按列绘制每列元素值相对其下标的曲线,曲线条数等于输入参数矩阵的列数。当输入参数是复数矩阵时,则按列分别以元素实部和虚部为横、纵坐标绘制多条曲线。例3.2.3画出S&P从2008年1月到2008年10.20开盘价、最高价、最低价和收盘价的时间图。 (a)横坐标是观测个数,纵坐标是价格,将四种价格画在一幅图中(b)横坐标是时间,纵坐标是价格,将四种价格画在一幅图中(c)横坐标是时间,纵坐标是价格,画出其收盘价的时间图解:clear;load spdat

41、a 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函数调用格式为:plot(x1,y1,x2,y2,xn,yn)(i) 当输入参数都为向量时,x1和y1,x2和y2,xn和yn分别组成一组向量对,每一组向量对的长度可以不同。每一向量对可以绘制出一条曲线,这样可以在同一坐标内绘制出多条曲线。 (ii) 当输入参数

42、有矩阵形式时,配对的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);y2=1+sin(x2);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,

43、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: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 在同一幅图中画出S&P从2008年1月到2008年10.20收盘价及其对数收益率的时间图。 解:在前面例子的

44、基础上pause;cre=price2ret(sp08(:,5);rdate=mydate(2:end);plotyy(mydate,sp08(:,5),rdate,cre)4图形保持hold on/off命令控制是保持原有图形还是刷新原有图形,不带参数的hold命令在两种状态之间进行切换。例3.2.7 采用图形保持,在同一坐标内绘制曲线y1=0.2e-0.5xcos(4x) 和y2=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(

45、pi*x);plot(x,y2);hold off5、设置曲线样式MATLAB提供了一些绘图选项,用于确定所绘曲线的线型、颜色和数据点标记符号,它们可以组合使用。例如,“b-.”表示蓝色点划线,“y:d”表示黄色虚线并用菱形符标记数据点。当选项省略时,MATLAB规定,线型一律用实线,颜色将根据曲线的先后顺序依次。要设置曲线样式可以在plot函数中加绘图选项,其调用格式为:plot(x1,y1,选项1,x2,y2,选项2,xn,yn,选项n)Maltab允许用户对线条定义如下的特性:(1)线型定义符-:-.线型实线(缺省值)划线点线点划线(2)线条宽度指定线条的宽度,取值为整数(单位为像素点)

46、(3)颜色定义符R(red)G(green)b(blue)c(cyan)颜色红色绿色兰色青色定义符M(magenta)y(yellow)k(black)w(white)颜色品红黄色黑色白色(4)标记类型定义符+o(字母)*.x标记类型加号小圆圈星号实点交叉号定义符dv><标记类型棱形向上三角形向下三角形向右三角形向左三角形定义符shP标记类型正方形正六角星正五角星(5)标记大小指定标记符号的大小尺寸,取值为整数(单位为像素)(6)标记面填充颜色指定用于填充标记符面的颜色。取值在上表。(7)标记周边颜色指定标记符颜色或者是标记符(小圆圈、正方形、棱形、正五角星、正六角星和四个方向的三

47、角形)周边线条的颜色。取值在上表。在所有的能产生线条的命令中,参数LineSepc可以定义线条的下面三个属性:线型、标记符号、颜色进行设置。对线条的上述属性的定义可用字符串来定义,如:plot(x,y,'-.or')结合x和y,画出点划线(-.),在数据点(x,y)处画出小圆圈(o),线和标记都用红色画出。其中定义符(即字符串)中的字母、符号可任意组合。若没有定义符,则画图命令plot自动用缺省值进行画图。若仅仅指定了标记符,而非线型,则plot只在数据点画出标记符。如:plot(x,y,d)例3.2.8 采用不同颜色、不同线形以及不同标记在同一图形中画出y=cos(x),y=

48、sin(x-p/2)expx/100和y=sin(x-p)的图像 >>t = 0:pi/20:2*pi; >>plot(t,t.*cos(t),'-.r*') >>hold on >>plot(exp(t/100).*sin(t-pi/2),'-mo') >>plot(sin(t-pi),':bs') >>hold off图形结果为图3.2.1例3.2.9 >>plot(t,sin(2*t),'-mo', 'LineWidth',2

49、,'MarkerEdgeColor','k', 'MarkerFaceColor',.49 1 .63,'MarkerSize',12)图形结果为图3.2.2。图3.2.1 二维曲线图 图3.2.2 二维图形的绘制例3.2.10 画出S&P从2008年1月到2008年10.20最高价、和最低价的时间图,不同价格以不同的线形、颜色和标记画出。在原来程序的基础上plot(mydate,sp08(:,3),'y-*',mydate,sp08(:,3),'m-.')6、图形标注与坐标控制(1)图形标

50、注有关图形标注函数的调用格式为:title(图形名称)xlabel(x轴说明)ylabel(y轴说明)text(x,y,图形说明)legend(图例1,图例2,)函数中的说明文字,除使用标准的ASCII字符外,还可使用LaTeX格式的控制字符,这样就可以在图形上添加希腊字母、数学符号及公式等内容。例如,text(0.3,0.5,sin(omegat+beta)将得到标注效果sin(t+)。例3.2.11 例:用不同颜色及线形画出HSI指数从1990年1月2日到1992年12月31日的收盘价和对数收益率的1万倍的时间图。图形名称:HIS收盘价和对数收益率X轴标注:观测Y轴标注:HIS收盘价和对数

51、收益率的1万倍图形说明:时间是1990.1.2-1992.12.31加图例解:建立如下M文件:clear;load datahsi hsi;x=(1:length(hsi(:,1)'y=hsi(:,2);x1=x;x1(1)=;rlog=10000*price2ret(hsi(:,2);plot(x,y,'r',x1,rlog,'m.-');title('HISÊÕÅ̼ۺͶÔÊýÊÕÒ

52、0;ÂÊ')xlabel('¹Û²â¸öÊý');ylabel('HISÊÕÅ̼ۺͶÔÊýÊÕÒæÂʵÄ1Íò±¶');text(440,2000,'ʱ¼ä

53、02;Ç1990.1.2-1992.12.31');legend('ÊÕÅ̼Û','¶ÔÊýÊÕÒæÂÊ');pauseaxis(0 750 -1000 8000);pauseaxis off;pauseaxis onpauseaxis equal(2)坐标控制axis函数的调用格式为:axis(xmin xmax ymin ymax zmin zmax)axis函数功能丰富,常用的格

54、式还有:axis equal:纵、横坐标轴采用等长刻度。axis square:产生正方形坐标系(缺省为矩形)。axis auto:使用缺省设置。axis off:取消坐标轴。axis on:显示坐标轴。给坐标加网格线用grid命令来控制。grid on/off命令控制是画还是不画网格线,不带参数的grid命令在两种状态之间进行切换。给坐标加边框用box命令来控制。box on/off命令控制是加还是不加边框线,不带参数的box命令在两种状态之间进行切换。例3.2.12 在同一坐标中,可以绘制3个同心圆,并加坐标控制。程序如下:t=0:0.01:2*pi;x=exp(i*t);y=x;2*x;

55、3*x'plot(y)grid on; %加网格线box on; %加坐标边框axis equal %坐标轴采用等刻度7、 图形的可视化编辑MATLAB 6.5版本在图形窗口中提供了可视化的图形编辑工具,利用图形窗口菜单栏或工具栏中的有关命令可以完成对窗口中各种图形对象的编辑处理。在图形窗口上有一个菜单栏和工具栏。菜单栏包含File、Edit、View、Insert、Tools、Window和Help共7个菜单项,工具栏包含11个命令按钮。可以利用可视化的图形编辑工具处理前面的例子8、图形窗口的分割subplot函数的调用格式为:subplot(m,n,p)该函数将当前图形窗口分成m&

56、#215;n个绘图区,即每行n个,共m行,区号按行优先编号,且选定第p个区为当前活动区。在每一个绘图区允许以不同的坐标系单独绘制图形。例3.2.13 Call多头:L=-Cer(T-t)+max(ST-X, 0)Put多头: L=-Per(T-t)+max(X-ST, 0)假设投资者1和投资者2在3月份分别购买了一份12月份到期的欧式看涨期权和看跌期权,执行价格都是X=100元,看涨期权价格C=8元,看跌期权价格为6元,无风险利率为3%,试给出该两位投资者及其交易对手的利润函数并用四幅子图画出利润函数图。解:clear;tic;C=8;P=6;T=(12-3)/12;r=0.03;X=100;ST=0:10:200;bcl=-C*exp(r*T)+max(ST-X,0);scl=-bcl;bpl=-P*exp(r*T)+max(X-ST,0);spl=-bpl;subplot(2,2,1)plot(ST,bcl);grid on;title(看涨期权多头的利润');subplot(2,2,2)plot(ST,scl);grid on;title(看涨期权空头的利润');subplot(2,2,3)plot(ST,bpl);grid on;title(看跌期权多头的利润');subplot(2,2,4)plot(ST,spl);grid

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论