




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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個命令按鈕??梢岳每梢暬膱D形編輯工具處理前面的例子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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年知識產權法相關考試試卷及答案解析
- 2025年高級經濟師考試試題及答案
- 股權價值評估與調整及投資并購決策支持、股權激勵實施、企業戰略調整、風險控制、并購重組及股權融資合作協議
- 美團外賣特色餐飲店裝修設計及外賣配送合作合同
- 高效生物技術研發平臺共建及資源共享合作協議
- 職業技能培訓學校品牌加盟與師資輸出服務標準合作協議
- 電子產品保險托運補充協議
- 保險托運補充協議(食品飲料)
- 環境監測測繪公司股權合作協議書
- 網紅飲品店品牌區域代理與物料供應及品牌培訓服務協議
- 電線電纜載流量及其計算常用數據
- 光學顯微鏡智能化改造方案
- 火龍罐綜合灸療法
- 《計算機組裝與維護》計算機CPU教案
- 大學《數字信號處理》課程考試試卷(含答案)
- 2022年呼和浩特市賽罕區消防救援大隊招聘政府專職消防員考試真題
- 叉車司機2023年工作總結:貨物裝卸與搬運的實踐
- 貝克特-荒誕的藝術
- 現代企業架構框架白皮書
- 新鄉市欣豐瑞拓天然資源有限公司 現代化環保型骨料生產線項目環境影響報告
- 小區業委會工作情況匯報及下一步工作計劃
評論
0/150
提交評論