MATLAB程序設(shè)計(jì)教程_第1頁
MATLAB程序設(shè)計(jì)教程_第2頁
MATLAB程序設(shè)計(jì)教程_第3頁
MATLAB程序設(shè)計(jì)教程_第4頁
MATLAB程序設(shè)計(jì)教程_第5頁
已閱讀5頁,還剩101頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第2章  MATLAB矩陣及其運(yùn)算2.1  變量和數(shù)據(jù)操作2.2  MATLAB矩陣2.3  MATLAB運(yùn)算2.4  矩陣分析2.5  矩陣的超越函數(shù)2.6  字符串2.7  結(jié)構(gòu)數(shù)據(jù)和單元數(shù)據(jù)2.8  稀疏矩陣  2.1  變量和數(shù)據(jù)操作2.1.1  變量與賦值1變量命名在MATLAB 6.5中,變量名是以字母開頭,后接字母、數(shù)字或下劃線的字符序列,最多63個(gè)字符。在MATLAB中,變量名區(qū)分字母的大小寫。  2賦值語句(1) 變量=表達(dá)式  (2)

2、表達(dá)式其中表達(dá)式是用運(yùn)算符將有關(guān)運(yùn)算量連接起來的式子,其結(jié)果是一個(gè)矩陣。  例2-1  計(jì)算表達(dá)式的值,并顯示計(jì)算結(jié)果。在MATLAB命令窗口輸入命令:x=1+2i;y=3-sqrt(17);z=(cos(abs(x+y)-sin(78*pi/180)/(x+abs(y)其中pi和i都是MATLAB預(yù)先定義的變量,分別代表代表圓周率和虛數(shù)單位。輸出結(jié)果是:z =   -0.3488 + 0.3286i    2.1.2  預(yù)定義變量在MATLAB工作空間中,還駐留幾個(gè)由系統(tǒng)本身定義的變量。例如,用pi表示圓周率的近

3、似值,用i,j表示虛數(shù)單位。預(yù)定義變量有特定的含義,在使用時(shí),應(yīng)盡量避免對這些變量重新賦值。  2.1.3  內(nèi)存變量的管理1內(nèi)存變量的刪除與修改MATLAB工作空間窗口專門用于內(nèi)存變量的管理。在工作空間窗口中可以顯示所有內(nèi)存變量的屬性。當(dāng)選中某些變量后,再單擊Delete按鈕,就能刪除這些變量。當(dāng)選中某些變量后,再單擊Open按鈕,將進(jìn)入變量編輯器。通過變量編輯器可以直接觀察變量中的具體元素,也可修改變量中的具體元素。  clear命令用于刪除MATLAB工作空間中的變量。who和whos這兩個(gè)命令用于顯示在MATLAB工作空間中已經(jīng)駐留的變量名清單。who命令

4、只顯示出駐留變量的名稱,whos在給出變量名的同時(shí),還給出它們的大小、所占字節(jié)數(shù)及數(shù)據(jù)類型等信息。  2內(nèi)存變量文件利用MAT文件可以把當(dāng)前MATLAB工作空間中的一些有用變量長久地保留下來,擴(kuò)展名是.mat。MAT文件的生成和裝入由save和load命令來完成。常用格式為:save 文件名 變量名表  -append-asciiload 文件名  變量名表  -ascii  其中,文件名可以帶路徑,但不需帶擴(kuò)展名.mat,命令隱含一定對.mat文件進(jìn)行操作。變量名表中的變量個(gè)數(shù)不限,只要內(nèi)存或文件中存在即可,變量名之間以空格分隔。當(dāng)變量名表省

5、略時(shí),保存或裝入全部變量。-ascii選項(xiàng)使文件以ASCII格式處理,省略該選項(xiàng)時(shí)文件將以二進(jìn)制格式處理。save命令中的-append選項(xiàng)控制將變量追加到MAT文件中。  2.1.4  MATLAB常用數(shù)學(xué)函數(shù)MATLAB提供了許多數(shù)學(xué)函數(shù),函數(shù)的自變量規(guī)定為矩陣變量,運(yùn)算法則是將函數(shù)逐項(xiàng)作用于矩陣的元素上,因而運(yùn)算的結(jié)果是一個(gè)與自變量同維數(shù)的矩陣。函數(shù)使用說明:(1) 三角函數(shù)以弧度為單位計(jì)算。(2) abs函數(shù)可以求實(shí)數(shù)的絕對值、復(fù)數(shù)的模、字符串的ASCII碼值。(3) 用于取整的函數(shù)有fix、floor、ceil、round,要注意它們的區(qū)別。(4) rem與mod

6、函數(shù)的區(qū)別。rem(x,y)和mod(x,y)要求x,y必須為相同大小的實(shí)矩陣或?yàn)闃?biāo)量。  2.1.5  數(shù)據(jù)的輸出格式    MATLAB用十進(jìn)制數(shù)表示一個(gè)常數(shù),具體可采用日常記數(shù)法和科學(xué)記數(shù)法兩種表示方法。    在一般情況下,MATLAB內(nèi)部每一個(gè)數(shù)據(jù)元素都是用雙精度數(shù)來表示和存儲的。數(shù)據(jù)輸出時(shí)用戶可以用format命令設(shè)置或改變數(shù)據(jù)輸出格式。format命令的格式為:    format  格式符其中格式符決定數(shù)據(jù)的輸出格式2.2  MATLAB矩陣2.2.

7、1  矩陣的建立1直接輸入法    最簡單的建立矩陣的方法是從鍵盤直接輸入矩陣的元素。具體方法如下:將矩陣的元素用方括號括起來,按矩陣行的順序輸入各元素,同一行的各元素之間用空格或逗號分隔,不同行的元素之間用分號分隔。  2利用M文件建立矩陣    對于比較大且比較復(fù)雜的矩陣,可以為它專門建立一個(gè)M文件。下面通過一個(gè)簡單例子來說明如何利用M文件創(chuàng)建矩陣。      例2-2  利用M文件建立MYMAT矩陣。(1) 啟動有關(guān)編輯程序或MATLAB文本編輯器,并輸入待建

8、矩陣:(2) 把輸入的內(nèi)容以純文本方式存盤(設(shè)文件名為mymatrix.m)。(3) 在MATLAB命令窗口中輸入mymatrix,即運(yùn)行該M文件,就會自動建立一個(gè)名為MYMAT的矩陣,可供以后使用。  3利用冒號表達(dá)式建立一個(gè)向量    冒號表達(dá)式可以產(chǎn)生一個(gè)行向量,一般格式是:    e1:e2:e3其中e1為初始值,e2為步長,e3為終止值。在MATLAB中,還可以用linspace函數(shù)產(chǎn)生行向量。其調(diào)用格式為:linspace(a,b,n)其中a和b是生成向量的第一個(gè)和最后一個(gè)元素,n是元素總數(shù)。顯然,linspac

9、e(a,b,n)與a:(b-a)/(n-1):b等價(jià)。4建立大矩陣大矩陣可由方括號中的小矩陣或向量建立起來。  2.2.2  矩陣的拆分1矩陣元素    通過下標(biāo)引用矩陣的元素,例如A(3,2)=200采用矩陣元素的序號來引用矩陣元素。矩陣元素的序號就是相應(yīng)元素在內(nèi)存中的排列順序。在MATLAB中,矩陣元素按列存儲,先第一列,再第二列,依次類推。例如A=1,2,3;4,5,6;A(3)ans =     2顯然,序號(Index)與下標(biāo)(Subscript )是一一對應(yīng)的,以m×n矩陣A為例,矩

10、陣元素A(i,j)的序號為(j-1)*m+i。其相互轉(zhuǎn)換關(guān)系也可利用sub2ind和ind2sub函數(shù)求得。  2矩陣拆分    (1) 利用冒號表達(dá)式獲得子矩陣        A(:,j)表示取A矩陣的第j列全部元素;A(i,:)表示A矩陣第i行的全部元素;A(i,j)表示取A矩陣第i行、第j列的元素。        A(i:i+m,:)表示取A矩陣第ii+m行的全部元素;A(:,k:k+m)表示取A矩陣第kk+m

11、列的全部元素,A(i:i+m,k:k+m)表示取A矩陣第ii+m行內(nèi),并在第kk+m列中的所有元素。此外,還可利用一般向量和end運(yùn)算符來表示矩陣下標(biāo),從而獲得子矩陣。end表示某一維的末尾元素下標(biāo)。      (2) 利用空矩陣刪除矩陣的元素    在MATLAB中,定義為空矩陣。給變量X賦空矩陣的語句為X=。注意,X=與clear X不同,clear是將X從工作空間中刪除,而空矩陣則存在于工作空間中,只是維數(shù)為0。  2.2.3  特殊矩陣1通用的特殊矩陣常用的產(chǎn)生通用特殊矩陣的函數(shù)有:zeros:產(chǎn)

12、生全0矩陣(零矩陣)。ones:產(chǎn)生全1矩陣(幺矩陣)。eye:產(chǎn)生單位矩陣。rand:產(chǎn)生01間均勻分布的隨機(jī)矩陣。randn:產(chǎn)生均值為0,方差為1的標(biāo)準(zhǔn)正態(tài)分布隨機(jī)矩陣。  例2-3  分別建立3×3、3×2和與矩陣A同樣大小的零矩陣。(1) 建立一個(gè)3×3零矩陣。zeros(3)(2) 建立一個(gè)3×2零矩陣。zeros(3,2)(3) 設(shè)A為2×3矩陣,則可以用zeros(size(A)建立一個(gè)與矩陣A同樣大小零矩陣。A=1 2 3;4 5 6;    %產(chǎn)生一個(gè)2×3階矩陣A

13、zeros(size(A)      %產(chǎn)生一個(gè)與矩陣A同樣大小的零矩陣  例2-4 建立隨機(jī)矩陣:(1) 在區(qū)間20,50內(nèi)均勻分布的5階隨機(jī)矩陣。(2) 均值為0.6、方差為0.1的5階正態(tài)分布隨機(jī)矩陣。命令如下:x=20+(50-20)*rand(5)y=0.6+sqrt(0.1)*randn(5)此外,常用的函數(shù)還有reshape(A,m,n),它在矩陣總元素保持不變的前提下,將矩陣A重新排成m×n的二維矩陣。  2用于專門學(xué)科的特殊矩陣(1) 魔方矩陣魔方矩陣有一個(gè)有趣的性質(zhì),其每行、每列及兩條對角線上的

14、元素和都相等。對于n階魔方陣,其元素由1,2,3,n2共n2個(gè)整數(shù)組成。MATLAB提供了求魔方矩陣的函數(shù)magic(n),其功能是生成一個(gè)n階魔方陣。  例2-5  將101125等25個(gè)數(shù)填入一個(gè)5行5列的表格中,使其每行每列及對角線的和均為565。M=100+magic(5)  (2) 范得蒙矩陣范得蒙(Vandermonde)矩陣最后一列全為1,倒數(shù)第二列為一個(gè)指定的向量,其他各列是其后列與倒數(shù)第二列的點(diǎn)乘積??梢杂靡粋€(gè)指定向量生成一個(gè)范得蒙矩陣。在MATLAB中,函數(shù)vander(V)生成以向量V為基礎(chǔ)向量的范得蒙矩陣。例如,A=vander(1;2;3

15、;5)即可得到上述范得蒙矩陣。<!-if !supportLineBreakNewLine-><!-endif->(3) 希爾伯特矩陣在MATLAB中,生成希爾伯特矩陣的函數(shù)是hilb(n)。使用一般方法求逆會因?yàn)樵紨?shù)據(jù)的微小擾動而產(chǎn)生不可靠的計(jì)算結(jié)果。MATLAB中,有一個(gè)專門求希爾伯特矩陣的逆的函數(shù)invhilb(n),其功能是求n階的希爾伯特矩陣的逆矩陣。  例2-6  求4階希爾伯特矩陣及其逆矩陣。命令如下:format rat     %以有理形式輸出H=hilb(4)H=invhilb(4)<

16、;!-if !supportLineBreakNewLine-><!-endif->(4) 托普利茲矩陣托普利茲(Toeplitz)矩陣除第一行第一列外,其他每個(gè)元素都與左上角的元素相同。生成托普利茲矩陣的函數(shù)是toeplitz(x,y),它生成一個(gè)以x為第一列,y為第一行的托普利茲矩陣。這里x, y均為向量,兩者不必等長。toeplitz(x)用向量x生成一個(gè)對稱的托普利茲矩陣。例如T=toeplitz(1:6)  (5) 伴隨矩陣MATLAB生成伴隨矩陣的函數(shù)是compan(p),其中p是一個(gè)多項(xiàng)式的系數(shù)向量,高次冪系數(shù)排在前,低次冪排在后。例如,為了求多項(xiàng)式的

17、x3-7x+6的伴隨矩陣,可使用命令:p=1,0,-7,6;compan(p)  (6) 帕斯卡矩陣我們知道,二次項(xiàng)(x+y)n展開后的系數(shù)隨n的增大組成一個(gè)三角形表,稱為楊輝三角形。由楊輝三角形表組成的矩陣稱為帕斯卡(Pascal)矩陣。函數(shù)pascal(n)生成一個(gè)n階帕斯卡矩陣。  例2-7  求(x+y)5的展開式。在MATLAB命令窗口,輸入命令:pascal(6)矩陣次對角線上的元素1,5,10,10,5,1即為展開式的系數(shù)。  2.3  MATLAB運(yùn)算 2.3.1算術(shù)運(yùn)算1基本算術(shù)運(yùn)算    MAT

18、LAB的基本算術(shù)運(yùn)算有:(加)、(減)、*(乘)、/(右除)、(左除)、(乘方)。注意,運(yùn)算是在矩陣意義下進(jìn)行的,單個(gè)數(shù)據(jù)的算術(shù)運(yùn)算只是一種特例。      (1) 矩陣加減運(yùn)算    假定有兩個(gè)矩陣A和B,則可以由A+B和A-B實(shí)現(xiàn)矩陣的加減運(yùn)算。運(yùn)算規(guī)則是:若A和B矩陣的維數(shù)相同,則可以執(zhí)行矩陣的加減運(yùn)算,A和B矩陣的相應(yīng)元素相加減。如果A與B的維數(shù)不相同,則MATLAB將給出錯(cuò)誤信息,提示用戶兩個(gè)矩陣的維數(shù)不匹配。      (2) 矩陣乘法  假定有兩個(gè)矩陣A和B,若

19、A為m×n矩陣,B為n×p矩陣,則C=A*B為m×p矩陣。      (3) 矩陣除法在MATLAB中,有兩種矩陣除法運(yùn)算:和/,分別表示左除和右除。如果A矩陣是非奇異方陣,則AB和B/A運(yùn)算可以實(shí)現(xiàn)。AB等效于A的逆左乘B矩陣,也就是inv(A)*B,而B/A等效于A矩陣的逆右乘B矩陣,也就是B*inv(A)。對于含有標(biāo)量的運(yùn)算,兩種除法運(yùn)算的結(jié)果相同,如3/4和43有相同的值,都等于0.75。又如,設(shè)a=10.5,25,則a/5=5a=2.1000 5.0000。對于矩陣來說,左除和右除表示兩種不同的除數(shù)矩陣和被除數(shù)矩陣

20、的關(guān)系。對于矩陣運(yùn)算,一般ABB/A。      (4) 矩陣的乘方    一個(gè)矩陣的乘方運(yùn)算可以表示成Ax,要求A為方陣,x為標(biāo)量。2點(diǎn)運(yùn)算    在MATLAB中,有一種特殊的運(yùn)算,因?yàn)槠溥\(yùn)算符是在有關(guān)算術(shù)運(yùn)算符前面加點(diǎn),所以叫點(diǎn)運(yùn)算。點(diǎn)運(yùn)算符有.*、./、.和.。兩矩陣進(jìn)行點(diǎn)運(yùn)算是指它們的對應(yīng)元素進(jìn)行相關(guān)運(yùn)算,要求兩矩陣的維參數(shù)相同。  2.3.2  關(guān)系運(yùn)算    MATLAB提供了6種關(guān)系運(yùn)算符:<(小于)、<=(小于或等于

21、)、>(大于)、>=(大于或等于)、=(等于)、=(不等于)。它們的含義不難理解,但要注意其書寫方法與數(shù)學(xué)中的不等式符號不盡相同。      關(guān)系運(yùn)算符的運(yùn)算法則為:    (1) 當(dāng)兩個(gè)比較量是標(biāo)量時(shí),直接比較兩數(shù)的大小。若關(guān)系成立,關(guān)系表達(dá)式結(jié)果為1,否則為0。    (2) 當(dāng)參與比較的量是兩個(gè)維數(shù)相同的矩陣時(shí),比較是對兩矩陣相同位置的元素按標(biāo)量關(guān)系運(yùn)算規(guī)則逐個(gè)進(jìn)行,并給出元素比較結(jié)果。最終的關(guān)系運(yùn)算的結(jié)果是一個(gè)維數(shù)與原矩陣相同的矩陣,它的元素由0或1組成。  

