matlab 利用excellink達(dá)到在excel中直接畫(huà)圖_第1頁(yè)
matlab 利用excellink達(dá)到在excel中直接畫(huà)圖_第2頁(yè)
matlab 利用excellink達(dá)到在excel中直接畫(huà)圖_第3頁(yè)
matlab 利用excellink達(dá)到在excel中直接畫(huà)圖_第4頁(yè)
matlab 利用excellink達(dá)到在excel中直接畫(huà)圖_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、2010.4matlab excel混合編程 MATLAB與Excel數(shù)據(jù)連接及繪圖3.1 MATLAB與Excel數(shù)據(jù)連接EXCEL和MATLAB在數(shù)據(jù)顯示和數(shù)值計(jì)算上各有優(yōu)勢(shì),EXCEL是商業(yè)運(yùn)用最廣泛的工具,非常直觀,但是數(shù)值編程比較差,而MATLAB可以彌補(bǔ)這一點(diǎn),有時(shí)在程序開(kāi)發(fā)上需要將兩者結(jié)合起來(lái),實(shí)現(xiàn)兩者之間的優(yōu)勢(shì)互補(bǔ),為此MATLAB提供了EXCEL Link連接工具,實(shí)現(xiàn)MATLAB與EXCEL之間的混合編程。 EXCEL Link是一個(gè)在Microsoft Windows環(huán)境下實(shí)現(xiàn)對(duì)Microsoft EXCEL和MATLAB 進(jìn)行鏈接的插件。通過(guò)對(duì)EXCEL和MATLAB

2、的連接,用戶(hù)可以在EXCEL的工作空間里,利用EXCEL的宏編程工具,使用MATLAB的數(shù)據(jù)處理和圖形處理功能進(jìn)行相關(guān)操作,同時(shí)由EXCEL Link來(lái)保證兩個(gè)工作環(huán)境中數(shù)據(jù)的交換和同步更新。使用EXCEL Link 時(shí),不必脫離EXCEL環(huán)境,而是直接在EXCEL工作區(qū)或宏操作中調(diào)用MATLAB函數(shù)。 EXCEL Link允許在MATLAB和EXCEL之間進(jìn)行數(shù)據(jù)交換,在兩個(gè)功能強(qiáng)大的數(shù)學(xué)處理、分析與表示平臺(tái)之間建立無(wú)縫連接。 EXCEL作為一個(gè)可視化的數(shù)據(jù)處理環(huán)境是進(jìn)行數(shù)組編輯的最佳選擇,而MATLAB則作為數(shù)據(jù)分析和可視化的引擎。任何輸入到EXCEL環(huán)境中的數(shù)據(jù)都可以直接進(jìn)入MTATLA

3、B進(jìn)行處理,而這一過(guò)程完全是“現(xiàn)場(chǎng)”處理的,沒(méi)有任何中間文件,也不需要進(jìn)行編程工作。3.1.1 MATLAB和Excel的接口安裝:. Excel Link的安裝和和設(shè)置首先,在系統(tǒng)中安裝Excel軟件。然后安裝Matlab和Excel Link,用Matlab安裝盤(pán)開(kāi)始安裝,選擇自定義安裝中,在選中組件ExcelLink,如下圖所示:安裝完Excel Link后還需要在Excel中進(jìn)行一些設(shè)置后才能使用。啟動(dòng)Excel,選擇菜單“工具”項(xiàng)下的“加載宏”項(xiàng),彈出如下對(duì)話框:選中Excel Link項(xiàng)。如果該項(xiàng)不存在,則通過(guò)瀏覽目錄,在目錄MATLABtoolboxexlink下找到exclli

4、nk.xla文件,如下圖示,并確定。選中ExcelLink項(xiàng)并確定后,在Excel中多了一個(gè)Excel Link工具條,如下圖示:經(jīng)過(guò)以上的設(shè)置后就可以開(kāi)始使用Excel Link了。其中4個(gè)按鈕的意義分別如下:startmatlab %啟動(dòng)MATLABputmatrix %將變量輸入到MATLABgetmatrix %把MATLAB的變量輸入到EXCELevalstring %執(zhí)行MATLAB命令注:Excel中的起始時(shí)間與MATLAB的起始時(shí)間相差693960天,用戶(hù)需要將該數(shù)據(jù)加在MATLAB上,轉(zhuǎn)換為MATLAB的數(shù)據(jù)。3.1.2 . ExcelLink管理函數(shù)1、ExcelLink連

5、接管理函數(shù)按如上設(shè)置好后,下次啟動(dòng)excel時(shí)會(huì)默認(rèn)啟動(dòng)matlab,要不想在每次啟動(dòng)時(shí)都啟動(dòng)matlab,則可以在電子表格中或函數(shù)輸入框中輸入以下命令=MLAutoStart(“no”)這時(shí)要啟動(dòng)matlab需手動(dòng)啟動(dòng),有三種方法,一種是在excel電子表格中調(diào)用MLOpen函數(shù),即輸入命令=MLOpen()第二種方法是利用excel的宏工具,在宏對(duì)話框中輸入Matlabinit,然后單擊執(zhí)行按鈕,同樣可以啟動(dòng)MATLAB。第三種方法是按左上按鈕"startmatlab"。 下面介紹一下常用的連接、啟動(dòng)和關(guān)閉matlab的常用函數(shù):(1) Matlabinit該函數(shù)只能在

