1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,金融数值计算与应用软件,-MATLAB,王 辉,中央财经大学金融学院,E-mail,:,xiaohuipk,Tel,:,13699221266,第,3,章,MATLAB,与,Excel,数据连接及绘图,3.1 MATLAB,与,Excel,数据连接,3.1.1 MATLAB,和,Excel,的接口安装:,.Excel Link,的安装和和设置,Excel Link,的设置,启动,Excel,,选择菜单“工具”项下的“加载宏”项,弹出如下对话框,若该项不存在,则通过浏览目录,在目录,MATLAB/toolb
2、ox/,exlink,下找到,excllink.xla,文件,在,Excel,中多了一个,Excel Link,工具条,如下图示,:,3.1.2.,ExcelLink,管理函数手动启动,matlab,要不想在每次启动时都启动,matlab,,则可以在电子表格中或函数输入框中输入以下命令,=,MLAutoStart(“no,”),手动启动,matlab,(1),在,excel,电子表格中输入命令,=,MLOpen,(),(2),利用,excel,的宏工具,在宏对话框中输入,Matlabinit,,然后单击执行按钮。,(3),按左上按钮,startmatlab,。,1,、,ExcelLink,连接
3、管理函数,(1),Matlabinit,该函数只能在宏子例程中使用。初始化,ExcelLink,和启动,Matlab,进程。只有在,MLAutoStart,函数中使用“,no”,参数,才需要手动使用,Matlabinit,来初始化,ExcelLink,和启动,Matlab,进程,如果使用参数“,yes”,,则,Matlabinit,是自动执行的。使用语法:,Matlabinit,(2),MLAutoStart,设置自动启动,Matlab,和,ExcelLink,。在工作表中的使用语法:,MLAutoStart(yes,),MLAutoStart(no,),使用“,yes”,参数,则当,Exce
4、l,启动时,自动启动,Matlab,和,ExcelLink,;如果使用参数“,no”,,则当,Excel,启动时,不启动,Matlab,和,ExcelLink,。如果在此之前它们已经启动,则无任何影响。,(3),MLClose,终止,Matlab,进程并删除,Matlab,工作空间的所有变量。并通知,Excel,,,Matlab,不再运行。在工作表中的使用语法:,MLClose,()在宏中的使用语法:,MLClose,(4),MLOpen,启动,Matlab,进程,如果,Matlab,进程已经启动,则,MLOpen,函数不进行任何操作。在使用,MLClose,关闭,Matlab,进程后使用,M
5、LOpen,来重新启动,Matlab,。在工作表中的使用语法:,MLOpen,()在宏中的使用语法:,MLOpen,(3),MLClose,终止,Matlab,进程并删除,Matlab,工作空间的所有变量。并通知,Excel,,,Matlab,不再运行。在工作表中的使用语法:,MLClose,()在宏中的使用语法:,MLClose,Excel,时间与,Matlab,的转换,EXCEL,的默认日期数开始与,1900,年,1,月,1,日,而,MATLAB,的日期数开始于,0000,年,1,月,1,日。,如果用户使用,MATLAB,中的日期数计算,常数,693960,起关键作用,:EXCEL,日期数
6、加上它进入,MATLAB,或从,MATLAB,日期数中减去它进入,EXCEL,2,、,ExcelLink,数据管理函数,(1),matlabfcn,根据给定的,Excel,数据执行,Matlab,命令。在工作表中使用时的语法:,matlabfcn(command,,,inputs),=matlabfcn(“sum”,B3:B10),;把从,B3,到,B10,的单元格中数据相加,例:在,Matlab,中生成,12,维均匀随机向量,aa,,利用,matlabfcn,在,Excel,中求其分量之和。,(2),Matlabsub,根据给定的,Excel,数据执行,Matlab,命令,并将结果返回到指定
7、的单元格中,。在工作表中的使用语法:,matlabsub,(,command,,,edat,,,inputs,),例如:,=,matlabsub,(”,sum”,,”,A1”,,,B1:B10,);把工作表中从单元格,B1,到,B10,的数据相加,并将结果返回到单元格,A1,中。注意:,edat,指定的位置不能包含,matlabsub,所在的位置。,(3),MLAppendMatrix,将,Excel,工作表中的数据追加到,Matlab,中指定的矩阵中如果该矩阵不存在,则创建矩阵。在工作表中使用的语法:,MLAppendMatrix(var_name,,,mdat,),注意要追加的数据维数要和
8、原矩阵中的维数相匹配,否则出错,假设,matlab,中,矩阵,a,是个,2,行,3,列的矩阵,如下图,:,将,Excel,表中,A1,:,A2,中的数据追加到矩阵后,如下图示,成为矩阵的第四列,如下图示,(4),MLDeleteMatrix,删除,Matlab,空间中指定的矩阵在工作表中使用的语法:,MLDeleteMatrix,(,var_name,);,Var_name,,是要删除的矩阵名,如果矩阵名在引号内“,var_name,”,的形式,则直接指定变量名,如果,var_name,不用引号引起来,则通过计算获得实际矩阵的名字。例如,单元格,B1,中的内容为,a,,,MLDeleteMat
9、rix,(,B1,),则表示删除,Matlab,工作空间的矩阵,a,,它等价于,MLDeleteMatrix,(”,a”,),4.,xlswrite,与,xlsread,MATLAB,提供的函数,xlswrite,,具有将,MATLAB,中的数据写入,EXCEL,的功能。,MATLAB,提供的函数,xlsread,,具有将,EXCEL,中的数据读入,MATLAB,的功能。,xlswrite,的调用方式,xlswrite(filename,M),xlswrite(filename,M,sheet),xlswrite(filename,M,range),xlswrite(filename,M,sh
10、eet,range),xlswrite,的输入参数,filename,%EXCEL,文件名,M,%MATLAB,工作空间中的大小为,mn,的数组,该数组可以是字符型的,数值型的也可以是单元数组,其中,m 65536,且,n 256,sheet,%EXCEL,中的工作簿,range,%EXCEL,工作簿中的数据区域,例如:将一个向量写入,EXCEL,文件,v.xls,,,在,MATLAB,中执行如下命令:,xlswrite(v,1 5-8 3.9 0),例,3.1.1,把元胞数组,d=Time,Temp;12 98;13 99;14 97,写入到,EXCEL,文件,m.xls,的一个规定的工作簿
11、当中。,在,MATLAB,中执行如下命令:,d=Time,Temp;12 98;13 99;14 97,;,s=,xlswrite(m.xls,d,Temperatures,E1),;,xlsread,的调用方式,num=,xlsread(filename,),num=,xlsread(filename,-1),会打开,excel,文件,然后选择要读入数据。,num=,xlsread(filename,sheet),num=,xlsread(filename,range),num=,xlsread(filename,sheet,range),num,txt=,xlsread(filename,
12、sheet,range),xlsread,的输入与输出参数,输入参数:,filename%EXCEL,文件名,sheet%EXCEL,中的工作簿名,range%EXCEL,工作簿中的数据区域,输出参数:,num%,读入,Excel,文件数据,txt%,保存文本内容,例,3.1.2,将,m.xls,复制到,matlab,当前工作目录下,并在,matlab,命令窗口输入以下命令:,num=xlsread(m.xls),num=xlsread(m.xls,-1),num,txt=xlsread(m.xls),num,txt,=xlsread(m.xls,Temperatures,E1:F4),3.2
13、 MATLAB,绘图,3.2.1,二维数据曲线图,1,、绘制单根二维曲线,plot,函数最简单的调用格式是只包含一个输入参数:,plot(x,),在这种情况下,当,x,是实向量时,以该向量元素的下标为横坐标,元素值为纵坐标画出一条连续曲线,这实际上是绘制折线图。,plot,函数的基本调用格式为:,plot(x,y,),其中,x,和,y,为长度相同的向量,分别用于存储,x,坐标和,y,坐标数据。,二维绘图的例子,例,3.2.1,在,0 x2,区间内,绘制曲线,y=2e,-0.5x,cos(4x),x=0:pi/100:2*pi;,y=2*exp(-0.5*x).*cos(4*pi*x);,plo
14、t(x,y),例,3.2.2,假如你的帐户中有一笔,10,年的,$1000,存款,年利率为,r,那么,10,年后你的钱数与利率的关系是,画出该函数的图像。,在,MATLAB,中执行下列命令:,r=0:0.01:0.1;,y=1000*(1+r).10;,plot(r,y,),1,、,当,x,y,是同维矩阵时,,则以,x,y,对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵列数。,2,、,对只包含一个输入参数的,plot,函数,,当输入参数是实矩阵时,按列绘制每列元素值相对其下标的曲线,曲线条数等于矩阵的列数。,3,、,当输入参数是复数矩阵时,,则按列分别以元素实部和虚部为横、纵坐标绘制多条
15、曲线。,2,、绘制多根二维曲线,plot,函数的输入参数是矩阵形式,例,3.2.3,画出,S&P,从,2008,年,1,月到,2008,年,10.20,开盘价、最高价、最低价和收盘价的时间图。,(1),横坐标是观测个数,纵坐标是价格,将四种价格画在一幅图中,(,2,)横坐标是时间,纵坐标是价格,将四种价格画在一幅图中,(,3,)横坐标是时间,纵坐标是价格,画出其收盘价的时间图,clear;,load,spdata,sp08;,sd,=datenum(02-Jan-2008)-sp08(1,1);,mydate,=sp08(:,1)+sd;,dsp08=sp08(:,2:5);,plot(dsp
16、08);,pause;,plot(mydate,dsp08);,pause;,plot(mydate,sp08(:,5);,调用格式为:,plot(x1,y1,x2,y2,xn,yn,),(1),当输入参数都为向量时,,x1,和,y1,,,x2,和,y2,,,,,xn,和,yn,分别组成一组向量对,每一组向量对的长度可以不同。,(2),当输入参数有矩阵形式时,配对的,x,y,按对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。,含多个输入参数的,plot,函数,例,3.2.4,分析下列程序绘制的曲线。,x1=linspace(0,2*pi,100);,x2=linspace(0,3*
17、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),具有两个纵坐标标度的图形,调用格式为:,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)
18、程序如下,:,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,收盘价及其对数收益率的时间图。,在前面例子的基础上,pause;,cre,=price2ret(sp08(:,5);,rdate,=mydate(2:end);,plotyy(mydate,sp08(:,5),rdate,cre),图形保持,hold on/off,命令控制是保持原有图形还是刷新原有
19、图形,,不带参数的,hold,命令在两种状态之间进行切换。,例,3.2.7,采用图形保持,在同一坐标内绘制曲线,y1=0.2e-0.5xcos(4x),和,y2=2e-0.5xcos(x),。,例,3.2.7,程序如下,:,x=0:pi/100:2*pi;,y1=0.2*exp(-0.5*x).*cos(4*pi*x);,plot(x,y1),hold on,y2=2*exp(-0.5*x).*,cos(pi,*x);,plot(x,y2);,hold off,设置曲线样式,plot(X1,Y1,LineSpec1,X2,Y2,LineSpec2),将按顺序分别画出由三参数定,Xi,Yi,Li
20、neSpeci,的线条。,其中参数,LineSpeci,指明了线条的类型,标记符号,和画线用的颜色。,例,3.2.8,采用不同颜色、不同线形以及不同标记在同一图形中画出,y=cos(x),,,y=sin(x-,/2)expx/100,和,y=sin(x-,),的图像,程序如下:,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.9,分析如下程序,plot(t,sin(2*t),-mo,LineWidth,2,Ma
21、rkerEdgeColor,k,MarkerFaceColor,.49 1.63,MarkerSize,12),在原来程序的基础上,plot(mydate,sp08(:,3),y-*,mydate,sp08(:,3),m-.),例,3.2.10,画出,S&P,从,2008,年,1,月到,2008,年,10.20,最高价、和最低价的时间图,不同价格以不同的线形、颜色和标记画出。,图形标注,title(,图形名称,),xlabel(x,轴说明,),ylabel(y,轴说明,),text(x,y,图形说明,),legend(,图例,1,图例,2,),例,3.2.11,用不同颜色及线形画出,HSI,指
22、数从,1990,年,1,月,2,日到,1992,年,12,月,31,日的收盘价和对数收益率的,1,万倍的时间图。,图形名称:,HIS,收盘价和对数收益率,X,轴标注:观测,Y,轴标注:,HIS,收盘价和对数收益率的,1,万倍,图形说明:时间是,1990.1.2-1992.12.31,加图例,坐标控制,axis(xmin xmax ymin ymax zmin zmax),axis equal,:纵、横坐标轴采用等长刻度。,axis square,:产生正方形坐标系,(,缺省为矩形,),。,axis auto,:使用缺省设置。,axis off,:取消坐标轴。,axis on,:显示坐标轴。,网
23、格线,和边框,给坐标加网格线用,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;3*x;,plot(y),grid on;%,加网格线,box on;%,加坐标边框,axis equal%,坐标轴采用等刻度,图形的可视化编辑,MA
24、TLAB,在图形窗口中提供了可视化的图形编辑工具,利用图形窗口菜单栏或工具栏中的有关命令可以完成对窗口中各种图形对象的编辑处理。,在图形窗口上有一个菜单栏和工具栏。菜单栏包含,File,、,Edit,、,View,、,Insert,、,Tools,、,Window,和,Help,共,7,个菜单项,工具栏包含,11,个命令按钮。,利用可视化的图形编辑工具处理前面的例子,图形窗口的分割,subplot(m,n,p,),该函数将当前图形窗口分成,mn,个绘图区,即每行,n,个,共,m,行,区号按行优先编号,且选定第,p,个区为当前活动区。在每一个绘图区允许以不同的坐标系单独绘制图形。,期权的利润函数
25、Call,多头:,L=-,Ce,r(T-t),+max(S,T,-X,0),Put,多头:,L=-,Pe,r(T-t),+max(X-S,T,0),例,3.2.13,假设投资者,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
26、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,on;title,(,看跌期权空头的利润,)
27、toc,;,3.2.2,三维图形三维曲线,plot3(x1,y1,z1,选项,1,x2,y2,z2,选项,2,xn,yn,zn,选项,n),其中每一组,x,y,z,组成一组曲线的坐标参数,选项的定义和,plot,函数相同。当,x,y,z,是同维向量时,则,x,y,z,对应元素构成一条三维曲线。当,x,y,z,是同维矩阵时,则以,x,y,z,对应列元素绘制三维曲线,曲线条数等于矩阵列数。,例,3.2.14,绘制三维曲线。,程序如下:,t=0:pi/100:20*pi;,x=sin(t);,y=cos(t);,z=t.*sin(t).*cos(t);,plot3(x,y,z);,title(L
28、ine in 3-D Space);,xlabel(X);ylabel(Y);zlabel(Z);,grid on;,三维曲面,产生三维数据,在,MATLAB,中,利用,meshgrid,函数产生平面区域内的网格坐标矩阵。其格式为:,x=a:d1:b;y=c:d2:d;,X,Y=,meshgrid(x,y,);,语句执行后,矩阵,X,的每一行都是向量,x,,行数等于向量,y,的元素的个数,矩阵,Y,的每一列都是向量,y,,列数等于向量,x,的元素的个数。,绘制三维曲面的函数,surf,函数和,mesh,函数的调用格式为:,mesh(x,y,z,c),surf(x,y,z,c),一般情况下,,x
29、y,z,是维数相同的矩阵。,x,y,是网格坐标矩阵,,z,是网格点上的高度矩阵,,c,用于指定在不同高度下的颜色范围。,标准三维曲面,sphere,函数的调用格式为,:,x,y,z=sphere(n),cylinder,函数的调用格式为:,x,y,z=cylinder(R,n),MATLAB,还有一个,peaks,函数,Z=,peaks(n,),例,3.2.15-3.2.17,三维图演示,k=5;,n=2k-1;,x,y,z,=,sphere(n,);,c=hadamard(2k);,surf(x,y,z,c,);,colormap(1 1 0;0 1 1,;,0.5 0.7 1),axis equal,修改坐标刻度,(,1,)手工修改坐标刻度,打开,“,Edit”,菜单,进入“,Axes Priperties”,选项,找到“,Ticks”,按钮,在“,Label”,项目下修改坐标刻度。,(,2,)利用,set,命令修改,x=1:32;,plot(x,x.2);,set(gca,XTick,15 10 15 20 25 30);,确定刻度位置,set(gca,XTickLabel,06-04-07;06-04-13;06-04-20;06-04-27;06-05-11;06-05-18;06-05-25),;确定坐标刻度名称。,