22、60;   (3) 當(dāng)參與比較的一個(gè)是標(biāo)量,而另一個(gè)是矩陣時(shí),則把標(biāo)量與矩陣的每一個(gè)元素按標(biāo)量關(guān)系運(yùn)算規(guī)則逐個(gè)比較,并給出元素比較結(jié)果。最終的關(guān)系運(yùn)算的結(jié)果是一個(gè)維數(shù)與原矩陣相同的矩陣,它的元素由0或1組成。      例2-8  產(chǎn)生5階隨機(jī)方陣A,其元素為10,90區(qū)間的隨機(jī)整數(shù),然后判斷A的元素是否能被3整除。    (1) 生成5階隨機(jī)方陣A。A=fix(90-10+1)*rand(5)+10)    (2) 判斷A的元素是否可以被3整除。 P=r

23、em(A,3)=0其中,rem(A,3)是矩陣A的每個(gè)元素除以3的余數(shù)矩陣。此時(shí),0被擴(kuò)展為與A同維數(shù)的零矩陣,P是進(jìn)行等于(=)比較的結(jié)果矩陣。  2.3.3  邏輯運(yùn)算    MATLAB提供了3種邏輯運(yùn)算符:&(與)、|(或)和(非)。    邏輯運(yùn)算的運(yùn)算法則為:(1) 在邏輯運(yùn)算中,確認(rèn)非零元素為真,用1表示,零元素為假,用0表示。(2) 設(shè)參與邏輯運(yùn)算的是兩個(gè)標(biāo)量a和b,那么,    a&b  a,b全為非零時(shí),運(yùn)算結(jié)果為1,否則為0。 

