- 計算機仿真技術(shù)與CAD
- 李國勇主編
- 5035字
- 2019-01-09 15:00:26
1.2 MATLAB的基本操作
1.語言結(jié)構(gòu)
MATLAB命令窗口就是MATLAB語言的工作空間,因為MATLAB的各種功能的執(zhí)行必須在此窗口下才能實現(xiàn)。所謂窗口命令,就是在上述命令窗口中輸入的MATLAB語句,并直接執(zhí)行它們完成相應(yīng)的運算、繪圖等。
表1-1 MATLAB中的算術(shù)運算符

MATLAB語句的一般形式為
變量名=表達(dá)式
其中,等號右邊的表達(dá)式可由操作符或其他字符、函數(shù)和變量名組成,它可以是MATLAB允許的數(shù)學(xué)或矩陣運算,也可以包含MATLAB下的函數(shù)調(diào)用;等號左邊的變量名為MATLAB語句右邊表達(dá)式的返回值語句所賦值的變量的名字。在調(diào)用函數(shù)時,MATLAB允許一次返回多個結(jié)果,這時等號左邊的變量名需用[ ]括起來,且各個變量名之間用逗號分隔開;等號和左邊的變量名可以缺省,此時返回值自動賦給ans。
MATLAB中使用的算術(shù)運算符如表1-1所示。對于矩陣來說,這里左除和右除表示兩種不同的除數(shù)矩陣和被除數(shù)矩陣的關(guān)系。對于標(biāo)量,兩種除法運算的結(jié)果相同,如1/4和4\1有相同的值0.25。常用的十進(jìn)制數(shù)符號如小數(shù)點、負(fù)號等,在MATLAB中也可以同樣使用,表示10的冪次要用符號e或E,如3,-99,0.0001,1.6e-20,6.2e23。
在MATLAB中變量名必須以字母開頭,之后可以是任意字母、數(shù)字或者下劃線(不能超過19個字符),但變量中不能含有標(biāo)點符號。變量名區(qū)分字母的大小寫,同一名字的大寫與小寫被視為兩個不同的變量。一般來說,在MATLAB下變量名可以為任意字符串,但MATLAB保留了一些特殊的字符串如表1-2所示。
表1-2 MATLAB中的特殊變量