6、宏子例程中使用。初始化ExcelLink和啟動(dòng)Matlab進(jìn)程。只有在MLAutoStart函數(shù)中使用“no”參數(shù),才需要手動(dòng)使用Matlabinit來(lái)初始化ExcelLink和啟動(dòng)Matlab進(jìn)程,如果使用參數(shù)“yes”,則Matlabinit是自動(dòng)執(zhí)行的。使用語(yǔ)法:Matlabinit(2) MLAutoStart設(shè)置自動(dòng)啟動(dòng)Matlab和ExcelLink。在工作表中的使用語(yǔ)法:MLAutoStart("yes")MLAutoStart("no")在宏中的使用語(yǔ)法:MLAutoStart "yes"MLAutoStart &qu

7、ot;no"使用“yes”參數(shù),則當(dāng)Excel啟動(dòng)時(shí),自動(dòng)啟動(dòng)Matlab和ExcelLink;如果使用參數(shù)“no”,則當(dāng)Excel啟動(dòng)時(shí),不啟動(dòng)Matlab和ExcelLink。如果在此之前它們已經(jīng)啟動(dòng),則無(wú)任何影響。 (3) MLClose終止Matlab進(jìn)程并刪除Matlab工作空間的所有變量。并通知Excel,Matlab不再運(yùn)行。在工作表中的使用語(yǔ)法:MLClose()在宏中的使用語(yǔ)法:MLClose(4) MLOpen啟動(dòng)Matlab進(jìn)程。如果Matlab進(jìn)程已經(jīng)啟動(dòng),則MLOpen函數(shù)不進(jìn)行任何操作。在使用MLClose關(guān)閉Matlab進(jìn)程后使用MLOpen來(lái)

8、重新啟動(dòng)Matlab。在工作表中的使用語(yǔ)法:MLOpen()在宏中的使用語(yǔ)法:MLOpen 注釋?zhuān)篍XCEL的默認(rèn)日期數(shù)開(kāi)始與1900年1月1日,而MATLAB 的日期數(shù)開(kāi)始于0000年1月1日。 如果用戶(hù)使用MATLAB中的日期數(shù)計(jì)算, 常數(shù)693960起關(guān)鍵作用: EXCEL日期數(shù)加上它進(jìn)入MATLAB,或從MATLAB 日期數(shù)中減去它進(jìn)入EXCEL 2. ExcelLink數(shù)據(jù)管理函數(shù)(1) Matlabfcn根據(jù)給定的Excel數(shù)據(jù)執(zhí)行Matlab命令。在工作表中使用時(shí)的語(yǔ)法:  matlabfcn(command, inputs)參數(shù)command,Matlab將

9、執(zhí)行的命令,命令需要寫(xiě)成“command”(使用雙引號(hào)引起來(lái))的形式。參數(shù) inputs 傳給Matlab命令的變長(zhǎng)輸入?yún)?shù)列表。列表是包含數(shù)據(jù)的工作表單元格范圍。函數(shù)返回單一數(shù)值或者是字符串,結(jié)果返回到調(diào)用函數(shù)的單元格中。例如matlabfcn(”sum”,B1:B10);把從B1到B10的單元格中數(shù)據(jù)相加,如下圖示: 并將結(jié)果返回到當(dāng)前的活動(dòng)單元格。即A11,結(jié)果如下圖。例:在Matlab中生成12維均勻隨機(jī)向量aa,利用matlabfcn在Excel中求其分量之和。(2) Matlabsub根據(jù)給定的Excel數(shù)據(jù)執(zhí)行Matlab命令,并將結(jié)果返回到指定的單元格中。在工作表中的

10、使用語(yǔ)法:matlabsub(command,edat,inputs)command和inputs參數(shù)的與matlabfcn相同。參數(shù)edat,指定返回值寫(xiě)入在工作表中的位置。如果edat用雙引號(hào)引起來(lái),則edat必須是單元格地址或范圍的名字。如果參數(shù)不用引號(hào)引起edat的形式,則通過(guò)計(jì)算獲得矩陣名。例如:=matlabsub(”sum”,”A1”,B1:B10);把工作表中從單元格B1到B10的數(shù)據(jù)相加,并將結(jié)果返回到單元格A1中。注意:edat指定的位置不能包含matlabsub所在的位置。(3)MLAppendMatrix將Excel工作表中的數(shù)據(jù)追加到Matlab中指定的矩陣中如果該矩