24、   a|b  a,b中只要有一個(gè)非零,運(yùn)算結(jié)果為1。    a  當(dāng)a是零時(shí),運(yùn)算結(jié)果為1;當(dāng)a非零時(shí),運(yùn)算結(jié)果為0。  (3) 若參與邏輯運(yùn)算的是兩個(gè)同維矩陣,那么運(yùn)算將對矩陣相同位置上的元素按標(biāo)量規(guī)則逐個(gè)進(jìn)行。最終運(yùn)算結(jié)果是一個(gè)與原矩陣同維的矩陣,其元素由1或0組成。(4) 若參與邏輯運(yùn)算的一個(gè)是標(biāo)量,一個(gè)是矩陣,那么運(yùn)算將在標(biāo)量與矩陣中的每個(gè)元素之間按標(biāo)量規(guī)則逐個(gè)進(jìn)行。最終運(yùn)算結(jié)果是一個(gè)與矩陣同維的矩陣,其元素由1或0組成。(5) 邏輯非是單目運(yùn)算符,也服從矩陣運(yùn)算規(guī)則。(6) 在算術(shù)、關(guān)系、邏輯運(yùn)算中,算

25、術(shù)運(yùn)算優(yōu)先級最高,邏輯運(yùn)算優(yōu)先級最低。  例2-9  建立矩陣A,然后找出大于4的元素的位置。(1) 建立矩陣A。A=4,-65,-54,0,6;56,0,67,-45,0(2) 找出大于4的元素的位置。find(A>4)  2.4 矩陣分析2.4.1  對角陣與三角陣1對角陣只有對角線上有非0元素的矩陣稱為對角矩陣,對角線上的元素相等的對角矩陣稱為數(shù)量矩陣,對角線上的元素都為1的對角矩陣稱為單位矩陣。  (1) 提取矩陣的對角線元素設(shè)A為m×n矩陣,diag(A)函數(shù)用于提取矩陣A主對角線元素,產(chǎn)生一個(gè)具有min(m,n)個(gè)元