MATLAB命令語句能即時執(zhí)行,它不是輸入完全部MATLAB命令語句并經(jīng)過編譯、連接形成可執(zhí)行文件后才開始執(zhí)行,而是每輸入完一條命令,MATLAB就立即對其處理,并得出中間結(jié)果,完成了MATLAB所有命令語句的輸入,也就完成了它的執(zhí)行,直接便可得到最終結(jié)果。從這一點來說,MATLAB清晰地體現(xiàn)了類似“演算紙”的功能。例如,在MATLAB的命令窗口中直接輸入以下命令:
>>a=5; >>b=6; >>c=a*b, >>d=c+2
其中第3、4條命令的執(zhí)行結(jié)果分別顯示如下
c= 30 d= 32
注意,以上各命令行中的“>>”標(biāo)志為MATLAB的命令提示符,其后的內(nèi)容才是用戶輸入的信息。每行命令輸入完后,只有當(dāng)用回車鍵進(jìn)行確定后,命令才會被執(zhí)行。以下命令同。
MATLAB語句既可由分號結(jié)束,也可由逗號或換行號結(jié)束,但它們的含義是不同的。如果用分號“;”結(jié)束,則說明除了這一條命令外還有下一條命令等待輸入,MATLAB這時將不立即顯示運行的中間結(jié)果,而等待下一條命令的輸入,如上面例子的前兩條命令;如果以逗號“,”或回車結(jié)束,則將把左邊返回的內(nèi)容全部顯示出來,如上面例子的后兩條命令。當(dāng)然在任何時候也可輸入相應(yīng)的變量名來查看其內(nèi)容。例如:
>>a
結(jié)果顯示:
a= 5
在MATLAB中,幾條語句也可出現(xiàn)在同一行中,只要用分號或逗號將它們分割開來。例如:
>>a=5;b=6;c=a*b,d=c+2
這時可得與上面相同的結(jié)果。
MATLAB工作空間中的變量在退出MATLAB時會丟失。如果在退出MATLAB前想將工作空間中的變量保存到文件中,則可以調(diào)用save命令來完成,該命令的調(diào)用格式為
save文件名變量列表其他選項
注意,這一命令中不能使用逗號,不同的元素之間只能用空格來分隔。例如,想把工作空間中的a,b,c變量存到mydat.mat文件中去,則可用下面的命令來實現(xiàn):
>>save mydat a b c
這里將自動地使用文件擴(kuò)展名“.mat”。如果想將整個工作空間中所有的變量全部存入該文件,則應(yīng)采用下面的命令:
>>save mydat
當(dāng)然這里的mydat也可省略,這時將工作空間中的所有變量自動地存入到文件mat-lab.mat中了。應(yīng)該指出的是,這樣存儲的文件均是按照二進(jìn)制數(shù)的形式進(jìn)行的,所以得出的文件往往是不可讀的。如果想按照ASCII碼的格式來存儲數(shù)據(jù),則可以在命令后面加上一個控制參數(shù):-ascii,該選項將變量以單精度的ASCII碼形式存入文件中去;如果想獲得高精度的數(shù)據(jù),則可使用控制參數(shù):-ascii -double。
MATLAB提供的load命令可以從文件中把變量調(diào)出并重新裝入到MATLAB的工作空間中去,該函數(shù)的調(diào)用格式與save命令相同。
當(dāng)然工作空間中變量的保存和調(diào)出也可利用菜單項中的File→Save Workspace As...和File→Open命令來完成。
如果想查看目前的工作空間中都有哪些變量名,則可以使用who命令來完成。例如,當(dāng)MATLAB的工作空間中有a,b,c,d四個變量名時,使用who命令將得出如下的結(jié)果:
>>who your variable are: a b c d
想進(jìn)一步了解這些變量的具體細(xì)節(jié),則可以使用whos命令來查看。
了解了當(dāng)前工作空間中的現(xiàn)有變量名之后,則可以使用clear命令來刪除其中一些不再使用的變量名,這樣可使得整個工作空間更簡潔,節(jié)省一部分內(nèi)存。例如,想刪除工作空間中的a,b兩個變量,則可以使用下面的命令:
>>clear a b
如果想刪除整個工作空間中所有的變量,則可以使用以下命令:
>>clear
在MATLAB命令窗口中,利用上下方向鍵可以回調(diào)已輸入的命令,向上和向下方向鍵“↑”和“↓”分別用于回調(diào)上一行和下一行命令?;卣{(diào)后的命令也可進(jìn)行編輯等操作。
但僅靠一條一條地輸入語句,MATLAB難以實現(xiàn)復(fù)雜功能,為了實現(xiàn)諸如循環(huán)、條件、分支等功能,MATLAB利用了M文件,M文件由一系列的MATLAB語句組成。
MATLAB實際上可以認(rèn)為是一種解釋性語言,用戶可以在MATLAB工作環(huán)境下一條一條地鍵入命令,也可以直接鍵入用MATLAB語言編寫的M文件名,或?qū)⑺鼈兘Y(jié)合起來使用。這樣MATLAB軟件對此命令或M文件中各條命令進(jìn)行翻譯,然后在MATLAB環(huán)境下對它進(jìn)行處理,最后返回運算結(jié)果。所以說MATLAB語言的結(jié)構(gòu)可用下式進(jìn)行描述:
MATLAB語言=窗口命令+M文件
2.磁盤文件
因為MATLAB本身可以被認(rèn)為是一種高效的語言,所以用它可編寫出具有特殊意義的磁盤文件來。這些磁盤文件由一系列的MATLAB語句組成,它既可能是由一系列窗口命令語句構(gòu)成的文本文件(簡稱為MATLAB的程序),又可以是由各種控制語句和說明語句構(gòu)成的函數(shù)文件(簡稱為MATLAB的函數(shù))。由于它們都是由ASCII碼構(gòu)成的,其擴(kuò)展名均為“.m”,故統(tǒng)稱為M文件。
由于M文件具有普通的文本格式,因而可以用任何編輯器建立和編輯。但一般最常用、而且最為方便的是使用MATLAB自帶的編輯器,即利用MATLAB命令窗口中的菜單命令File→New→M-File或File→Open打開的M文件編輯窗口對M文件進(jìn)行建立和編輯。MATLAB為了進(jìn)一步方便用戶對M文件的建立和編輯,在窗口中也設(shè)置了快捷工具“”和“
”。
(1)文本文件
文本文件由一系列的MATLAB語句組成,它類似于DOS下的批處理文件,在MATLAB的提示符下直接鍵入文本文件名,回車后便可自動執(zhí)行文件中的一系列命令,直至給出最終結(jié)果。文本文件在工作空間中運算的變量為全局變量。
【例1-1】 利用MATLAB的文本文件,求函數(shù)