11、陣不存在,則創(chuàng)建矩陣。在工作表中使用的語(yǔ)法:MLAppendMatrix(var_name,mdat)在宏中使用的語(yǔ)法:MLAppendMatrix var_name,mdat注意要追加的數(shù)據(jù)維數(shù)要和原矩陣中的維數(shù)相匹配,否則出錯(cuò)。例如:MLAppendMatrix(”a”,A1:A2);假設(shè)矩陣a是個(gè)2行3列的矩陣,如下圖: 將A1:A2中的數(shù)據(jù)追加到矩陣后,如下圖示 成為矩陣的第四列,如下圖示。單元格B1中是字符a,函數(shù)MLAppendMatrix(B1,A1:A2)的作用于MLAppendMatrix(”a”,A1:A2)相同。 (4) MLDeleteMa

12、trix刪除Matlab空間中指定的矩陣在工作表中使用的語(yǔ)法:MLDeleteMatrix(var_name);在宏中使用的語(yǔ)法:MLDeleteMatrix var_nameVar_name,是要?jiǎng)h除的矩陣名,如果矩陣名在引號(hào)內(nèi)“var_name”的形式,則直接指定變量名,如果var_name不用引號(hào)引起來(lái),則通過(guò)計(jì)算獲得實(shí)際矩陣的名字。例如,單元格B1中的內(nèi)容為a,MLDeleteMatrix(B1),則表示刪除Matlab工作空間的矩陣a,它等價(jià)于MLDeleteMatrix(”a”)(5) MLEvalString將命令(寫(xiě)成字符串的形式)傳到Matlab中執(zhí)行。在工作表中使用的語(yǔ)法:

13、MLEvalString(command);在宏中使用的語(yǔ)法:MLEvalString command參數(shù)command如果是用引號(hào)引起來(lái)”command”的形式,則是直接指定命令;如果不用引號(hào)引起來(lái)command的形式,則command必須是包含了命令字符串的工作表的單元格地址或者是范圍。例如:MLEvalString(”b=magic(4)”);表示在Matlab中執(zhí)行命令b=magic(4);(6) MLGetMatrix將指定的Matlab矩陣寫(xiě)入到Excel工作表中的指定位置。在工作表中使用的語(yǔ)法:MLGetMatrix(var_name,edat)在宏中使用的語(yǔ)法:MLGetMat

14、rix var_name,edat參數(shù)Var_name,是要寫(xiě)入工作表的矩陣名,如果矩陣名在引號(hào)內(nèi)“var_name”的形式,則直接指定變量名,如果var_name不用引號(hào)引起來(lái),則通過(guò)計(jì)算獲得實(shí)際矩陣的名字。參數(shù)edat指定了矩陣寫(xiě)入工組表的位置。如果參數(shù)是用引號(hào)引起”edat”的形式,則是直接指定矩陣名,如果參數(shù)不用引號(hào)引起edat的形式,則通過(guò)計(jì)算獲得矩陣名。例如:MLGetMatrix(”a”,”sheet1!B1”);將矩陣a寫(xiě)入工作表sheet1以單元格B1起始的位置,如果a是一個(gè)2行3列的矩陣,則矩陣占據(jù)sheet1的B1到D2的空間。如果在A1中有字符串a(chǎn),則MLGetMatr

15、ix(A1,” sheet1!C1”)的作用與MLGetMatrix(”a”,”sheet1!C1”)相同。函數(shù)運(yùn)行結(jié)果如圖示。 (7) MLGetVar將MatLab矩陣傳送給Excel VBA變量,只能在宏子例程中使用。使用語(yǔ)法:MLGetVar ML_var_name,VBA_var_name參數(shù)ML_var_name是將獲取的矩陣名。如果矩陣名在引號(hào)內(nèi)“ML_var_name”的形式,則直接指定變量名,如果ML_var_name不用引號(hào)引起來(lái),則通過(guò)計(jì)算獲得實(shí)際矩陣的名字。參數(shù)VBA_var_name,將其Matlab矩陣數(shù)據(jù)傳給的VBA變量名,不用引號(hào)將其引起來(lái)。例如:Su

16、b Fetch()MLGetVar "J", DataJEnd Sub表示將Matlab矩陣J的數(shù)據(jù)寫(xiě)入到VBA變量DataJ中。(8) MLPutMatrix用指定位置的Excel工作表中的數(shù)據(jù),創(chuàng)建或者覆蓋Matlab矩陣。在工作表中使用的語(yǔ)法:MLPutMatrix(var_name,mdat)在宏中使用的語(yǔ)法:MLPutString var_name,mdat參數(shù)var_name是將有被創(chuàng)建或者被覆蓋的矩陣名。如果指定的矩陣不存在,則創(chuàng)建該矩陣,如果矩陣已經(jīng)存在,則覆蓋該矩陣。參數(shù)mdat,指定工作表中的位置。例如:工作表中有A1到C2的數(shù)據(jù),使用函數(shù)MLPutMa