26、素的列向量。diag(A)函數(shù)還有一種形式diag(A,k),其功能是提取第k條對角線的元素。(2) 構(gòu)造對角矩陣設(shè)V為具有m個(gè)元素的向量,diag(V)將產(chǎn)生一個(gè)m×m對角矩陣,其主對角線元素即為向量V的元素。diag(V)函數(shù)也有另一種形式diag(V,k),其功能是產(chǎn)生一個(gè)n×n(n=m+)對角陣,其第k條對角線的元素即為向量V的元素。  例2-10  先建立5×5矩陣A,然后將A的第一行元素乘以1,第二行乘以2,第五行乘以5。A=17,0,1,0,15;23,5,7,14,16;4,0,13,0,22;10,12,19,21,3;.11

27、,18,25,2,19;D=diag(1:5);D*A                %用D左乘A,對A的每行乘以一個(gè)指定常數(shù)<!-if !supportLineBreakNewLine-><!-endif->  2三角陣三角陣又進(jìn)一步分為上三角陣和下三角陣,所謂上三角陣,即矩陣的對角線以下的元素全為0的一種矩陣,而下三角陣則是對角線以上的元素全為0的一種矩陣。  (1) 上三角矩陣求矩陣A的上三角陣的

28、MATLAB函數(shù)是triu(A)。triu(A)函數(shù)也有另一種形式triu(A,k),其功能是求矩陣A的第k條對角線以上的元素。例如,提取矩陣A的第2條對角線以上的元素,形成新的矩陣B。(2) 下三角矩陣在MATLAB中,提取矩陣A的下三角矩陣的函數(shù)是tril(A)和tril(A,k),其用法與提取上三角矩陣的函數(shù)triu(A)和triu(A,k)完全相同。  2.4.2  矩陣的轉(zhuǎn)置與旋轉(zhuǎn)1矩陣的轉(zhuǎn)置轉(zhuǎn)置運(yùn)算符是單撇號()。2矩陣的旋轉(zhuǎn)利用函數(shù)rot90(A,k)將矩陣A旋轉(zhuǎn)90o的k倍,當(dāng)k為1時(shí)可省略。3矩陣的左右翻轉(zhuǎn)對矩陣實(shí)施左右翻轉(zhuǎn)是將原矩陣的第一列和最后一列調(diào)換

29、,第二列和倒數(shù)第二列調(diào)換,依次類推。MATLAB對矩陣A實(shí)施左右翻轉(zhuǎn)的函數(shù)是fliplr(A)。4矩陣的上下翻轉(zhuǎn)MATLAB對矩陣A實(shí)施上下翻轉(zhuǎn)的函數(shù)是flipud(A)。  2.4.3  矩陣的逆與偽逆1矩陣的逆對于一個(gè)方陣A,如果存在一個(gè)與其同階的方陣B,使得:A·B=B·A=I (I為單位矩陣)則稱B為A的逆矩陣,當(dāng)然,A也是B的逆矩陣。求一個(gè)矩陣的逆是一件非常煩瑣的工作,容易出錯(cuò),但在MATLAB中,求一個(gè)矩陣的逆非常容易。求方陣A的逆矩陣可調(diào)用函數(shù)inv(A)。例2-11  用求逆矩陣的方法解線性方程組。Ax=b其解為:x=A-1b&