在x1 =-2,x2 =3,x3 =1時的值。
解 ①首先在MATLAB的命令窗口中,利用菜單命令File→New→M-File,打開M文件編輯器,然后在編輯器中根據(jù)例題中所給函數(shù)編寫以下文本文件,并以ex1_1_1為文件名進(jìn)行保存(后綴.m自動追加)。
%ex1_1_1.m x1=-2;x2=3;x3=1; y1=3*x1.^2+x2+x3 y2=3*x1.^2-x2-x3
其中,帶%的語句為說明語句,不被MATLAB所執(zhí)行,它可以在命令窗口中利用help ex1_1_1命令來顯示%后的內(nèi)容。
②當(dāng)以上文本文件ex1_1_1.m建立后,在MATLAB命令窗口中輸入
>>ex1_1_1
回車后顯示:
y1= 16 y2= 8
由于文本文件中的變量為全局變量,故以上變量x1,x2,x3的值,也可在文本文件外先給定,此時的文本文件為
%ex1_1_2.m y1=3*x1.^2+x2+x3 y2=3*x1.^2-x2-x3
當(dāng)以上文本文件ex1_1_2.m建立后,利用以下命令,同樣可以得到以上結(jié)果。
>>x1=-2;x2=3;x3=1;ex1_1_2
以上兩種方式下,文本文件中變量的值都被保存下來,這與下面的函數(shù)文件是不同的。
(2)函數(shù)文件
函數(shù)文件的功能是建立一個函數(shù),且這個函數(shù)可以同MATLAB的庫函數(shù)一樣使用,它與文本文件不同,在一般情況下不能單獨鍵入函數(shù)文件的文件名來運行一個函數(shù)文件,它必須由其他語句來調(diào)用,函數(shù)文件允許有多個輸入?yún)?shù)和多個輸出參數(shù)值。其基本格式如下:
function [f1,f2,f3,…] =fun(x,y,z,…) 注釋說明語句 函數(shù)體語句
其中,x,y,z,…是形式輸入?yún)?shù);而f1,f2,f3,…是返回的形式輸出參數(shù)值;fun是函數(shù)名。
實際上,函數(shù)名一般就是這個函數(shù)文件的磁盤文件名,注釋語句段的內(nèi)容同樣可用help命令顯示出來。
調(diào)用一個函數(shù)文件只需直接使用與這個函數(shù)一致的格式
[y1,y2,y3,…] =fun(a,b,c,…)
其中,a,b,c,…是相應(yīng)的實際輸入?yún)?shù)的值;而y1,y2,y3,…是相應(yīng)的實際輸出參數(shù)的值。
【例1-2】 利用MATLAB的函數(shù)文件,求函數(shù)