17、trix(”c”,A1:C2),則可以將這些數(shù)據(jù)寫(xiě)到Matlab矩陣c中,如下圖示。注意:如果修改工作表中的數(shù)據(jù),則Matlab中的矩陣相應(yīng)發(fā)生變化。如果把數(shù)據(jù)剪切到別的地方,如D1到F2,則函數(shù)MLPutMatrix(”c”,A1:C2)會(huì)自動(dòng)更改為MLPutMatrix(”c”,D1:F2) (9) MLPutVar使用VBA變量的數(shù)據(jù)創(chuàng)建或者覆蓋Matlab 矩陣。只能在宏子例程中使用。使用語(yǔ)法:MLPutVar ML_var_name,VBA_var_name參數(shù)ML_var_name是將被創(chuàng)建或覆蓋的矩陣名。如果矩陣名在引號(hào)內(nèi)“ML_var_name”的形式,則直接指定變量

18、名,如果ML_var_name不用引號(hào)引起來(lái),則通過(guò)計(jì)算獲得實(shí)際矩陣的名字。參數(shù)VBA_var_name,將其數(shù)據(jù)傳給Matlab矩陣的VBA變量名,不用引號(hào)將其引起來(lái)。如果VBA_var_name變量包含字符串的數(shù)據(jù),則輸出到Matlab為元胞數(shù)組格式。例如:Sub Put()MLPutVar "K", DataKEnd Sub用VBA變量DataK中的數(shù)據(jù)創(chuàng)建或著覆蓋Matlab矩陣K。3. 補(bǔ)充使用Excel Link的注意事項(xiàng)(1) Excel工作表通常以“”作為起始標(biāo)記,例如matlabfcn(”sum”,B1:B10);(2) 大多數(shù)的Exc

19、el Link函數(shù)中有兩種定義變量的方式:直接定義,即將變量用雙引號(hào)標(biāo)記則是直接定義變量,例如MLGetMatrix(”bonds”,”sheet1!C1”),其中bonds是直接定義的變量;間接定義,函數(shù)中的不用雙引號(hào)的工作表單元地址或行列名稱(chēng)被看作是間接變量,函數(shù)對(duì)其指引的內(nèi)容進(jìn)行操作。工作表單元地址可以包含頁(yè)表序號(hào),例如MLDeleteMatrix(B1);單元格B1中的內(nèi)容為a,則相當(dāng)于執(zhí)行MLDeleteMatrix(”a”);(3) 建議使用Excel Link的自動(dòng)計(jì)算模式。如果在手動(dòng)計(jì)算模式下使用MLGetMatrix函數(shù),當(dāng)在單元格中輸入完函數(shù)等式時(shí),需要按F9鍵執(zhí)

20、行,而按下F9鍵將有可能引起其他工作表函數(shù)的重復(fù)執(zhí)行,產(chǎn)生不可預(yù)料的后果。設(shè)置Excel Link自動(dòng)計(jì)算模式方法如下:在Excel“工具”菜單的“選項(xiàng)”,選擇重新計(jì)算標(biāo)簽,見(jiàn)下圖。(4) 如果需要在工作表中重新計(jì)算Excel Link函數(shù),最好按F2鍵和回車(chē)鍵單步執(zhí)行每個(gè)函數(shù)。(5) 如果在MLGetMatrix函數(shù)中使用了單元的直接地址,那么當(dāng)刪除了行或列或者將函數(shù)從其他單元復(fù)制到新的單元后,一定要重新修改地址。Excel Link不能自動(dòng)改變MLGetMatrix中的地址。(6) 在打開(kāi)一個(gè)包含ExcelLink函數(shù)的Excel數(shù)據(jù)表的時(shí)候,Excel會(huì)自動(dòng)

21、從上到下,從左到右地執(zhí)行這些函數(shù),所有有可能出現(xiàn)如“#COMMAND!”或“#NONEXIST”等Excel錯(cuò)誤提示,只需關(guān)閉所有Matlab圖形窗口,然后按F2鍵并回車(chē)重新單步執(zhí)行單元格里地函數(shù)就可以了。4. xlswrite與xlsread MATLAB提供的函數(shù)xlswrite,具有將MATLAB中的數(shù)據(jù)寫(xiě)入EXCEL的功能。調(diào)用方式:xlswrite('filename', M)xlswrite('filename', M, sheet)xlswrite('filename', M, 'range')xlswrite(&#

22、39;filename', M, sheet, 'range')輸入?yún)?shù):filename % EXCEL文件名M % MATLAB工作空間中的大小為m×n的數(shù)組,該數(shù)組可以是字符型的,數(shù)值型的也可以是單元數(shù)組,其中m < 65536且n < 256sheet % EXCEL中的工作簿range % EXCEL工作簿中的數(shù)據(jù)區(qū)域例如:將一個(gè)向量寫(xiě)入EXCEL文件v.xls,在MATLAB中執(zhí)行如下命令:>>xlswrite('v', 1 5 -8 3.9 0)打開(kāi)v.xls,用戶(hù)就可以看到數(shù)據(jù)已經(jīng)寫(xiě)入到文件v.xls中了