30、#160; 2矩陣的偽逆如果矩陣A不是一個(gè)方陣,或者A是一個(gè)非滿秩的方陣時(shí),矩陣A沒有逆矩陣,但可以找到一個(gè)與A的轉(zhuǎn)置矩陣A同型的矩陣B,使得:A·B·A=AB·A·B=B此時(shí)稱矩陣B為矩陣A的偽逆,也稱為廣義逆矩陣。在MATLAB中,求一個(gè)矩陣偽逆的函數(shù)是pinv(A)。  2.4.4 方陣的行列式把一個(gè)方陣看作一個(gè)行列式,并對其按行列式的規(guī)則求值,這個(gè)值就稱為矩陣所對應(yīng)的行列式的值。在MATLAB中,求方陣A所對應(yīng)的行列式的值的函數(shù)是det(A)。  2.4.5  矩陣的秩與跡1矩陣的秩矩陣線性無關(guān)的行數(shù)與列數(shù)稱為矩陣的

31、秩。在MATLAB中,求矩陣秩的函數(shù)是rank(A)。2矩陣的跡矩陣的跡等于矩陣的對角線元素之和,也等于矩陣的特征值之和。在MATLAB中,求矩陣的跡的函數(shù)是trace(A)。  2.4.6  向量和矩陣的范數(shù)矩陣或向量的范數(shù)用來度量矩陣或向量在某種意義下的長度。范數(shù)有多種方法定義,其定義不同,范數(shù)值也就不同。  1向量的3種常用范數(shù)及其計(jì)算函數(shù)在MATLAB中,求向量范數(shù)的函數(shù)為:(1) norm(V)或norm(V,2):計(jì)算向量V的2范數(shù)。(2) norm(V,1):計(jì)算向量V的1范數(shù)。(3) norm(V,inf):計(jì)算向量V的范數(shù)。2矩陣的范數(shù)及其計(jì)算函

32、數(shù)MATLAB提供了求3種矩陣范數(shù)的函數(shù),其函數(shù)調(diào)用格式與求向量的范數(shù)的函數(shù)完全相同。2.4.7  矩陣的條件數(shù)在MATLAB中,計(jì)算矩陣A的3種條件數(shù)的函數(shù)是:(1) cond(A,1)   計(jì)算A的1范數(shù)下的條件數(shù)。(2) cond(A)或cond(A,2)   計(jì)算A的2范數(shù)數(shù)下的條件數(shù)。(3) cond(A,inf)   計(jì)算A的 范數(shù)下的條件數(shù)。  2.4.8  矩陣的特征值與特征向量在MATLAB中,計(jì)算矩陣A的特征值和特征向量的函數(shù)是eig(A),常用的調(diào)用格式有3種:(1) E=eig(A

33、):求矩陣A的全部特征值,構(gòu)成向量E。(2) V,D=eig(A):求矩陣A的全部特征值,構(gòu)成對角陣D,并求A的特征向量構(gòu)成V的列向量。(3) V,D=eig(A,nobalance):與第2種格式類似,但第2種格式中先對A作相似變換后求矩陣A的特征值和特征向量,而格式3直接求矩陣A的特征值和特征向量。  例2-12  用求特征值的方法解方程。3x5-7x4+5x2+2x-18=0p=3,-7,0,5,2,-18;A=compan(p);           %A的伴隨矩陣x

34、1=eig(A)              %求A的特征值x2=roots(p)                 %直接求多項(xiàng)式p的零點(diǎn)  2.5 矩陣的超越函數(shù)1矩陣平方根sqrtmsqrtm(A)計(jì)算矩陣A的平方根。2矩陣對數(shù)logmlogm(A)計(jì)算矩陣A的自然對數(shù)。此函數(shù)輸入?yún)?shù)的條件與輸出

35、結(jié)果間的關(guān)系和函數(shù)sqrtm(A)完全一樣3矩陣指數(shù)expm、expm1、expm2、expm3expm(A)、expm1(A)、expm2(A)、expm3(A)的功能都求矩陣指數(shù)eA。4普通矩陣函數(shù)funmfunm(A,fun)用來計(jì)算直接作用于矩陣A的由fun指定的超越函數(shù)值。當(dāng)fun取sqrt時(shí),funm(A,sqrt)可以計(jì)算矩陣A的平方根,與sqrtm(A)的計(jì)算結(jié)果一樣。  2.6  字符串    在MATLAB中,字符串是用單撇號括起來的字符序列。MATLAB將字符串當(dāng)作一個(gè)行向量,每個(gè)元素對應(yīng)一個(gè)字符,其標(biāo)識方法和數(shù)值向量相同

36、。也可以建立多行字符串矩陣。  字符串是以ASCII碼形式存儲的。abs和double函數(shù)都可以用來獲取字符串矩陣所對應(yīng)的ASCII碼數(shù)值矩陣。相反,char函數(shù)可以把ASCII碼矩陣轉(zhuǎn)換為字符串矩陣。  例2-13  建立一個(gè)字符串向量,然后對該向量做如下處理:(1) 取第15個(gè)字符組成的子字符串。(2) 將字符串倒過來重新排列。(3) 將字符串中的小寫字母變成相應(yīng)的大寫字母,其余字符不變。(4) 統(tǒng)計(jì)字符串中小寫字母的個(gè)數(shù)。  命令如下:ch=ABc123d4e56Fg9;subch=ch(1:5)    &#

37、160;      %取子字符串revch=ch(end:-1:1)       %將字符串倒排k=find(ch>=a&ch<=z);     %找小寫字母的位置ch(k)=ch(k)-(a-A);         %將小寫字母變成相應(yīng)的大寫字母char(ch)       &

38、#160;        length(k)                  %統(tǒng)計(jì)小寫字母的個(gè)數(shù)    與字符串有關(guān)的另一個(gè)重要函數(shù)是eval,其調(diào)用格式為:    eval(t)其中t為字符串。它的作用是把字符串的內(nèi)容作為對應(yīng)的MATLAB語句來執(zhí)行。  2.7  結(jié)構(gòu)數(shù)據(jù)