在x1 =-2,x2 =3,x3 =1時的值。
解 ①由于函數(shù)文件的建立與文本文件完全一樣,故與例1-1一樣首先根據(jù)例題中所給函數(shù)在MATLAB的M文件編輯器下,建立以下函數(shù)文件ex1_2.m。
%ex1_2.m function [b1,b2] =ex1_2(a1,a2,a3) b1=3*a1.^2+a2+a3; b2=3*a1.^2-a2-a3;
②當(dāng)以上函數(shù)文件ex1_2.m建立后,在MATLAB命令窗口中輸入命令:
>>x1=-2;x2=3;x3=1;[y1,y2] =ex1_2(x1,x2,x3)
結(jié)果顯示:
y1= 16 y2= 8
函數(shù)文件中定義的變量為局部變量,也就是說它只在函數(shù)內(nèi)有效。即在該函數(shù)返回后,這些變量會自動在MATLAB工作空間中清除掉,這與文本文件是不同的,但可通過命令
global<變量>
來定義一個全局變量。
函數(shù)文件與文本文件另一個區(qū)別在于其第一行是由function開頭的,且有函數(shù)名和輸入形式參數(shù)與輸出形式參數(shù),沒有這一行的磁盤文件就是文本文件。
3.庫函數(shù)和數(shù)值顯示格式
(1)庫函數(shù)
為了方便用戶,MATLAB提供了豐富的庫函數(shù),庫函數(shù)是根據(jù)系統(tǒng)已經(jīng)編制好了的,提供用戶直接使用的函數(shù),MATLAB中常用的基本數(shù)學(xué)函數(shù),如表1-3所示。
表1-3 MATLAB的基本函數(shù)