23、。例3.1.1 把元胞數(shù)組d = 'Time', 'Temp' 12 98; 13 99; 14 97寫(xiě)入到EXCEL文件m.xls的一個(gè)規(guī)定的工作簿當(dāng)中。在MATLAB中執(zhí)行如下命令:>>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打開(kāi)m.xls文件,就可以看到數(shù)據(jù)已經(jīng)寫(xiě)入了文件m.xls中。MATLAB提供的函數(shù)xlsread,具有將EXCEL中的數(shù)據(jù)讀入MATLAB的功能。num = xlsread(filename)%如果filename中有非雙精度數(shù)據(jù)則會(huì)忽略該數(shù)據(jù),導(dǎo)致數(shù)據(jù)減少,如果某一列中既包含文字型數(shù)據(jù)又包含數(shù)值型數(shù)據(jù),則文字型數(shù)據(jù)記為NaNnum = xlsread(filename, -1)%同時(shí)打開(kāi)相應(yīng)的EXCEL文件,手動(dòng)選擇要讀入的數(shù)據(jù)區(qū)域num

25、 = xlsread(filename, sheet)num = xlsread(filename, 'range')num = xlsread(filename, sheet, 'range')num, txt = xlsread(filename, sheet, 'range')輸入?yún)?shù):filename % EXCEL文件名sheet % EXCEL中的工作簿名range % EXCEL工作簿中的數(shù)據(jù)區(qū)域輸出參數(shù):num %讀入Excel文件數(shù)據(jù)txt %保存文本內(nèi)容例 3.1.2 將m.xls復(fù)制到matlab當(dāng)前工作目錄下,并在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()函數(shù)啟動(dòng)Matlab,使用mlevalstring("load census")載入matlab自帶的數(shù)據(jù)文件census,其中包含矩陣cdate和p

32、op。使用mlgetmatrix("cdate","E1"),將Matlab空間的矩陣cdata寫(xiě)入到工作表中以E1開(kāi)始的位置;mlgetmatrix("pop","F1");將Matlab空間的矩陣pop寫(xiě)入到工作表中以F1開(kāi)始的位置;運(yùn)行結(jié)果如下圖所示: mlputmatrix("x",E1:E21)mlputmatrix("y",F(xiàn)1:F21)將E1到E21中的數(shù)據(jù)以及F1到F21中的數(shù)據(jù)分別寫(xiě)入到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)")根據(jù)所給的數(shù)據(jù)擬合多項(xiàng)式并進(jìn)行偏差計(jì)算。mlevalstring("plot(x,y,'+',x,pop2,'g-',x,pop2+2*del2,'r:',x,pop2-2*del2,'r:')")繪出離散點(diǎn)、擬合曲線圖及偏差曲線圖,結(jié)果如下圖示:mlcl

34、ose();關(guān)閉Matlab。例3.1.4:在宏中使用Excel Link新建一個(gè)Excel工作表,打開(kāi)Visual Basic編輯器,操作如下圖示:然后在工程管理器中插入模塊,如下圖:在模塊代碼區(qū)域?qū)懴氯缦麓a,如下圖: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,在“工具”菜單,“引用”選項(xiàng),如下圖示。彈出引用對(duì)話框,選擇Excel Link,如下圖:確定后,即可運(yùn)行該程序,結(jié)果與例3.3相同。3.2 MATLAB繪圖人們很難從一大堆原始的數(shù)據(jù)中發(fā)現(xiàn)它們的含義,而數(shù)據(jù)圖形恰能使視覺(jué)感官直接感受到數(shù)據(jù)的許多內(nèi)在本質(zhì),發(fā)現(xiàn)數(shù)據(jù)的內(nèi)在聯(lián)系。MATLAB可以表達(dá)出數(shù)據(jù)的二維,三維,甚至四維的圖形。通過(guò)圖形的線型,立面,色彩,光線,視角等屬性的控制,可把數(shù)據(jù)的內(nèi)在特征表現(xiàn)得淋漓盡致。本節(jié)主要介紹MATLAB中常用的繪圖函數(shù),及如何將計(jì)算結(jié)果用

37、圖形的方式顯示出來(lái)。3.2.1 二維數(shù)據(jù)曲線圖在MATLAB自動(dòng)生成的圖形窗口上,圖形窗口和命令窗口是相互獨(dú)立的。圖形窗口的屬性是由系統(tǒng)和MATLAB共同控制。當(dāng)MATLAB中沒(méi)有圖形窗口時(shí),將新建一個(gè)圖形窗口作為輸出窗口,當(dāng)MATLAB中已經(jīng)存在一個(gè)或多個(gè)圖形窗口時(shí),MATLAB一般指定最后一個(gè)圖形窗口作為當(dāng)前圖形命令的輸出窗口。不同的圖形結(jié)果分別在不同的圖形窗口中輸出。 在MATLAB的二維曲線的繪圖指令中,最重要最基本的指令是 plot,其他的繪圖指令都是以它為基礎(chǔ)的。一般情況下,連續(xù)執(zhí)行兩條plot命令,則后面一條命令的輸出結(jié)果會(huì)把前面的一條語(yǔ)句的輸出圖形給覆蓋掉。但是,MATLAB提