39、和單元數(shù)據(jù)2.7.1  結(jié)構(gòu)數(shù)據(jù)1結(jié)構(gòu)矩陣的建立與引用結(jié)構(gòu)矩陣的元素可以是不同的數(shù)據(jù)類型,它能將一組具有不同屬性的數(shù)據(jù)納入到一個(gè)統(tǒng)一的變量名下進(jìn)行管理。建立一個(gè)結(jié)構(gòu)矩陣可采用給結(jié)構(gòu)成員賦值的辦法。具體格式為:結(jié)構(gòu)矩陣名.成員名=表達(dá)式其中表達(dá)式應(yīng)理解為矩陣表達(dá)式。  2結(jié)構(gòu)成員的修改可以根據(jù)需要增加或刪除結(jié)構(gòu)的成員。例如要給結(jié)構(gòu)矩陣a增加一個(gè)成員x4,可給a中任意一個(gè)元素增加成員x4:a(1).x4=410075;但其他成員均為空矩陣,可以使用賦值語句給它賦確定的值。要刪除結(jié)構(gòu)的成員,則可以使用rmfield函數(shù)來完成。例如,刪除成員x4:a=rmfield(a,x4);3

40、關(guān)于結(jié)構(gòu)的函數(shù)除了一般的結(jié)構(gòu)數(shù)據(jù)的操作外,MATLAB還提供了部分函數(shù)來進(jìn)行結(jié)構(gòu)矩陣的操作。  2.7.2  單元數(shù)據(jù)1單元矩陣的建立與引用建立單元矩陣和一般矩陣相似,只是矩陣元素用大括號括起來??梢杂脦в写罄ㄌ栂聵?biāo)的形式引用單元矩陣元素。例如b3,3。單元矩陣的元素可以是結(jié)構(gòu)或單元數(shù)據(jù)。可以使用celldisp函數(shù)來顯示整個(gè)單元矩陣,如celldisp(b)。還可以刪除單元矩陣中的某個(gè)元素。2關(guān)于單元的函數(shù)MATLAB還提供了部分函數(shù)用于單元的操作。  2.8 稀疏矩陣2.8.1  矩陣存儲方式MATLAB的矩陣有兩種存儲方式:完全存儲方式和稀疏存儲方

41、式。1完全存儲方式完全存儲方式是將矩陣的全部元素按列存儲。以前講到的矩陣的存儲方式都是按這個(gè)方式存儲的,此存儲方式對稀疏矩陣也適用。  2稀疏存儲方式稀疏存儲方式僅存儲矩陣所有的非零元素的值及其位置,即行號和列號。在MATLAB中,稀疏存儲方式也是按列存儲的。注意,在講稀疏矩陣時(shí),有兩個(gè)不同的概念,一是指矩陣的0元素較多,該矩陣是一個(gè)具有稀疏特征的矩陣,二是指采用稀疏方式存儲的矩陣。  2.8.2  稀疏存儲方式的產(chǎn)生1將完全存儲方式轉(zhuǎn)化為稀疏存儲方式函數(shù)A=sparse(S)將矩陣S轉(zhuǎn)化為稀疏存儲方式的矩陣A。當(dāng)矩陣S是稀疏存儲方式時(shí),則函數(shù)調(diào)用相當(dāng)于A=S。s

42、parse函數(shù)還有其他一些調(diào)用格式:sparse(m,n):生成一個(gè)m×n的所有元素都是0的稀疏矩陣。sparse(u,v,S)-:u,v,S是3個(gè)等長的向量。S是要建立的稀疏矩陣的非0元素,u(i)、v(i)分別是S(i)的行和列下標(biāo),該函數(shù)建立一個(gè)max(u)行、max(v)列并以S為稀疏元素的稀疏矩陣。此外,還有一些和稀疏矩陣操作有關(guān)的函數(shù)。例如u,v,S=find(A):返回矩陣A中非0元素的下標(biāo)和元素。這里產(chǎn)生的u,v,S可作為sparse(u,v,S)的參數(shù)。full(A):返回和稀疏存儲矩陣A對應(yīng)的完全存儲方式矩陣。  2產(chǎn)生稀疏存儲矩陣只把要建立的稀疏矩陣的

43、非0元素及其所在行和列的位置表示出來后由MATLAB自己產(chǎn)生其稀疏存儲,這需要使用spconvert函數(shù)。調(diào)用格式為:B=spconvert(A)其中A為一個(gè)m×3或m×4的矩陣,其每行表示一個(gè)非0元素,m是非0元素的個(gè)數(shù),A每個(gè)元素的意義是:(i,1)  第i個(gè)非0元素所在的行。(i,2)  第i個(gè)非0元素所在的列。(i,3)  第i個(gè)非0元素值的實(shí)部。(i,4)  第i個(gè)非0元素值的虛部,若矩陣的全部元素都是實(shí)數(shù),則無須第四列。該函數(shù)將A所描述的一個(gè)稀疏矩陣轉(zhuǎn)化為一個(gè)稀疏存儲矩陣。  例2-15  根據(jù)表示稀疏

44、矩陣的矩陣A,產(chǎn)生一個(gè)稀疏存儲方式矩陣B。命令如下:A=2,2,1;3,1,-1;4,3,3;5,3,8;6,6,12;B=spconvert(A)  3帶狀稀疏存儲矩陣用spdiags函數(shù)產(chǎn)生帶狀稀疏矩陣的稀疏存儲,調(diào)用格式是:A=spdiags(B,d,m,n)其中,參數(shù)m,n為原帶狀矩陣的行數(shù)與列數(shù)。B為r×p階矩陣,這里r=min(m,n),p為原帶狀矩陣所有非零對角線的條數(shù),矩陣B的第i列即為原帶狀矩陣的第i條非零對角線。  4單位矩陣的稀疏存儲單位矩陣只有對角線元素為1,其他元素都為0,是一種具有稀疏特征的矩陣。函數(shù)eye產(chǎn)生一個(gè)完全存儲方式的單位矩陣

45、。MATLAB還有一個(gè)產(chǎn)生稀疏存儲方式的單位矩陣的函數(shù),這就是speye。函數(shù)speye(m,n)返回一個(gè)m×n的稀疏存儲單位矩陣。  2.8.3  稀疏矩陣應(yīng)用舉例稀疏存儲矩陣只是矩陣的存儲方式不同,它的運(yùn)算規(guī)則與普通矩陣是一樣的。所以,在運(yùn)算過程中,稀疏存儲矩陣可以直接參與運(yùn)算。當(dāng)參與運(yùn)算的對象不全是稀疏存儲矩陣時(shí),所得結(jié)果一般是完全存儲形式。第3章  MATLAB程序設(shè)計(jì)3.1  M文件3.2  程序控制結(jié)構(gòu)3.3 函數(shù)文件3.4 程序舉例3.5 程序調(diào)試  3.1  M文件3.1.1  M文件概述

