版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第2章MATLAB的基本語法 2.1 變量及其賦值 2.2 矩陣的初等運(yùn)算 2.3 元素群運(yùn)算 2.4 邏輯判斷及流程控制 2.5 基本繪圖方法 2.6 M文件及程序調(diào)試 2.1 變量及其賦值 2.1.1 標(biāo)識(shí)符與數(shù)標(biāo)識(shí)符是標(biāo)志變量名、 常量名、 函數(shù)名和文件名的字符串的總稱。在MATLAB中,變量和常量的標(biāo)識(shí)符最長允許63個(gè)字符; 函數(shù)和文件名則通常不超過八個(gè)字符, 如果MATLAB 安裝在能管理長文件名的操作系統(tǒng)中,那么, 函數(shù)名和文件名也可以取長些。用于標(biāo)識(shí)符的合法字符包括全部的英文字母(大小寫共52個(gè))、 阿拉伯?dāng)?shù)字和下劃線等符號(hào)。標(biāo)識(shí)符中第一個(gè)字符必須是英文字母。MATLAB對(duì)大小寫
2、敏感(Case Sensitive),即它把A和a看做兩個(gè)不同的字符。MATLAB內(nèi)部只有一種數(shù)據(jù)格式,那就是雙精度(即64位)二進(jìn)制,對(duì)應(yīng)于十進(jìn)制16位有效數(shù)和308次冪。MATLAB運(yùn)算和存儲(chǔ)時(shí)都用雙精度格式,這對(duì)絕大多數(shù)工程計(jì)算足夠了,許多情況下過于“浪費(fèi)”。在一些其他的算法語言中設(shè)有多種數(shù)據(jù)格式,如字符型(8位)、 整數(shù)型(16位)、 單精度型(32位)等,這樣可節(jié)省內(nèi)存和提高速度,但增加了編程的復(fù)雜性。MATLAB把簡化編程作為其主要目標(biāo),省去了多種數(shù)據(jù)格式,但也在運(yùn)算速度和內(nèi)存消耗方面付出了代價(jià)。不過現(xiàn)在計(jì)算機(jī)的時(shí)鐘頻率和內(nèi)存容量都以幾何級(jí)數(shù)迅速增長,MATLAB付出的代價(jià)很容易得
3、到彌補(bǔ)。雖然它的數(shù)據(jù)格式只有一種,但為了人機(jī)交互的友好方便,其輸出顯示格式有八種,這在上章中已指出。2.1.2 矩陣及其元素的賦值 賦值就是把數(shù)賦予代表常量或變量的標(biāo)識(shí)符。MATLAB中的變量或常量都代表矩陣,標(biāo)量應(yīng)看做11元的矩陣。賦值語句的一般形式為變量表達(dá)式(或數(shù))例如: 輸入語句a1 2 3; 4 5 6; 7 8 9則顯示結(jié)果為a1 2 3 4 5 6 7 8 9輸入x=-1.3 sqrt(3) (1+2+3)/5*4結(jié)果為x=-1.3000 1.7321 4.8000可以看出,矩陣的值放在方括號(hào)中,同一行中各元素之間以逗號(hào)或空格分開,不同的行則以分號(hào)隔開,語句的結(jié)尾可用“回車”或逗
4、號(hào),此時(shí)會(huì)立即顯示運(yùn)算結(jié)果。如果不希望顯示結(jié)果,就以分號(hào)結(jié)尾,此時(shí)運(yùn)算仍然執(zhí)行,只是不作顯示。變量的元素用圓括號(hào)中的數(shù)字(也稱為下標(biāo))來注明,一維矩陣(也稱數(shù)組或向量) 中的元素用一個(gè)下標(biāo)表示; 兩維的矩陣可有兩個(gè)下標(biāo)數(shù),以逗號(hào)分開; 三維或更高維的矩陣,可有三個(gè)或更多下標(biāo)。用戶可以單獨(dú)給元素賦值,如x(2)=1.7321,a(2,3)=6等。如果賦值元素的下標(biāo)超出了原來矩陣的大小,矩陣的行列會(huì)自動(dòng)擴(kuò)展。例如輸入x(5)=abs(x(1)結(jié)果為x=-1.3000 1.7321 4.8000 0 1.3000又如鍵入a(4,3)=6.5得 a=1.0000 2.0000 3.0000 4.000
5、0 5.0000 6.0000 7.0000 8.0000 9.0000 0 0 6.5000可見,跳空的元素x(4),a(4,1),a(4,2)被自動(dòng)地賦值0。這種自動(dòng)擴(kuò)展維數(shù)的功能只適用于賦值語句。在其他語句中若出現(xiàn)超維調(diào)用的情況,MATLAB將給出出錯(cuò)提示。給全行賦值,可用“ : ”。例如,給a的第5行賦值,可鍵入 a(5,: )=5,4,3得 a=1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 0 0 6.5000 5.0000 4.0000 3.0000把a(bǔ)的第2、 4行及1、 3列交點(diǎn)上的元素取出,構(gòu)成一
6、個(gè)新矩陣b,可鍵入 b=a(2,4,1,3)得 b=4.0000 6.0000 0 6.5000要抽去a中的2、 4、 5行,可利用空矩陣 的概念。鍵入 a(2,4,5,: )= 得到 a=1 2 3 7 8 9注意,“空矩陣”是指沒有元素的矩陣。對(duì)任何一個(gè)矩陣賦值為 ,就是使它的元素都消失掉。這完全不同于“零矩陣”,后者是元素存在,只是其數(shù)值為零而已??梢钥闯觯站仃囋谑咕仃嚋p縮時(shí)是不可缺少的概念。除“變量表達(dá)式(或數(shù))”的標(biāo)準(zhǔn)形式外,可以不要等式左端而只剩下“表達(dá)式”。這有兩種可能: 該表達(dá)式并不產(chǎn)生數(shù)字解,例如產(chǎn)生圖形或改變系統(tǒng)狀態(tài); 該表達(dá)式產(chǎn)生數(shù)字解,但不需要保存它。此時(shí)MATLAB
7、自動(dòng)給出一個(gè)臨時(shí)變量ans,把右端的結(jié)果暫存在ans中。若再做下一次運(yùn)算又用到ans,則前一次的結(jié)果就被沖銷了。例如鍵入 a/7得到 ans= 0.1429 0.2857 0.4286 1.0000 1.1429 1.28572.1.3 復(fù)數(shù)MATLAB中的每一個(gè)元素都可以是復(fù)數(shù),實(shí)數(shù)是復(fù)數(shù)的特例。復(fù)數(shù)的虛數(shù)部分用i或j表示,這是在MATLAB啟動(dòng)時(shí)就已在內(nèi)部設(shè)定的。例如,鍵入c=3+5.2i得c=3.0000+5.2000i對(duì)復(fù)數(shù)矩陣有兩種賦值方法,既可將其元素逐個(gè)賦予復(fù)數(shù),例如,鍵入z=1+2i,3+4i; 5+6i,7+8i得z= 1.0000+2.0000i 3.0000+4.0000
8、i 5.0000+6.0000i 7.0000+8.0000i也可將其實(shí)部和虛部矩陣分別賦值,如 z=1,3; 5,7+2,4; 6,8*i兩種賦值方法得出同樣的結(jié)果。注意只有數(shù)字和i的乘積式中可省略乘號(hào),在上述矩陣式中若省略乘號(hào)“*”,就會(huì)出錯(cuò)。另外,如果在前面程序中曾經(jīng)給i或j賦過其他值,則i,j已經(jīng)不是虛數(shù)符號(hào),這些虛數(shù)賦值語句都不對(duì)了。此時(shí)應(yīng)鍵入 clear i,j即把原有的i,j清掉,然后再執(zhí)行復(fù)數(shù)賦值語句。MATLAB中所有的運(yùn)算符和函數(shù)都對(duì)復(fù)數(shù)有效。例如鍵入 f=sqrt(1+2i)得 f=1.2720+0.7862i檢驗(yàn) f*fans=1.0000+2.0000i因此,復(fù)數(shù)的表
9、達(dá)式同樣都能作為賦值語句。再來看復(fù)數(shù)矩陣z的轉(zhuǎn)置、 共軛運(yùn)算: 運(yùn)算符“”表示把矩陣作共軛轉(zhuǎn)置,即把它的行列互換,同時(shí)把各元素的虛部反號(hào)。函數(shù)conj則只把各元素的虛部反號(hào),即只取共軛。所以若想求轉(zhuǎn)置而不要共軛,就要用conj和“”結(jié)合起來完成。鍵入w=z,u=conj(z),v=conj(z) %共軛轉(zhuǎn)置,共軛和轉(zhuǎn)置得 w=1.0000-2.0000i 5.0000-6.0000i 3.0000-4.0000i 7.0000-8.0000i u=1.0000-2.0000i 3.0000-4.0000i 5.0000-6.0000i 7.0000-8.0000i v=1.0000+2.000
10、0i 5.0000+6.0000i 3.0000+4.0000i 7.0000+8.0000i2.1.4 變量檢查在調(diào)試程序時(shí),往往需要檢查工作空間中的變量及其維數(shù),可用who或whos命令。鍵入 who得 Your variables are: a c v x1 z ans f w x2 b u x y這些就是我們前面用過的變量,如果還需要知道它們的詳細(xì)特征,可鍵入whos, 結(jié)果為變量名 維數(shù) 元素?cái)?shù) 字節(jié)數(shù) 密度 復(fù)數(shù) a 2 by 3 6 48 Full No ans 2 by 2 4 64 Full Yes b 2 by 2 4 32 Full No c 1 by 1 1 16 Fu
11、ll Yesz 2 by 2 4 64 Full YesGrand total is 40 elements using 496 bytes最后一句英文的意思是以上共 40 個(gè)元素,占496 字節(jié)??梢钥闯?,每個(gè)實(shí)元素占八個(gè)字節(jié),復(fù)元素則占16個(gè)字節(jié)。讀者可自行解釋其原因。MATLAB中實(shí)際上還有幾個(gè)內(nèi)定的變量,在變量檢查時(shí)不作顯示。把它們列于表 2-1中。 這里著重介紹一下Inf和NaN。Inf是無窮大(還有-Inf是無窮小),鍵入1/0就可得到它。NaN是非數(shù)(Not a Number)的縮寫,由0/0、 0*Inf或Inf/Inf而得。在其他語言中遇到上述非法運(yùn)算時(shí),系統(tǒng)就停止運(yùn)算并退出
12、。 而MATLAB卻不停止運(yùn)算,仍給結(jié)果賦于Inf或NaN,并繼續(xù)把程序執(zhí)行完。這有很大的好處, 可以避免因?yàn)橐粋€(gè)數(shù)據(jù)不好而破壞全局。出現(xiàn)Inf或NaN后,對(duì)它們作的任何運(yùn)算,結(jié)果仍為Inf或NaN,這種運(yùn)算規(guī)則稱為IEEE(電工和電子工程師協(xié)會(huì))運(yùn)算規(guī)則,是IEEE的一種標(biāo)準(zhǔn)。2.1.5 基本賦值矩陣為了方便給大量元素賦值,MATLAB提供了一些基本矩陣。表2-1給出了最常用的一些,其用法可從下面的例子中看到。其中魔方矩陣magic(n) 的特點(diǎn)是: 其元素由1到nn的自然數(shù)組成; 每行、 每列及兩對(duì)角線上的元素之和均等于(n3+n)/2。單位矩陣eye(n)是nn元的方陣,其對(duì)角線上的元素
13、為1,其余元素均為0。下例列出了上表中的四種矩陣: 鍵入 f1=ones(3,2),f2=zeros(2,3),f3=magic(3),f4=eye(2)得幺矩陣 f1=1 1 1 1 1 1零矩陣 f2=0 0 0 0 0 0魔方矩陣 f3=8 1 6 3 5 7 4 9 2單位矩陣 f4=1 0 0 1線性分割函數(shù)linspace(a,b,n)在a與b之間均分地產(chǎn)生n個(gè)點(diǎn)值,形成1n元向量。例如, 鍵入 f5=linspace(0,1,5)得 f5= 0 0.2500 0.5000 0.7500 1.0000大矩陣可由若干個(gè)小矩陣組成,但其行列數(shù)必須正確,恰好填滿全部元素。如鍵入 fb1=
14、f1,f3; f4,f2得 fb1=1 1 8 1 6 1 1 3 5 7 1 1 4 9 2 1 0 0 0 0 0 1 0 0 0可再由它與f5組成一個(gè)更大的矩陣,鍵入 fb2=fb1; f5得 fb2=1.0000 1.0000 8.0000 1.0000 6.0000 1.0000 1.0000 3.0000 5.0000 7.0000 1.0000 1.0000 4.0000 9.0000 2.0000 1.0000 0 0 0 0 0 1.0000 0 0 0 0 0.2500 0.5000 0.7500 1.0000可以看出, fb1和fb2顯示的數(shù)據(jù)不同,fb1的元素都是整數(shù),
15、而fb2則都是帶小數(shù)的。其原因是MATLAB要求一個(gè)矩陣中所有元素用同一顯示格式。因?yàn)閒5中的元素含小數(shù),所以所有的元素都得用小數(shù)格式來顯示(0元素除外,它表示真正的0,與無法顯示的小數(shù)值0.0000不同)。為了用同一格式顯示,當(dāng)矩陣中的最大元素小于0.001或其最小元素大于1000時(shí),MATLAB會(huì)把其中小于0.001或大于1000的公因子提出來,如鍵入由兩個(gè)很小的數(shù)組成的矩陣 f=0.000073, 5.33e-6得到 f=1.0e-004* 0.7300 0.0533如果矩陣中出現(xiàn)大小差別很多的元素,則顯示時(shí)將以大元素優(yōu)先,小元素就只能顯示很少的有效位,甚至成為0.0000。這時(shí)不要誤以
16、為它是0,可以用顯示單個(gè)元素的命令來得到它的準(zhǔn)確值,也可改用長格式(format long)來顯示整個(gè)矩陣。2.2 矩陣的初等運(yùn)算2.2.1 矩陣的加減乘法矩陣算術(shù)運(yùn)算的書寫格式與普通算術(shù)運(yùn)算相同,包括加、 減、 乘、 除。也可用括號(hào)來規(guī)定運(yùn)算的優(yōu)先次序,但它的乘法定義與普通數(shù)(標(biāo)量)不同。相應(yīng)地,作為乘法逆運(yùn)算的除法也不同,有左除()和右除( / )兩種符號(hào)。兩矩陣的相加(減)就是其對(duì)應(yīng)元素的相加(減),因此,相加(減)的兩個(gè)矩陣的階數(shù)必須相同,且它們的和也有相同的階數(shù)。檢查矩陣階數(shù)的MATLAB語句是size,例如,鍵入 m,n=size(fb2)得 m=6 n=5 (6行5列)如果要自己
17、編寫矩陣A和B相加(減)的程序,就必須先求mA,nA,mB,nB,并檢驗(yàn)是否滿足mA=mB和nA=nB。確認(rèn)無誤后再按對(duì)應(yīng)元素相加(減),得出CAB(或C=A-B)。 如果階數(shù)檢驗(yàn)不合格,則顯示出錯(cuò)。當(dāng)兩個(gè)相加矩陣中有一個(gè)是標(biāo)量時(shí),MATLAB 承認(rèn)算式有效,它自動(dòng)把該標(biāo)量擴(kuò)展成同階等元素矩陣,再與另一矩陣相加。例如,鍵入 X=-1 0 1; Y=X-1得 Y= -2 -1 0如果已經(jīng)知道X是一維矩陣(數(shù)組),也可以用 l=length(X)來求它的長度。注意size有兩個(gè)輸出量,而length只有一個(gè)輸出量。length不區(qū)分列或行,所以作加減法階數(shù)檢驗(yàn)時(shí)只能用size?,F(xiàn)在來看矩陣的乘法。
18、mp階矩陣A與pn階矩陣B的乘積C是一個(gè)mn階矩陣,它的任何一個(gè)元素C(i,j)的值為A陣的第i行和B陣的第j列對(duì)應(yīng)元素乘積的和,即 C(i,j)=A(i,1)*B(1,j)+A(i,2)*B(2,j)+A(i,p)*B(p,j)=pA(i,k)*B(k,j)式中的乘號(hào)是普通數(shù)(標(biāo)量)的乘號(hào)。p是A陣的列數(shù),也是B陣的行數(shù),也稱為兩個(gè)相乘矩陣的內(nèi)階數(shù),兩矩陣相乘的必要條件是它們的內(nèi)階數(shù)相等。不難看出,對(duì)于標(biāo)量A,B,因?yàn)閚,p,m均為1,矩陣乘法就退化為普通數(shù)的乘法。如果要自己編寫矩陣A和B相乘的程序,就必須先求mA,nA,mB,nB,并檢驗(yàn)nA是否等于nB,確認(rèn)無誤后再按上式把對(duì)應(yīng)元素相乘后
19、累加,得出C(i,j)。分別取i從1到mA,j從1到nB,得出mAnB個(gè)元素,排成矩陣形式,得到C。實(shí)際MATLAB已將上述矩陣加、 減、 乘的程序編程為內(nèi)部函數(shù),我們只要用、 、 * 作運(yùn)算符號(hào), 就包含了檢查階數(shù)和執(zhí)行運(yùn)算的全過程,而且其運(yùn)算對(duì)復(fù)數(shù)有效。由此可見,前面定義的X和Y是不能相乘的,因?yàn)樗鼈兊膬?nèi)階數(shù)分別為3和1。與加減法相仿,如果乘數(shù)中的一個(gè)是標(biāo)量,則MATLAB不檢查其內(nèi)階數(shù),而用該標(biāo)量乘以矩陣的每個(gè)元素。例如,鍵入 pi*X得 ans=-3.1416 0 3.1416若把Y轉(zhuǎn)置,成為31階,內(nèi)階數(shù)變?yōu)榕cX相同,就可以求 X*Y得 ans=2不難用心算檢驗(yàn)其正確性。這個(gè)式子可讀
20、成X左乘Y?,F(xiàn)在讓X右乘Y,這時(shí)兩者的內(nèi)階數(shù)都是1,而外階數(shù)(定義中的nA和mB)都成了3。于是有Y*X得 ans= 2 0 -2 1 0 -1 0 0 0顯然,X左乘和右乘Y所得的結(jié)果是完全不同的。只有單位矩陣?yán)猓瑔挝痪仃嚦艘匀魏尉仃嘇(其階數(shù)為mA*nA)時(shí),不管是左乘還是右乘,其積仍等于該矩陣,即 eye(mA)*A=A A*eye(nA)=A讀者可按單位矩陣的定義自行檢驗(yàn)其正確性。設(shè)三個(gè)線性方程組成的聯(lián)立方程組: x1+2x2+3x3=2 3x1-5x2+4x3=07x1+8x2+9x3=2令a=1,2,3; 3,-5,4; 7,8,9; x=x1, x2, x3; b=2; 0;
21、2則這個(gè)聯(lián)立方程組就可表示為簡潔的矩陣形式a*X= b給出a和X,可以用矩陣乘法求出b。但若給出a和b,要求X,那就需要進(jìn)行逆運(yùn)算除法了。2.2.2 矩陣除法及線性方程組的解 在線性代數(shù)中,本來就沒有除法,只有“逆矩陣”。矩陣除法是MATLAB從逆矩陣的概念引申來的。先介紹逆矩陣的定義,對(duì)于任意nn階方陣A,如果能找到一個(gè)同階的方陣V,使 A*V=I其中,I為n階的單位矩陣eye(n),則V就是A的逆矩陣, 用數(shù)學(xué)符號(hào)表示為 VA-1逆矩陣V存在的條件是A的行列式det(A)不等于0,V的最古典求法為高斯消去法。 在MATLAB中已經(jīng)做成了內(nèi)部函數(shù)inv,鍵入 V=inv(A)就可得到A的逆矩
22、陣V。如果det(A)等于或很接近于零,則MATLAB會(huì)顯示出錯(cuò)或警告信息: “A矩陣病態(tài)(ill-conditioned),結(jié)果精度不可靠?!爆F(xiàn)在來看方程D*X=B,設(shè)X為未知矩陣,等式兩端同時(shí)左乘以inv(D),即inv(D)*D*X = inv(D)*B因?yàn)榈仁阶蠖薸nv(D)*D=I,而I*X=X, 所以上式成為 X=inv(D)*B = DB把D的逆陣左乘以B,MATLAB就記作D,稱之為“左除”。從D*X=B的階數(shù)檢驗(yàn)可知,B與D的行數(shù)相等,因此,左除時(shí)的階數(shù)檢驗(yàn)條件是: 兩矩陣的行數(shù)必須相等。如果原始方程的未知數(shù)向量在左而系數(shù)矩陣在右,即 X*D=B則按上述同樣的方法可以寫出 X
23、=B*inv(D)=B/D把D的逆陣右乘以B,MATLAB就記作/D,稱之為“右除”。同理,右除時(shí)的階數(shù)檢驗(yàn)條件是: 兩矩陣的列數(shù)必須相等。矩陣除法可以用來方便地解線性方程組。例如要求方程組6x1+3x2+4x3=3 -2x1+5x2+7x3=-48x1-4x2-3x3=-7的解x=x1; x2; x3,方程組可寫成矩陣形式A*x=B,求解的MATLAB程序?yàn)锳=6,3,4; -2,5,7; 8,-4,-3; B=3; -4; -7; x=AB得 x= 0.6000 7.0000 -5.4000MATLAB中的除法還可以用來解方程數(shù)不等于未知數(shù)個(gè)數(shù)的情況。比如再加上一個(gè)方程x15x2-7x3=
24、9這時(shí)系數(shù)矩陣A1成為43階,不難看出A1的行數(shù)mA1是方程數(shù),其列數(shù)nA1是未知數(shù)的個(gè)數(shù),nA1mA1,說明方程組是不定的,它有無窮個(gè)解。此時(shí)仍然可用除法符號(hào)來求出解。這個(gè)解是滿足方程的,但它不是唯一解。它是令x1中某個(gè)或某些元素為零的一個(gè)特殊解。2.2.3 矩陣的乘方和超越函數(shù)MATLAB的乘冪函數(shù)“ ”、 指數(shù)函數(shù)expm、 對(duì)數(shù)函數(shù)logm、 和開方函數(shù)sqrtm是對(duì)矩陣進(jìn)行的, 即把矩陣作為一個(gè)整體來運(yùn)算。除此之外,其他MATLAB函數(shù)都是對(duì)矩陣中的元素分別進(jìn)行的, 英文直譯為數(shù)組運(yùn)算(Array Operations),較準(zhǔn)確的意義應(yīng)為“元素群運(yùn)算”,這將在下一節(jié)討論。在冪次運(yùn)算時(shí)
25、矩陣可以作為底數(shù),指數(shù)是標(biāo)量。這是矩陣乘法的擴(kuò)展,為了保證作乘法時(shí)內(nèi)階數(shù)相同,矩陣作為底數(shù)時(shí),它必須是方陣。矩陣也可以作為指數(shù),底數(shù)是標(biāo)量,它仍然應(yīng)是方陣。底數(shù)和指數(shù)不能同時(shí)為矩陣,如果這樣輸入,將顯示出錯(cuò)信息。2.2.4 矩陣結(jié)構(gòu)形式的提取與變換在作矩陣運(yùn)算時(shí),往往需要提取其中的某些特殊結(jié)構(gòu)的元素來組成新的矩陣; 有時(shí)則要改變矩陣的排列。除了我們在2.1節(jié)講過的提取行、 列和將行列轉(zhuǎn)置的語句之外,MATLAB還提供了一些改變矩陣結(jié)構(gòu)的函數(shù)。這些函數(shù)列于表2-1中, 讀者可在使用過程中體會(huì)其功能。2.3 元 素 群 運(yùn) 算2.3.1 數(shù)組及其賦值 數(shù)組通常是指單行或單列的矩陣,一個(gè)N階數(shù)組就是
26、1N或N1階矩陣。一個(gè)N階數(shù)組可以表述一個(gè)N維向量。因?yàn)橐粋€(gè)三維空間的向量可用它在三個(gè)坐標(biāo)上的投影來表示,即v=vx,vy,vz,也即表示為三階的數(shù)組。這個(gè)概念也可擴(kuò)展到N維空間的向量。在求某些函數(shù)值或曲線時(shí),常常要設(shè)定自變量的一系列值,例如設(shè)時(shí)間t從01秒之間,每隔0.02秒取一個(gè)點(diǎn),共51個(gè)點(diǎn),這是151階的數(shù)組。如果逐點(diǎn)給它賦值,將非常麻煩。MATLAB提供了兩種為等間隔數(shù)組賦值的簡易方法。(1) 用兩個(gè)“ : ”組成等增量語句,其格式為: t=初值: 增量: 終值。如鍵入 t=0: 0.02: 1得 t= 0 0.020 0.040 0.960 0.980 1.000此語句中的增量也可
27、設(shè)為負(fù)值,此時(shí)初值要比終值大。如鍵入 z=10: -3: -5得 z= 10 7 4 1 -2 -5當(dāng)增量為1時(shí),這個(gè)增量值可以略去,因而該語句只有一個(gè)“ : ”。如鍵入 k=1: 6得 k= 1 2 3 4 5 6(2) 用linspace函數(shù)。如鍵入 theta=linspace(0,2*pi,9)得 theta=0 0.7854 1.5708 2.3562 3.1416 3.9270 4.7124 5.4978 6.2832在圓周上0和2*pi實(shí)際上是一個(gè)點(diǎn),所以這個(gè)命令是把圓周分為八份。有時(shí)要求自變量按等比級(jí)數(shù)賦值,在設(shè)頻率軸時(shí)往往如此,這時(shí)可用logspace函數(shù)。如鍵入 w=log
28、space(0,1,11)得 w=1.0000 1.2589 1.5849 6.3096 7.9433 10.0000它的意義是將10的01次冪之間按冪等分(即數(shù)是等比的)為11個(gè)點(diǎn)。2.3.2 元素群的四則運(yùn)算和冪次運(yùn)算元素群運(yùn)算也就是矩陣中所有元素按單個(gè)元素進(jìn)行運(yùn)算。為了與矩陣作為整體的運(yùn)算符號(hào)相區(qū)別,要在運(yùn)算符“*、 、 、 ”前加一點(diǎn)符號(hào)“.”,以表示進(jìn)行的是元素群運(yùn)算。參與元素群運(yùn)算的兩個(gè)矩陣必須是同階的(標(biāo)量除外,它會(huì)自動(dòng)擴(kuò)展為同階矩陣參與運(yùn)算),表2-2中表示兩個(gè)13階的元素群運(yùn)算的結(jié)果。因?yàn)閿?shù)取得很簡單, 所以可用心算加以檢驗(yàn)。元素群的冪次運(yùn)算也就是各個(gè)元素自行作冪次運(yùn)算,對(duì)每
29、個(gè)元素而言,這種運(yùn)算和對(duì)標(biāo)量運(yùn)算一樣,所以很容易判定它的正確性。表2-3中參與元素群運(yùn)算的是一個(gè)33階方陣,這是為了便于比較矩陣中的元素運(yùn)算和矩陣整體運(yùn)算的不同(因?yàn)榉欠疥囀遣荒馨凑w作矩陣乘冪運(yùn)算的)。從中也可以看出,不宜把元素群運(yùn)算稱為數(shù)組運(yùn)算,因?yàn)檫@里參加運(yùn)算的是一個(gè)33階矩陣, 而不是數(shù)組。特別注意D 3 和D.3結(jié)果的不同。3.D與3D也完全不同,3D是合法運(yùn)算,讀者可自行實(shí)踐并對(duì)其結(jié)果作出解釋,不過這是比較難的題目,本書不作要求。2.3.3 元素群的函數(shù) 前已指出,所有的MATLAB函數(shù)都適用于作元素群運(yùn)算,只有專門說明的幾個(gè)除外。那就是*、 /、 、 運(yùn)算符和sqrtm、 exp
30、m、 logm三個(gè)函數(shù)。表2-4初等數(shù)學(xué)函數(shù)庫中的常用函數(shù)都可用于元素群運(yùn)算, 即其自變量都可以是任意階的矩陣。下面的例子可以說明利用元素群運(yùn)算的優(yōu)越性。例如,要求列出一個(gè)三角函數(shù)表, 這在MATLAB中只要兩條語句, 鍵入 x=0: 0.1: pi/4; x,sin(x),cos(x),tan(x)第一條語句給數(shù)組x賦值,經(jīng)轉(zhuǎn)置后成為一個(gè)列向量。因?yàn)閟in,cos,tan函數(shù)都對(duì)元素群有效, 所以得出的都是同階的列向量。第二條語句把四個(gè)列向量組成一個(gè)矩陣,并進(jìn)行顯示,得0 0 1.0000 0 0.1000 0.0998 0.9950 0.1003 0.2000 0.1987 0.9801
31、0.2027 0.3000 0.2955 0.9553 0.3093 0.4000 0.3894 0.9211 0.4228 0.5000 0.4794 0.8776 0.5463 0.6000 0.5646 0.8253 0.6841 0.7000 0.6442 0.7648 0.8423第一列是x,以下各列依次是 sin(x)、 cos(x)、 tan(x)。如果要加一個(gè)表頭,第二條語句可改成兩條如下的顯示語句: disp( x sin(x) cos(x) tan(x) ) disp(x,sin(x),cos(x),tan(x)disp后括號(hào)內(nèi)引號(hào)中的內(nèi)容是直接顯示的,放入空格就顯示空格,
32、放入漢字就顯示漢字。后一句括號(hào)中沒有引號(hào),是變量名組成的矩陣,它就顯示該矩陣中各變量的值。2.4 邏輯判斷及流程控制2.4.1 關(guān)系運(yùn)算 所謂關(guān)系運(yùn)算,是指兩個(gè)元素之間數(shù)值的比較,一共有六種可能,具體如下: = = = 小于 小于等于 大于 大于等于 等于 不等于關(guān)系運(yùn)算的結(jié)果只有兩種可能,即0或1。0表示該關(guān)系式為“假”,即該關(guān)系式不成立; 1表示該關(guān)系式為“真”,即該關(guān)系式成立。例如鍵入關(guān)系式 a=2+2=4得 a=1注意,前面的單個(gè)等號(hào)表示賦值,后面的雙等號(hào)則表示關(guān)系運(yùn)算。式中2+2=4是關(guān)系運(yùn)算,它的優(yōu)先級(jí)高,算出的結(jié)果給a賦值,為了改善可讀性,最好加上括號(hào),寫成a=(2+2=4),
33、表明是把括號(hào)內(nèi)的關(guān)系式的結(jié)果給a賦值,但表示關(guān)系運(yùn)算的相等符號(hào)仍必須用雙等號(hào)。MATLAB中的關(guān)系運(yùn)算都適用于矩陣,它是對(duì)矩陣的各個(gè)元素進(jìn)行元素群運(yùn)算,因此兩個(gè)相比較的矩陣必須有相同的階數(shù),輸出的結(jié)果也是同階矩陣。例如鍵入 A=magic(6)得 A= 35 1 6 26 19 24 3 32 7 21 23 25 31 9 2 22 27 20 8 28 33 17 10 15 30 5 34 12 14 16 4 36 29 13 18 11要找到此矩陣中所有被3整除的元素,并在其位置上標(biāo)以1, 可以用表2-4中的rem函數(shù),rem(A,3)表示A除以3的余數(shù), 余數(shù)為零就是整除。鍵入 p
34、=(rem(A,3)=0)得 p= 0 0 1 0 0 1 1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 1 1 0 0 1 0 0 0 1 0 0 1 0關(guān)系運(yùn)算中還包括某些條件判斷,例如判斷矩陣元素中有無NaN、 Inf值,矩陣是否為實(shí)數(shù)陣、 稀疏陣或空陣等,它們不能直接用上述六種關(guān)系符簡單地表述,MATLAB把它們編成了專用的函數(shù)以備直接調(diào)用,見表2-5。j,k=find(p=0) 給出p矩陣中不為零的元素的兩個(gè)下標(biāo), find(p=0)或lp=find(p=0)給出p矩陣中不為零的元素的順序號(hào)。矩陣元素是按列排序號(hào)的,先排第一列,再排第二列 ,依次排完后,再確定它
35、們的順序號(hào)。一個(gè)66的矩陣的36個(gè)元素的序號(hào)排列見表 2-6。因此一個(gè)mn陣中下標(biāo)為(j,k)的元素,其序號(hào)為l=(k-1)*n+j。鍵入 lp=find(p=0)得 lp= 2 5 9 12 13 16 20 23 27 30 31 34 可以看出這些序號(hào)確實(shí)對(duì)應(yīng)于p中的l元素。矩陣的序號(hào)(index)與下標(biāo)(subscript)是一一對(duì)應(yīng)的,其相互變換關(guān)系可由表2-1中的ind2sub(讀作index to subscirpt)和sub2ind函數(shù)求得。2.4.2 邏輯運(yùn)算 邏輯量只能取0(假)和1(真)兩個(gè)值。邏輯量的基本運(yùn)算為“與(&)”、 “或(|)” 和 “非()”三種。有時(shí)也包括
36、“異或(xor)”,不過“異或”可以用三種基本運(yùn)算組合而成。兩個(gè)邏輯量經(jīng)這三種邏輯運(yùn)算后的輸出仍然是邏輯量,表示邏輯量的輸入/輸出關(guān)系的表稱為真值表,見表2-7。所有的算法語言中都有邏輯運(yùn)算。MATLAB的特點(diǎn)是使邏輯運(yùn)算用于元素群,得出同階的0-1矩陣。為了按列、 按行判斷一群元素的邏輯值,它又增加了兩種對(duì)元素群的邏輯運(yùn)算函數(shù)all(全為真)和any(不全為假), 見表 2-5。現(xiàn)在來看邏輯式 u=p|p,這是把p和非p求“或”。p就是把p中的0元素?fù)Q成1,1元素?fù)Q成0。在p和非p對(duì)應(yīng)位置上的元素,必有一個(gè)是1 ,把p和p“或”起來,一定是全1。得 u = 1 1 1 1 1 1 1 1 1
37、 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1all和any后的輸入變量應(yīng)為矩陣,它是按列運(yùn)算的。從它們的定義可知 all(p)= 0 0 0 0 0 0 (列中有一個(gè)元素為0,即得0) all(u)= 1 1 1 1 1 1 (列中元素為全1,才得1) any(p)= 1 1 1 1 1 1 (列中有一個(gè)元素為1,即得1)2.4.3 流程控制語句 計(jì)算機(jī)程序通常都是從前到后逐條執(zhí)行的。但有時(shí)也會(huì)根據(jù)實(shí)際情況,中途改變執(zhí)行的次序,稱為流程控制。MATLAB設(shè)有四種流程控制的語言結(jié)構(gòu), 即if語句、 while語句、 for語句和sw
38、itch語句。1. if語句根據(jù)復(fù)雜程度,if語句有三種形式。(1) if(表達(dá)式) 語句組A,end。其流程見圖2-1(a)。執(zhí)行到此語句時(shí),計(jì)算機(jī)先檢驗(yàn)if后的邏輯表達(dá)式,如為1,就執(zhí)行語句組A; 如為0,就跳過語句組A,直接執(zhí)行end后的后續(xù)語句。注意,這個(gè)end是決不可少的,沒有它,在表達(dá)式為0時(shí),就找不到繼續(xù)執(zhí)行的程序入口。(2) if(表達(dá)式) 語句組A,else 語句組B,end。其流程見圖2-1(b)。執(zhí)行到此語句時(shí),計(jì)算機(jī)先檢驗(yàn)if后的(邏輯)表達(dá)式,如為1,就執(zhí)行語句組A; 如為0,就執(zhí)行語句組B。else用來標(biāo)志語句組B的執(zhí)行條件,同時(shí)也標(biāo)志語句組A的結(jié)束(免去了end)
39、。同樣, 最后的end是不可少的, 沒有它,執(zhí)行完語句組B后,就找不到進(jìn)入后續(xù)程序的入口。(3) if(表達(dá)式1) 語句組A,elseif (表達(dá)式2)語句組B, else 語句組C,end。其流程見圖2-1(c)。前兩種形式的if語句都是兩分支的程序結(jié)構(gòu),要實(shí)現(xiàn)兩個(gè)以上分支的結(jié)構(gòu)就得采用含elseif的結(jié)構(gòu)。圖中表示的是三分支的情況。在語句中間可加入多個(gè)elseif以形成多個(gè)分支, 只是程序結(jié)構(gòu)顯得冗長。圖 2-1 if語句的三種程序結(jié)構(gòu)形式【例2-4-1】 輸入數(shù)n,判斷其奇偶性。程序如下:n=input(n=), if rem(n,2)=0 A=even,else A=odd,end運(yùn)行
40、此程序時(shí),程序要求用戶輸入一個(gè)數(shù),然后判斷該數(shù)是奇數(shù)還是偶數(shù)。所以該程序共有兩個(gè)出口。實(shí)際上這個(gè)程序并不全面,如果用戶根本未鍵入任何數(shù)就回車,程序會(huì)判斷為 “odd” (請讀者考慮其原因)。為了使程序在用戶無輸入時(shí)自動(dòng)中止,可以把程序改為 if isempty(n)=1 A=empty, elseif rem(n,2)=0 A=even, else A=odd,end實(shí)際上這個(gè)程序仍不全面,它不能用于負(fù)數(shù),請讀者分析其原因。2. while語句while語句的結(jié)構(gòu)形式為while (表達(dá)式)語句組A,end其流程見圖2-2。執(zhí)行到此語句時(shí),計(jì)算機(jī)先檢驗(yàn)while后的邏輯表達(dá)式,如為1, 它就執(zhí)
41、行語句組A; 到end處后,它跳回到while的入口,再檢驗(yàn)表達(dá)式; 如還是1,再執(zhí)行語句組A; 周而復(fù)始,直到表達(dá)式不成立(結(jié)果為零)為止。此時(shí)跳過語句組A,直接執(zhí)行end后的后續(xù)語句。while語句與if語句的不同在于它的分支中是循環(huán)地執(zhí)行某個(gè)語句組,故稱為循環(huán)語句。圖 2-2 while語句流程圖【例2-4-2】 求MATLAB中的最大實(shí)數(shù)。解: 我們設(shè)定一個(gè)數(shù)x,讓它不斷增大,直到MATLAB無法表示它的值,只能表示為inf為止。于是,可列出下列程序 x=1; while x=inf, x1=x; x=2*x; end, x1其中我們先設(shè)x=1,進(jìn)入while循環(huán),只要x不等于inf,
42、就把x加倍,直到x=inf。如果把此時(shí)的x顯示出來,它是無窮大,不是題中要找的數(shù)。要找的是變?yōu)闊o窮大之前的最大數(shù),因此在對(duì)x加倍之前,把它存在x1中,顯示的x1就是要求的最大數(shù)。運(yùn)行這行程序, 得 x1= 8.9885e+307系統(tǒng)的最大浮點(diǎn)實(shí)數(shù)為 (2-)*21023,其十進(jìn)制形式為 realmax = 1.7977e+308兩者數(shù)量級(jí)接近,但還是相差將近一倍,這是因?yàn)槲覀兠看伟褁翻一番,故求得的數(shù)可能比最大數(shù)小不到一半。如果把程序中的x=2*x改為x=1.1*x,結(jié)果就會(huì)準(zhǔn)確一些,得到 x1=1.783718732622142e+308【例2-4-3】 求MATLAB的相對(duì)精度。解: 解的
43、思路是讓y不斷減小,直至MATLAB分不出1+y與1的差別為止。其程序?yàn)?y=1; while 1+y1,y1=y; y=y/2; end,y1結(jié)果為 y1=2.220446049250313e-016它就是MATLAB內(nèi)部給出的浮點(diǎn)數(shù)相對(duì)精度。3. for語句for語句的結(jié)構(gòu)形式為 for k=初值: 增量: 終值 語句組A,end即它把語句組A反復(fù)執(zhí)行N次, 每次執(zhí)行時(shí)程序中的k值不同。有多少個(gè)k值呢? 可得N1+(終值-初值)/增量【例2-4-4】 用for語句求三角函數(shù)表的程序?yàn)閒or x=0: 0.1: pi/4 disp(x,sin(x),cos(x),tan(x),end所得的結(jié)
44、果將和2.3節(jié)中的答案相同。這也可以看出,MATLAB的元素群運(yùn)算功能與一個(gè)for循環(huán)相當(dāng)。由于它不需每次檢驗(yàn)表達(dá)式,因此運(yùn)算速度比for語句快得多。但是不能認(rèn)為它可全部取代for語句,由下例可以看出。【例2-4-5】 列出構(gòu)成hilbert矩陣的程序,它需要兩重循環(huán): n=input(n=),format rat for i=1: n,for j=1: n,h(i,j)=1/(i+j-1); end,end,h執(zhí)行時(shí),先按提示輸入n,比如輸入5, 結(jié)果為 h= 1 1/2 1/3 1/4 1/5 1/2 1/3 1/4 1/5 1/6 1/3 1/4 1/5 1/6 1/7 1/4 1/5
45、1/6 1/7 1/8 1/5 1/6 1/7 1/8 1/9 為了改善可讀性,對(duì)于流程控制語句,最好用縮進(jìn)的方法來編寫程序。如本例中應(yīng)寫成: format rat,n=input(n=), for i=1: n for j=1: n h(i,j)=1/(i+j-1); end end h由于我們現(xiàn)在是在MATLAB命令窗中直接輸入程序,因此不得不把它寫在一行中。此時(shí)要注意,在if、 for、 while與表達(dá)式之間應(yīng)留空格,在表達(dá)式與語句組之間必須用空格或逗號(hào)分隔,而在語句組的后面,必須要用逗號(hào)或分號(hào)來與end或else相分隔,否則,MATLAB會(huì)顯示出錯(cuò)信息并中止運(yùn)行。break是中止循環(huán)
46、的命令,在循環(huán)語句中,可用它在一定條件下跳出循環(huán),這是常常用到的。在多重循環(huán)中,break 只能使程序跳出包含它的最內(nèi)部的那個(gè)循環(huán)。4. switch語句switch-case-otherwise語句是一種均衡快速的多分支語句,其基本語言結(jié)構(gòu)可表達(dá)為: switch 表達(dá)式(標(biāo)量或字符串) case 值1 語句組 A case 值2 語句組B otherwise 語句組N end當(dāng)表達(dá)式的值(或字符串)與某case語句中的值(字符串)相同時(shí),它就執(zhí)行該case語句后的語句組,而后直接跳到終點(diǎn)的end。case語句可以有N-1個(gè),即可以有N-1個(gè)分支,如果沒有任何一個(gè)case值能與表達(dá)式值相符,
47、則將執(zhí)行otherwise后面的語句組N。例如,判斷輸入數(shù)n的奇、 偶、 空的程序可用switch語句寫成 switch mod(n,2),case 1,A=奇,case 0,A=偶,otherwise,A=空,end 注意, 把它寫成單行命令時(shí)的標(biāo)點(diǎn)格式,其中有些逗號(hào)可以用分號(hào)代替,但不得省略。另外為了包含負(fù)數(shù)中的奇數(shù),將例2-4-1中的rem改為mod,讀者可從rem(-3,2)和mod(-3,2)的差別得出結(jié)論。在正式寫程序時(shí),每個(gè)case語句必須寫在行首,以增強(qiáng)程序的可讀性。2.5 基本繪圖方法 2.5.1 直角坐標(biāo)中的二維曲線 plot命令用來繪制x-y坐標(biāo)中的曲線。它是一個(gè)功能很強(qiáng)
48、的命令。輸入變量不同,可以產(chǎn)生很多不同的結(jié)果。1. plot(y)輸入一個(gè)數(shù)組的情況如果y是一個(gè)數(shù)組,函數(shù)plot(y)給出線性直角坐標(biāo)的二維圖,以y中元素的下標(biāo)作為x坐標(biāo),y中元素的值作為y坐標(biāo),一一對(duì)應(yīng)畫在x-y坐標(biāo)平面圖上,而且將各點(diǎn)以直線相連。例如,要畫出十個(gè)隨機(jī)數(shù)的曲線。可鍵入: y=5*(rand(1,10)-.5)得 y=-1.4052 -2.2648 0.8943 0.8965 2.1735 -0.5825 0.0971 1.6548 -2.3271 -2.2327由rand函數(shù)產(chǎn)生的隨機(jī)數(shù)的最大值為1,最小數(shù)為0,平均值為0.5。所以y的最大值為2.5, 最小值為-2.5,平
49、均值為0。鍵入plot(y),MATLAB會(huì)產(chǎn)生一個(gè)圖形窗,自動(dòng)規(guī)定最合適的坐標(biāo)比例繪圖。X方向是下標(biāo),從110,Y方向范圍則是-44,并自動(dòng)標(biāo)出刻度。可以用title命令給圖加上標(biāo)題,用xlabel, ylabel命令給坐標(biāo)軸加上說明,用text或gext命令可在圖上任何位置加標(biāo)注,也可用grid命令在圖上打上坐標(biāo)網(wǎng)格線。 title(My First Plot) xlabel(n),ylabel(Y) grid這時(shí)形成的圖如圖2-3所示。圖 2-3 第一張簡單的隨機(jī)數(shù)圖2. plot(x,y)輸入兩個(gè)數(shù)組的情況如果數(shù)組x和y具有相同長度,命令plot(x,y)將繪出以x元素為橫坐標(biāo),y元素
50、為縱坐標(biāo)的曲線。例如,設(shè)t為時(shí)間數(shù)組t=0: 0.5; 4*pi,y是一個(gè)隨t作衰減振蕩的變量: y=exp(-0.1*t).*sin(t), 則plot(t,y) 就以t為橫坐標(biāo),y為縱坐標(biāo)畫曲線。 若設(shè)y1=exp(-0.1*t).*sin(t+1),則由 plot(t,y1,: )畫出的曲線,其正弦波的相位超前了1弧度。 y、 y1的波形如圖2-4所示。實(shí)際上,在繪制第二條曲線時(shí),如不加別的命令,第一條曲線就會(huì)自動(dòng)消失,不會(huì)有兩根曲線同在圖中出現(xiàn)。如果要在一張圖中繪制多條曲線,則要用到2.5.3節(jié)所講的方法。圖 2-4 兩根曲線畫在同一圖上2.5.2 線型、 點(diǎn)型和顏色MATLAB會(huì)自動(dòng)
51、設(shè)定所畫曲線的顏色和線型。如果用戶對(duì)線型的默認(rèn)值不滿意,可以用命令控制線型, 也可以根據(jù)需要選取不同的數(shù)據(jù)點(diǎn)的標(biāo)記。為了設(shè)定線型,在輸入變量組的后面,加一個(gè)引號(hào),在引號(hào)內(nèi)部放入線型和顏色的標(biāo)志符, 如plot(x,y,*b) 這樣繪出的圖線,其數(shù)據(jù)點(diǎn)處均用“*”作藍(lán)色標(biāo)記,而各點(diǎn)之間不再連以直線。 plot(x1,y1,:y),plot(x2,y2,+r) 繪出的第一條曲線是黃色的點(diǎn)線,第二條曲線的數(shù)據(jù)點(diǎn)標(biāo)記為紅色的“+”號(hào)。其他線型、 點(diǎn)型和顏色見表2-8, 線型和類型也可用圖形編輯功能修改。2.5.3 多條曲線的繪制 1. 用 plot(t,y1,y2, )命令該語句中t是向量,y=y1,
52、y2, 是矩陣,若t是列(行)向量,則y的列(行)長與t長度相同。y的行(列)數(shù)就是曲線的根數(shù)。例如: plot(t,y; y1)就得出圖2-4中的曲線。它會(huì)自動(dòng)給曲線以不同的顏色。這種方法要求所有的輸出量有同樣的長度和同樣的自變量向量。另外它不便于用戶自行設(shè)定線型和顏色。2. 用hold命令在畫完前一張圖后用hold命令保持住,再畫下一條曲線。如鍵入 plot(t,y), hold on,plot(t,y1,g)執(zhí)行此命令時(shí),圖形窗產(chǎn)生第一幅圖形,同時(shí),命令屏幕顯示“Current plot held”,圖形處于保持狀態(tài)。再執(zhí)行 plot(t,y1,g),就把第二幅圖以綠色的曲線疊合在同一張
53、圖上了。用這種方法時(shí)兩張圖的變量長度可以各不相同。只要每張圖自己的自變量和因變量同長即可。例如,再給一組數(shù)據(jù)t2,y2,其點(diǎn)數(shù)比t,y多,但占的時(shí)間卻短。鍵入 t2=0:.2:2*pi; y2=exp(-0.5*t2).*sin(5*t2+1); plot(t2,y2)得出的圖形應(yīng)如圖2-5中所示的較短的那條曲線(但線型不同)。用這種方法時(shí),一是注意第一張圖的坐標(biāo)要適當(dāng),以保證能看清第二張圖,因?yàn)橛玫谝环N方法時(shí),坐標(biāo)系是系統(tǒng)自動(dòng)按多根曲線的數(shù)據(jù)綜合選取的,不會(huì)有選擇不當(dāng)?shù)膯栴}; 二是注意及時(shí)解除保持狀態(tài),即鍵入hold off,否則,以后的圖都會(huì)疊加在此圖上,造成混亂。圖 2-5 兩組長度不同
54、的t,y數(shù)據(jù)畫在同一圖上3. 在plot后使用多輸入變量在plot后使用多輸入變量所用語句為 plot(x1,y1,x2,y2,x,y)其中x1,y1,x2,y2等分別為數(shù)組對(duì)。每一對(duì)x-y數(shù)組可以繪出一條圖線,這樣就可以在一張圖上畫出多條圖線,每一組數(shù)組對(duì)的長度可以不同,在其后面都可加線型標(biāo)志符。例如,鍵入 plot(t,y,+g,t2,y2,: r) title(線型、 點(diǎn)型和顏色) xlabel(時(shí)間),ylabel(Y)執(zhí)行這些語句就得到圖2-5。一根圖線在數(shù)據(jù)點(diǎn)處用綠色的號(hào)作標(biāo)記,另一根圖線用紅色的點(diǎn)線。在電腦屏幕上,我們可以清楚地看到不同顏色的線條, 但在書本中, 所有的顏色都只能
55、顯示為黑色, 全書所有彩色繪圖的結(jié)果都是如此, 在此作一說明。注意我們用的是漢字標(biāo)注,MATLAB也照樣把漢字標(biāo)在圖上。因?yàn)橐?hào)中的內(nèi)容,MATLAB只作為一種代碼來傳遞。4. 用plotyy命令plotyy設(shè)有兩個(gè)縱坐標(biāo),以便繪制兩個(gè)y尺度不同的變量,但x仍只能用同一個(gè)比例尺,例如,鍵入 y3=5*y2; plotyy(t,y,t2,y3)就得到圖2-6。其中左縱坐標(biāo)是對(duì)y的,而右縱坐標(biāo)是對(duì)y3的,縱坐標(biāo)和曲線的標(biāo)注可用gtext命令: grid, gtext(t,t2) gtext(y),gtext(y3)gtext命令用鼠標(biāo)拖動(dòng)來確定標(biāo)注文字的位置,用起來比較方便。圖 2-6 雙縱坐標(biāo)繪
56、圖2.5.4 屏幕控制和其他坐標(biāo)二維繪圖1. 圖形屏幕控制命令圖形屏幕可以開或關(guān),可以開幾處圖形窗,也可以在一個(gè)圖形窗內(nèi)畫出幾幅分圖,幾幅分圖可用不同的坐標(biāo)。以下幾種命令可以實(shí)現(xiàn)圖形窗口間的轉(zhuǎn)換和清除。(1) figure: 打開圖形窗口。MATLAB中的第一幅圖隨plot命令自動(dòng)打開,以后的plot命令都畫在同一張圖上。如要畫在另一張新圖上,就要用figure命令打開新的圖形窗口。有了順序?yàn)?,2,3,的幾個(gè)圖形窗后,再用plot語句,就要指明畫在哪張圖上,即鍵入figure(i),表示打開第i幅圖。否則,所有的圖都會(huì)畫在最后顯示的那幅圖上。(2) clf: 清除當(dāng)前圖形窗的內(nèi)容。(3) h
57、old: 保持當(dāng)前圖形窗的內(nèi)容,再鍵入hold,就解除凍結(jié)。這種拉線開關(guān)式的控制有時(shí)會(huì)造成混亂,可以用hold on和hold off命令以得到確定的狀態(tài)。(4) close: 關(guān)閉當(dāng)前圖形窗。close all: 關(guān)閉所有圖形窗。(5) subplot(n,m,p) 命令: 將圖形窗口分為nm個(gè)子圖,在第p個(gè)子圖處繪制圖形。2. 其他二維繪圖命令在線性直角坐標(biāo)系中,繪制其他形式圖形的命令有stem(繪脈沖圖)、 stairs(繪階梯圖)、 bar(繪條形圖)、 errorbar(繪誤差條形圖)和hist(繪直方圖)等。這些函數(shù)用法與plot相仿,但沒有多輸入變量形式。fill(t,y,顏色標(biāo)
58、注符)在曲線和坐標(biāo)軸之間的封閉區(qū)填以指定的顏色。下列程序把畫面分成四個(gè): subplot(2,2,1),stem(t,y) title(stem(t,y), pause subplot(2,2,2),stairs(t,y) title(stairs(t,y), pause, subplot(2,2,3),bar(t,y) title(bar(t,y) ,pause subplot(2,2,4),fill(t,y,r) title(fill(t,y, r ) 其運(yùn)行的結(jié)果見圖2-7。讀者不難從中弄清這幾條繪圖命令的意義。程序中最后一行, r前后的引號(hào)寫成兩個(gè)引號(hào),這是因?yàn)樗翘幵趖itle后的引
59、號(hào)內(nèi)。MATLAB規(guī)定,這種引號(hào)必須寫成兩個(gè),以免被誤認(rèn)為是末尾的引號(hào)。再鍵入subplot(1,1,1)命令可取消子圖,轉(zhuǎn)回全屏幕繪圖。圖 2-7 同一函數(shù)的幾種不同的繪制形式在對(duì)數(shù)直角坐標(biāo)系中的繪圖命令有l(wèi)oglog、 semilogx和semilogy等,在極坐標(biāo)系中的繪圖命令有polar。它們的用法與plot的基本用法相同,只是數(shù)據(jù)將畫在不同類的坐標(biāo)系上。 polar(theta,rho)為極坐標(biāo)繪圖,以角度theta為一個(gè)坐標(biāo),單位是弧度,另外一個(gè)坐標(biāo)是矢徑rho。在其后使用grid命令,可以繪出網(wǎng)狀極坐標(biāo)線。這個(gè)函數(shù)沒有多輸入變量形式。 loglog繪出縱、 橫坐標(biāo)刻度均為log1
60、0的對(duì)數(shù)圖。 semilogx使用半對(duì)數(shù)刻度繪圖,x軸為log10刻度,y軸為線性刻度。 semilogy使用半對(duì)數(shù)刻度繪圖,y軸為log10刻度,x軸為線性刻度。 以上圖形屏幕控制命令和其他二維繪圖命令都在二維圖形函數(shù)庫中, 如表2-9所示。3. 復(fù)數(shù)的繪圖當(dāng)plot(z)中的z為復(fù)數(shù)單變量時(shí)(即含有非零的虛部),MATLAB把復(fù)數(shù)的實(shí)部作為x坐標(biāo),虛部作為y坐標(biāo)進(jìn)行繪圖,即相當(dāng)于plot(real(z),imag(z)。如果是雙變量如plot(t,z),則z中的虛數(shù)部分將被丟棄。要在復(fù)平面內(nèi)繪出多條圖線,必須用hold命令,或把多根曲線的實(shí)部和虛部明確地寫出,作為plot函數(shù)的輸入變元,即
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國環(huán)烷基潤滑油市場深度評(píng)估及發(fā)展策略研究報(bào)告
- 2025-2030年中國熟食與餐飲業(yè)運(yùn)行狀況及發(fā)展趨勢預(yù)測報(bào)告
- 2025-2030年中國清洗劑產(chǎn)業(yè)未來發(fā)展趨勢及投資戰(zhàn)略研究報(bào)告新版
- 2025-2030年中國汽車軸承行業(yè)運(yùn)行態(tài)勢與十三五規(guī)劃分析報(bào)告
- 2025年通信設(shè)施安全監(jiān)測服務(wù)合同2篇
- 二零二五年生態(tài)停車場建設(shè)與維護(hù)合同范本3篇
- 2025年消防器材銷售與消防設(shè)備租賃及安裝合同
- 2025年度高新技術(shù)項(xiàng)目履約保函標(biāo)準(zhǔn)協(xié)議4篇
- 二零二五年度物流園區(qū)安全防范合同范本4篇
- 2025年度煤礦股權(quán)轉(zhuǎn)讓與礦區(qū)安全生產(chǎn)信息化建設(shè)合同4篇
- 骨科手術(shù)后患者營養(yǎng)情況及營養(yǎng)不良的原因分析,骨傷科論文
- GB/T 24474.1-2020乘運(yùn)質(zhì)量測量第1部分:電梯
- GB/T 12684-2006工業(yè)硼化物分析方法
- 定崗定編定員實(shí)施方案(一)
- 高血壓患者用藥的注意事項(xiàng)講義課件
- 特種作業(yè)安全監(jiān)護(hù)人員培訓(xùn)課件
- (完整)第15章-合成生物學(xué)ppt
- 太平洋戰(zhàn)爭課件
- 封條模板A4打印版
- T∕CGCC 7-2017 焙烤食品用糖漿
- 貨代操作流程及規(guī)范
評(píng)論
0/150
提交評(píng)論