38、供了一條命令能夠使得情況有所不同,即hold命令。當(dāng)hold開(kāi)關(guān)為on時(shí),后續(xù)圖形疊加在原來(lái)的圖形上面。1、繪制單根二維曲線在MATLAB中調(diào)用plot函數(shù)可以繪制直角坐標(biāo)系下的二維曲線。plot函數(shù)的基本調(diào)用格式:plot(x,y)其中x和y為長(zhǎng)度相同的向量,分別用來(lái)存儲(chǔ)x坐標(biāo)和y坐標(biāo)數(shù)據(jù)。例3.2.1 在0x2p區(qū)間內(nèi),繪制曲線 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假如你的帳戶(hù)中有一筆10年的$1000存款,年利率為r,那么10年后你的錢(qián)數(shù)與利率的關(guān)系是,畫(huà)出該函數(shù)的圖像。在

39、MATLAB中執(zhí)行下列命令:>> r=0:0.01:0.1;>> y=1000*(1+r).10;>> plot(r,y)程序執(zhí)行后,在圖形窗口中產(chǎn)生注:plot函數(shù)最簡(jiǎn)單的調(diào)用格式是只包含一個(gè)輸入?yún)?shù):plot(x)在這種情況下,當(dāng)x是實(shí)向量時(shí),以該向量元素的下標(biāo)為橫坐標(biāo),元素值為縱坐標(biāo)畫(huà)出一條連續(xù)曲線,這實(shí)際上是繪制折線圖。2、繪制多根二維曲線(1)plot函數(shù)的輸入?yún)?shù)是矩陣形式 (i) 當(dāng)x是向量,y是有一維與x同維的矩陣時(shí),則繪制出多根不同顏色的曲線。曲線條數(shù)等于y矩陣的另一維數(shù),x被作為這些曲線共同的橫坐標(biāo)。 (ii) 當(dāng)x,y是同維矩陣時(shí),則以

40、x,y對(duì)應(yīng)列元素為橫、縱坐標(biāo)分別繪制曲線,曲線條數(shù)等于矩陣的列數(shù)。 (iii) 對(duì)只包含一個(gè)輸入?yún)?shù)的plot函數(shù),當(dāng)輸入?yún)?shù)是實(shí)矩陣時(shí),則按列繪制每列元素值相對(duì)其下標(biāo)的曲線,曲線條數(shù)等于輸入?yún)?shù)矩陣的列數(shù)。當(dāng)輸入?yún)?shù)是復(fù)數(shù)矩陣時(shí),則按列分別以元素實(shí)部和虛部為橫、縱坐標(biāo)繪制多條曲線。例3.2.3畫(huà)出S&P從2008年1月到2008年10.20開(kāi)盤(pán)價(jià)、最高價(jià)、最低價(jià)和收盤(pán)價(jià)的時(shí)間圖。 (a)橫坐標(biāo)是觀測(cè)個(gè)數(shù),縱坐標(biāo)是價(jià)格,將四種價(jià)格畫(huà)在一幅圖中(b)橫坐標(biāo)是時(shí)間,縱坐標(biāo)是價(jià)格,將四種價(jià)格畫(huà)在一幅圖中(c)橫坐標(biāo)是時(shí)間,縱坐標(biāo)是價(jià)格,畫(huà)出其收盤(pán)價(jià)的時(shí)間圖解: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)含多個(gè)輸入?yún)?shù)的plot函數(shù)調(diào)用格式為:plot(x1,y1,x2,y2,xn,yn)(i) 當(dāng)輸入?yún)?shù)都為向量時(shí),x1和y1,x2和y2,xn和yn分別組成一組向量對(duì),每一組向量對(duì)的長(zhǎng)度可以不同。每一向量對(duì)可以繪制出一條曲線,這樣可以在同一坐標(biāo)內(nèi)繪制出多條曲線。 (ii) 當(dāng)輸入?yún)?shù)