46、    用MATLAB語言編寫的程序,稱為M文件。M文件可以根據(jù)調(diào)用方式的不同分為兩類:命令文件(Script File)和函數(shù)文件(Function File)。  例3-1  分別建立命令文件和函數(shù)文件,將華氏溫度f轉(zhuǎn)換為攝氏溫度c。程序1: 首先建立命令文件并以文件名f2c.m存盤。clear;            %清除工作空間中的變量f=input('Input Fahrenheit temperature:'

47、;);c=5*(f-32)/9然后在MATLAB的命令窗口中輸入f2c,將會執(zhí)行該命令文件,執(zhí)行情況為:Input Fahrenheit temperature:73c =   22.7778    程序2:首先建立函數(shù)文件f2c.m。function c=f2c(f)c=5*(f-32)/9然后在MATLAB的命令窗口調(diào)用該函數(shù)文件。clear;y=input('Input Fahrenheit temperature:');x=f2c(y)輸出情況為:Input Fahrenheit temperature:70c =

48、60;  21.1111x =   21.1111   3.1.2  M文件的建立與打開    M文件是一個(gè)文本文件,它可以用任何編輯程序來建立和編輯,而一般常用且最為方便的是使用MATLAB提供的文本編輯器。1建立新的M文件    為建立新的M文件,啟動MATLAB文本編輯器有3種方法:    (1) 菜單操作。從MATLAB主窗口的File菜單中選擇New菜單項(xiàng),再選擇M-file命令,屏幕上將出現(xiàn)MATLAB 文本編輯器窗口。 &

49、#160;  (2) 命令操作。在MATLAB命令窗口輸入命令edit,啟動MATLAB文本編輯器后,輸入M文件的內(nèi)容并存盤。    (3) 命令按鈕操作。單擊MATLAB主窗口工具欄上的New M-File命令按鈕,啟動MATLAB文本編輯器后,輸入M文件的內(nèi)容并存盤。   2打開已有的M文件    打開已有的M文件,也有3種方法:    (1) 菜單操作。從MATLAB主窗口的File菜單中選擇Open命令,則屏幕出現(xiàn)Open對話框,在Open對話框中選中所需打開的M文件

50、。在文檔窗口可以對打開的M文件進(jìn)行編輯修改,編輯完成后,將M文件存盤。    (2) 命令操作。在MATLAB命令窗口輸入命令:edit 文件名,則打開指定的M文件。    (3) 命令按鈕操作。單擊MATLAB主窗口工具欄上的Open File命令按鈕,再從彈出的對話框中選擇所需打開的M文件。   3.2  程序控制結(jié)構(gòu)3.2.1  順序結(jié)構(gòu)1數(shù)據(jù)的輸入從鍵盤輸入數(shù)據(jù),則可以使用input函數(shù)來進(jìn)行,該函數(shù)的調(diào)用格式為:    A=input(提示信息,選項(xiàng));其

51、中提示信息為一個(gè)字符串,用于提示用戶輸入什么樣的數(shù)據(jù)。    如果在input函數(shù)調(diào)用時(shí)采用's'選項(xiàng),則允許用戶輸入一個(gè)字符串。例如,想輸入一個(gè)人的姓名,可采用命令:xm=input('What''s your name?','s');   2數(shù)據(jù)的輸出    MATLAB提供的命令窗口輸出函數(shù)主要有disp函數(shù),其調(diào)用格式為    disp(輸出項(xiàng))其中輸出項(xiàng)既可以為字符串,也可以為矩陣。   &#