除了基本函數(shù)外,不同版本的MATLAB還增加了具有不同功能的庫函數(shù),也稱工具箱。例如控制系統(tǒng)工具箱、模糊邏輯工具箱、神經(jīng)網(wǎng)絡(luò)工具箱和模型預(yù)測控制工具箱等。
對于各種函數(shù)的功能和調(diào)用方法可使用MATLAB的聯(lián)機幫肋h(yuǎn)elp來查詢,例如:
>>help sin %得到正弦函數(shù)的使用信息; >>help [ %顯示如何使用方括號。
(2)數(shù)值顯示格式
盡管MATLAB計算中所有的量為雙字長浮點數(shù),但為了方便顯示應(yīng)遵循下面的規(guī)則。
在默認(rèn)情況下,當(dāng)結(jié)果為整數(shù)時,MATLAB將它作為整數(shù)顯示;當(dāng)結(jié)果為實數(shù)時,MATLAB以小數(shù)點后4位的精度近似顯示;如果結(jié)果中的有效數(shù)字超出了這一范圍,MATLAB以科學(xué)計數(shù)法顯示結(jié)果。MATLAB可以使用format命令來改變顯示格式,其調(diào)用格式為
format控制參數(shù)
其中,控制參數(shù)決定顯示格式,控制參數(shù)如表1-4表示。
表1-4 format命令的控制參數(shù)

4.基本輸入輸出函數(shù)
MATLAB的輸入與輸出函數(shù)包括命令窗口輸入與輸出及圖形界面的輸入與輸出。除上面提到的用于機器間交換數(shù)據(jù)的函數(shù)語句save和load外,MATLAB還允許計算機和用戶之間進(jìn)行數(shù)據(jù)交換,允許對文件進(jìn)行讀寫操作。如果用戶想在計算的過程中給計算機輸入一個參數(shù),則可以使用input()函數(shù)來進(jìn)行,該函數(shù)的調(diào)用格式為
變量名=input(提示信息,選項)
這里提示信息可以為一個字符串顯示,它用來提示用戶輸入什么樣的數(shù)據(jù),input()函數(shù)的返
回值賦給等號左邊的變量名。
例如,用戶想輸入x的值,則可以采用下面的命令來完成:
>>x=input(′Enter matrix x=>′)
執(zhí)行該命令時首先給出Enter matrix x=>提示信息,然后等待用戶從鍵盤按MATLAB格式輸入值,并把此值賦給x。
如果在input()函數(shù)調(diào)用時采用了′s′選項,則允許用戶輸入一個字符串,此時需用單引號將所輸字符串括起來。
MATLAB提供的命令窗口輸出函數(shù)主要有disp()函數(shù),其調(diào)用格式為
disp(變量名)
其中,變量名既可以是字符串,也可以是變量矩陣。例如
>>s=′Hello World′
結(jié)果顯示:
s= Hello World >>disp(s)
結(jié)果顯示:
Hello World
可見用disp()函數(shù)顯示的方式,和前面有所不同,它將不顯示變量名字而其格式更緊密,且不留任何沒有意義的空行。
MATLAB提供了較實用的字符串處理及轉(zhuǎn)換的函數(shù),例如int2str()函數(shù)就可以方便地將一個整形數(shù)據(jù)轉(zhuǎn)換成字符串形式,該函數(shù)的調(diào)用格式為
cstr=int2str(n)
其中,n為一個整數(shù),而該函數(shù)將返回一個相關(guān)的字符串cstr。
例如num的數(shù)值為num=15,而在輸出中還想給出其他說明性附加信息,則可利用語句:
>>num=15;disp([′The value of num is′,int2str(num),′! ok′])
結(jié)果顯示:
The value of num is 15 ! ok
與int2str()函數(shù)的功能及調(diào)用方式相似,MATLAB還提供了num2str()函數(shù),可以將給出的實型數(shù)據(jù)轉(zhuǎn)換成字符串的表達(dá)式,最終也可以將該字符串輸出。例如給繪制的圖形賦以數(shù)字的標(biāo)題時可采用命令:
>>c=(70-32)/1.8;title([′Room temperature is′,num2str(c),′degrees C′])
則會在當(dāng)前圖形上加上題頭標(biāo)注:
Room temperature is 21.1111 degrees C
5.外部程序調(diào)用
MATLAB允許在其命令窗口中調(diào)用可執(zhí)行文件,其調(diào)用方法是在MATLAB提示符下鍵入驚嘆號“!”,后面直接跟該可執(zhí)行文件即可。MATLAB也允許采用這樣的方式來直接使用DOS命令,如磁盤復(fù)制命令copy可以由!copy來直接使用,而文件列表命令dir可以由!dir來調(diào)用。事實上,為了給用戶提供更大的方便,MATLAB已經(jīng)把一些常用的DOS命令做成了相應(yīng)的MATLAB命令,表1-5列出了MATLAB中提供的一些文件管理命令。
表1-5 文件管理命令

當(dāng)然由C或FORTRAN編譯產(chǎn)生的可執(zhí)行文件可采用上述方法直接調(diào)用,但此時MATLAB和該程序之間的數(shù)據(jù)傳遞是由讀寫文件的方式來完成的,這種調(diào)用格式雖然直觀,但其缺點是速度相當(dāng)慢;此外由于調(diào)用方式的原因,使用起來不是特別規(guī)范。故MAT-LAB還提供了對C或FORTRAN語言編寫的程序的另一種調(diào)試方式,它是通過MATLAB提供的MEX功能來實現(xiàn)的。它由所調(diào)用的C或FORTRAN源碼編譯、連接而成MEX文件或EXE文件,這種可執(zhí)行文件的速度較快,因為它和MATLAB之間的數(shù)據(jù)傳遞是通過指針來完成的,而不涉及對文件的讀寫,且其調(diào)用格式和MATLAB本身的函數(shù)調(diào)用格式完全一致,就如同這些子程序是MATLAB本身的程序一樣。
- 水聲傳感器網(wǎng)絡(luò)拓?fù)?/a>
- 虛擬現(xiàn)實的10堂課
- 基于MATLAB/Simulink系統(tǒng)仿真權(quán)威指南
- 一本書讀懂虛擬現(xiàn)實
- 計算機仿真技術(shù)與CAD
- 高等學(xué)校計算機科學(xué)與技術(shù)教材·計算機控制:基礎(chǔ)、技術(shù)、工具、實例
- 現(xiàn)代運動控制技術(shù)及其應(yīng)用
- 基于仿真的結(jié)構(gòu)優(yōu)化方法
- MATLAB Simulink 2020系統(tǒng)仿真從入門到精通
- VR虛擬現(xiàn)實模型設(shè)計與制作(基礎(chǔ)篇)
- VMware vSphere 6.0虛擬化架構(gòu)實戰(zhàn)指南
- 苦旅尋真:求索中國仿真解困之道
- 計算機仿真技術(shù)基礎(chǔ)(第2版)
- 基于Proteus的51系列單片機設(shè)計與仿真
- VR虛擬現(xiàn)實模型設(shè)計與制作(進(jìn)階篇)