42、有矩陣形式時(shí),配對(duì)的x,y按對(duì)應(yīng)列元素為橫、縱坐標(biāo)分別繪制曲線,曲線條數(shù)等于矩陣的列數(shù)。例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具有兩個(gè)縱坐標(biāo)標(biāo)度的圖形在MATLAB中,如果需要繪制出具有不同縱坐標(biāo)標(biāo)度的兩個(gè)圖形,可以使用plotyy繪圖函數(shù)。調(diào)用格式為:plotyy(x1,y1,x2,

43、y2)其中x1,y1對(duì)應(yīng)一條曲線,x2,y2對(duì)應(yīng)另一條曲線。橫坐標(biāo)的標(biāo)度相同,縱坐標(biāo)有兩個(gè),左縱坐標(biāo)用于x1,y1數(shù)據(jù)對(duì),右縱坐標(biāo)用于x2,y2數(shù)據(jù)對(duì)。例3.2.5 用不同標(biāo)度在同一坐標(biāo)內(nèi)繪制曲線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 在同一幅圖中畫(huà)出S&P從2008年1月到2008年10.20收盤(pán)價(jià)及其對(duì)數(shù)收益率的時(shí)間圖。 解:在前面例子的

44、基礎(chǔ)上pause;cre=price2ret(sp08(:,5);rdate=mydate(2:end);plotyy(mydate,sp08(:,5),rdate,cre)4圖形保持hold on/off命令控制是保持原有圖形還是刷新原有圖形,不帶參數(shù)的hold命令在兩種狀態(tài)之間進(jìn)行切換。例3.2.7 采用圖形保持,在同一坐標(biāo)內(nèi)繪制曲線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、設(shè)置曲線樣式MATLAB提供了一些繪圖選項(xiàng),用于確定所繪曲線的線型、顏色和數(shù)據(jù)點(diǎn)標(biāo)記符號(hào),它們可以組合使用。例如,“b-.”表示藍(lán)色點(diǎn)劃線,“y:d”表示黃色虛線并用菱形符標(biāo)記數(shù)據(jù)點(diǎn)。當(dāng)選項(xiàng)省略時(shí),MATLAB規(guī)定,線型一律用實(shí)線,顏色將根據(jù)曲線的先后順序依次。要設(shè)置曲線樣式可以在plot函數(shù)中加繪圖選項(xiàng),其調(diào)用格式為:plot(x1,y1,選項(xiàng)1,x2,y2,選項(xiàng)2,xn,yn,選項(xiàng)n)Maltab允許用戶(hù)對(duì)線條定義如下的特性:(1)線型定義符-:-.線型實(shí)線(缺省值)劃線點(diǎn)線點(diǎn)劃線(2)線條寬度指定線條的寬度,取值為整數(shù)(單位為像素點(diǎn))

46、(3)顏色定義符R(red)G(green)b(blue)c(cyan)顏色紅色綠色蘭色青色定義符M(magenta)y(yellow)k(black)w(white)顏色品紅黃色黑色白色(4)標(biāo)記類(lèi)型定義符+o(字母)*.x標(biāo)記類(lèi)型加號(hào)小圓圈星號(hào)實(shí)點(diǎn)交叉號(hào)定義符dv><標(biāo)記類(lèi)型棱形向上三角形向下三角形向右三角形向左三角形定義符shP標(biāo)記類(lèi)型正方形正六角星正五角星(5)標(biāo)記大小指定標(biāo)記符號(hào)的大小尺寸,取值為整數(shù)(單位為像素)(6)標(biāo)記面填充顏色指定用于填充標(biāo)記符面的顏色。取值在上表。(7)標(biāo)記周邊顏色指定標(biāo)記符顏色或者是標(biāo)記符(小圓圈、正方形、棱形、正五角星、正六角星和四個(gè)方向的三

47、角形)周邊線條的顏色。取值在上表。在所有的能產(chǎn)生線條的命令中,參數(shù)LineSepc可以定義線條的下面三個(gè)屬性:線型、標(biāo)記符號(hào)、顏色進(jìn)行設(shè)置。對(duì)線條的上述屬性的定義可用字符串來(lái)定義,如:plot(x,y,'-.or')結(jié)合x(chóng)和y,畫(huà)出點(diǎn)劃線(-.),在數(shù)據(jù)點(diǎn)(x,y)處畫(huà)出小圓圈(o),線和標(biāo)記都用紅色畫(huà)出。其中定義符(即字符串)中的字母、符號(hào)可任意組合。若沒(méi)有定義符,則畫(huà)圖命令plot自動(dòng)用缺省值進(jìn)行畫(huà)圖。若僅僅指定了標(biāo)記符,而非線型,則plot只在數(shù)據(jù)點(diǎn)畫(huà)出標(biāo)記符。如:plot(x,y,d)例3.2.8 采用不同顏色、不同線形以及不同標(biāo)記在同一圖形中畫(huà)出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圖形結(jié)果為圖3.2.1例3.2.9 >>plot(t,sin(2*t),'-mo', 'LineWidth',2

49、,'MarkerEdgeColor','k', 'MarkerFaceColor',.49 1 .63,'MarkerSize',12)圖形結(jié)果為圖3.2.2。圖3.2.1 二維曲線圖 圖3.2.2 二維圖形的繪制例3.2.10 畫(huà)出S&P從2008年1月到2008年10.20最高價(jià)、和最低價(jià)的時(shí)間圖,不同價(jià)格以不同的線形、顏色和標(biāo)記畫(huà)出。在原來(lái)程序的基礎(chǔ)上plot(mydate,sp08(:,3),'y-*',mydate,sp08(:,3),'m-.')6、圖形標(biāo)注與坐標(biāo)控制(1)圖形標(biāo)

50、注有關(guān)圖形標(biāo)注函數(shù)的調(diào)用格式為:title(圖形名稱(chēng))xlabel(x軸說(shuō)明)ylabel(y軸說(shuō)明)text(x,y,圖形說(shuō)明)legend(圖例1,圖例2,)函數(shù)中的說(shuō)明文字,除使用標(biāo)準(zhǔn)的ASCII字符外,還可使用LaTeX格式的控制字符,這樣就可以在圖形上添加希臘字母、數(shù)學(xué)符號(hào)及公式等內(nèi)容。例如,text(0.3,0.5,sin(omegat+beta)將得到標(biāo)注效果sin(t+)。例3.2.11 例:用不同顏色及線形畫(huà)出HSI指數(shù)從1990年1月2日到1992年12月31日的收盤(pán)價(jià)和對(duì)數(shù)收益率的1萬(wàn)倍的時(shí)間圖。圖形名稱(chēng):HIS收盤(pán)價(jià)和對(duì)數(shù)收益率X軸標(biāo)注:觀測(cè)Y軸標(biāo)注:HIS收盤(pán)價(jià)和對(duì)數(shù)

51、收益率的1萬(wàn)倍圖形說(shuō)明:時(shí)間是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)坐標(biāo)控制axis函數(shù)的調(diào)用格式為:axis(xmin xmax ymin ymax zmin zmax)axis函數(shù)功能豐富,常用的格

54、式還有:axis equal:縱、橫坐標(biāo)軸采用等長(zhǎng)刻度。axis square:產(chǎn)生正方形坐標(biāo)系(缺省為矩形)。axis auto:使用缺省設(shè)置。axis off:取消坐標(biāo)軸。axis on:顯示坐標(biāo)軸。給坐標(biāo)加網(wǎng)格線用grid命令來(lái)控制。grid on/off命令控制是畫(huà)還是不畫(huà)網(wǎng)格線,不帶參數(shù)的grid命令在兩種狀態(tài)之間進(jìn)行切換。給坐標(biāo)加邊框用box命令來(lái)控制。box on/off命令控制是加還是不加邊框線,不帶參數(shù)的box命令在兩種狀態(tài)之間進(jìn)行切換。例3.2.12 在同一坐標(biāo)中,可以繪制3個(gè)同心圓,并加坐標(biāo)控制。程序如下:t=0:0.01:2*pi;x=exp(i*t);y=x;2*x;

55、3*x'plot(y)grid on; %加網(wǎng)格線box on; %加坐標(biāo)邊框axis equal %坐標(biāo)軸采用等刻度7、 圖形的可視化編輯MATLAB 6.5版本在圖形窗口中提供了可視化的圖形編輯工具,利用圖形窗口菜單欄或工具欄中的有關(guān)命令可以完成對(duì)窗口中各種圖形對(duì)象的編輯處理。在圖形窗口上有一個(gè)菜單欄和工具欄。菜單欄包含F(xiàn)ile、Edit、View、Insert、Tools、Window和Help共7個(gè)菜單項(xiàng),工具欄包含11個(gè)命令按鈕??梢岳每梢暬膱D形編輯工具處理前面的例子8、圖形窗口的分割subplot函數(shù)的調(diào)用格式為:subplot(m,n,p)該函數(shù)將當(dāng)前圖形窗口分成m&

56、#215;n個(gè)繪圖區(qū),即每行n個(gè),共m行,區(qū)號(hào)按行優(yōu)先編號(hào),且選定第p個(gè)區(qū)為當(dāng)前活動(dòng)區(qū)。在每一個(gè)繪圖區(qū)允許以不同的坐標(biāo)系單獨(dú)繪制圖形。例3.2.13 Call多頭:L=-Cer(T-t)+max(ST-X, 0)Put多頭: L=-Per(T-t)+max(X-ST, 0)假設(shè)投資者1和投資者2在3月份分別購(gòu)買(mǎi)了一份12月份到期的歐式看漲期權(quán)和看跌期權(quán),執(zhí)行價(jià)格都是X=100元,看漲期權(quán)價(jià)格C=8元,看跌期權(quán)價(jià)格為6元,無(wú)風(fēng)險(xiǎn)利率為3%,試給出該兩位投資者及其交易對(duì)手的利潤(rùn)函數(shù)并用四幅子圖畫(huà)出利潤(rùn)函數(shù)圖。解: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(看漲期權(quán)多頭的利潤(rùn)');subplot(2,2,2)plot(ST,scl);grid on;title(看漲期權(quán)空頭的利潤(rùn)');subplot(2,2,3)plot(ST,bpl);grid on;title(看跌期權(quán)多頭的利潤(rùn)');subplot(2,2,4)plot(ST,spl);grid

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論