52、160;   例3-2  輸入x,y的值,并將它們的值互換后輸出。    程序如下:    x=input('Input x please.');    y=input('Input y please.');    z=x;    x=y;    y=z;    disp(x);    disp(

53、y);   例3-3  求一元二次方程ax2 +bx+c=0的根。程序如下:a=input('a=?');b=input('b=?');c=input('c=?');d=b*b-4*a*c;x=(-b+sqrt(d)/(2*a),(-b-sqrt(d)/(2*a);disp('x1=',num2str(x(1),',x2=',num2str(x(2);   3程序的暫停    暫停程序的執(zhí)行可以使用pause函數(shù),其調(diào)用格式為:

54、0;   pause(延遲秒數(shù))    如果省略延遲時(shí)間,直接使用pause,則將暫停程序,直到用戶按任一鍵后程序繼續(xù)執(zhí)行。    若要強(qiáng)行中止程序的運(yùn)行可使用Ctrl+C命令。   3.2.2  選擇結(jié)構(gòu)1if語句    在MATLAB中,if語句有3種格式。    (1) 單分支if語句:if  條件        語句組  

55、;  end當(dāng)條件成立時(shí),則執(zhí)行語句組,執(zhí)行完之后繼續(xù)執(zhí)行if語句的后繼語句,若條件不成立,則直接執(zhí)行if語句的后繼語句。       (2) 雙分支if語句:if  條件        語句組1    else         語句組2    end    當(dāng)條件成立時(shí),執(zhí)行語句組1,否

56、則執(zhí)行語句組2,語句組1或語句組2執(zhí)行后,再執(zhí)行if語句的后繼語句。       例3-4  計(jì)算分段函數(shù)的值。    程序如下:x=input('請輸入x的值:');if x<=0   y= (x+sqrt(pi)/exp(2);else   y=log(x+sqrt(1+x*x)/2;endY    (3) 多分支if語句:if  條件1     &#

57、160;  語句組1    elseif  條件2        語句組2           elseif  條件m         語句組m    else         語句組n&#

58、160;   end語句用于實(shí)現(xiàn)多分支選擇結(jié)構(gòu)。      例3-5  輸入一個(gè)字符,若為大寫字母,則輸出其對應(yīng)的小寫字母;若為小寫字母,則輸出其對應(yīng)的大寫字母;若為數(shù)字字符則輸出其對應(yīng)的數(shù)值,若為其他字符則原樣輸出。c=input('請輸入一個(gè)字符','s');if c>='A' & c<='Z'   disp(setstr(abs(c)+abs('a')-abs('A');elseif

59、c>='a'& c<='z'    disp(setstr(abs(c)- abs('a')+abs('A');elseif c>='0'& c<='9'    disp(abs(c)-abs('0');else    disp(c);end   2switch語句    switch語句根據(jù)表達(dá)式的取值不

60、同,分別執(zhí)行不同的語句,其語句格式為:    switch  表達(dá)式       case  表達(dá)式1          語句組1       case  表達(dá)式2          語句組2    

61、             case  表達(dá)式m          語句組m       otherwise          語句組n    end   當(dāng)表達(dá)式的值等于表達(dá)式1的值時(shí),執(zhí)行

62、語句組1,當(dāng)表達(dá)式的值等于表達(dá)式2的值時(shí),執(zhí)行語句組2,當(dāng)表達(dá)式的值等于表達(dá)式m的值時(shí),執(zhí)行語句組m,當(dāng)表達(dá)式的值不等于case所列的表達(dá)式的值時(shí),執(zhí)行語句組n。當(dāng)任意一個(gè)分支的語句執(zhí)行完后,直接執(zhí)行switch語句的下一句。   例3-6  某商場對顧客所購買的商品實(shí)行打折銷售,標(biāo)準(zhǔn)如下(商品價(jià)格用price來表示):      price<200           沒有折扣    20

63、0price<500      3%折扣    500price<1000     5%折扣    1000price<2500    8%折扣    2500price<5000    10%折扣5000price         14%折扣輸入所售商品

64、的價(jià)格,求其實(shí)際銷售價(jià)格。       程序如下:price=input('請輸入商品價(jià)格');switch fix(price/100)    case 0,1             %價(jià)格小于200      rate=0;   case 2,3,4     

65、0;      %價(jià)格大于等于200但小于500      rate=3/100;   case num2cell(5:9)       %價(jià)格大于等于500但小于1000      rate=5/100;   case num2cell(10:24)     %價(jià)格大于等于1000但小于2500 

66、     rate=8/100;   case num2cell(25:49)     %價(jià)格大于等于2500但小于5000      rate=10/100;   otherwise               %價(jià)格大于等于5000    

67、60; rate=14/100;endprice=price*(1-rate)              %輸出商品實(shí)際銷售價(jià)格   3try語句語句格式為:try   語句組1catch   語句組2endtry語句先試探性執(zhí)行語句組1,如果語句組1在執(zhí)行過程中出現(xiàn)錯(cuò)誤,則將錯(cuò)誤信息賦給保留的lasterr變量,并轉(zhuǎn)去執(zhí)行語句組2。   例3-7  矩陣乘法運(yùn)算要求兩矩陣的維

68、數(shù)相容,否則會出錯(cuò)。先求兩矩陣的乘積,若出錯(cuò),則自動轉(zhuǎn)去求兩矩陣的點(diǎn)乘。程序如下:A=1,2,3;4,5,6; B=7,8,9;10,11,12;try   C=A*B;catch   C=A.*B;endClasterr                %顯示出錯(cuò)原因   3.2.3  循環(huán)結(jié)構(gòu)1for語句for語句的格式為:for 循環(huán)變量=表達(dá)式1:表達(dá)式2:表達(dá)式3

69、60;       循環(huán)體語句    end其中表達(dá)式1的值為循環(huán)變量的初值,表達(dá)式2的值為步長,表達(dá)式3的值為循環(huán)變量的終值。步長為1時(shí),表達(dá)式2可以省略。   例3-8  一個(gè)三位整數(shù)各位數(shù)字的立方和等于該數(shù)本身則稱該數(shù)為水仙花數(shù)。輸出全部水仙花數(shù)。    程序如下:for m=100:999m1=fix(m/100);           %

70、求m的百位數(shù)字m2=rem(fix(m/10),10);   %求m的十位數(shù)字m3=rem(m,10);             %求m的個(gè)位數(shù)字if m=m1*m1*m1+m2*m2*m2+m3*m3*m3disp(m)endend   例3-9  已知 ,當(dāng)n=100時(shí),求y的值。    程序如下:y=0;n=100;for i=1:n  y=y+1/(2*i-1);endy

71、0;      在實(shí)際MATLAB編程中,采用循環(huán)語句會降低其執(zhí)行速度,所以前面的程序通常由下面的程序來代替:n=100;i=1:2:2*n-1;y=sum(1./i);y   for語句更一般的格式為:    for 循環(huán)變量=矩陣表達(dá)式       循環(huán)體語句    end    執(zhí)行過程是依次將矩陣的各列元素賦給循環(huán)變量,然后執(zhí)行循環(huán)體語句,直至各列元素處理完畢。 

72、60;     例3-10  寫出下列程序的執(zhí)行結(jié)果。    s=0;    a=12,13,14;15,16,17;18,19,20;21,22,23;    for k=a       s=s+k;    end    disp(s');   2while語句    while語句的一般

73、格式為:    while (條件)         循環(huán)體語句    end    其執(zhí)行過程為:若條件成立,則執(zhí)行循環(huán)體語句,執(zhí)行后再判斷條件是否成立,如果不成立則跳出循環(huán)。       例3-11  從鍵盤輸入若干個(gè)數(shù),當(dāng)輸入0時(shí)結(jié)束輸入,求這些數(shù)的平均值和它們之和。程序如下:sum=0;cnt=0;val=input('Enter a number (

74、end in 0):');while (val=0)     sum=sum+val;     cnt=cnt+1;     val=input('Enter a number (end in 0):');endif (cnt > 0)    sum    mean=sum/cntend   3break語句和continue語句    與循環(huán)結(jié)構(gòu)相關(guān)的語句還有break語句和continue語句。它們一般與if語句配合使用。break語句用于終止循環(huán)的執(zhí)行。當(dāng)在循環(huán)體內(nèi)執(zhí)行到該語句時(shí),程序?qū)⑻鲅h(huán),繼續(xù)執(zhí)行循環(huán)語句的下一語句。continue語句控制跳過循環(huán)體

溫馨提示

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

評論

0/150

提交評論