MATLABch04MATLAB程序設(shè)計基礎(chǔ)知識20080621電子教案_第1頁
MATLABch04MATLAB程序設(shè)計基礎(chǔ)知識20080621電子教案_第2頁
MATLABch04MATLAB程序設(shè)計基礎(chǔ)知識20080621電子教案_第3頁
MATLABch04MATLAB程序設(shè)計基礎(chǔ)知識20080621電子教案_第4頁
MATLABch04MATLAB程序設(shè)計基礎(chǔ)知識20080621電子教案_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Good is good, but better carries it.精益求精,善益求善。MATLABch04MATLAB程序設(shè)計基礎(chǔ)知識20080621-Matlab-ch04(MATLAB程序設(shè)計-基礎(chǔ)知識)第4講MATLAB程序設(shè)計-基礎(chǔ)知識內(nèi)容提要:本章主要介紹MATLAB程序設(shè)計的有關(guān)基礎(chǔ)知識。重點及難點:MATLAB作為一種高級應(yīng)用軟件,除了命令行操作的直接交互方式以外,還有自己的編程語言。為了充分發(fā)揮和體現(xiàn)MATLAB的功能,必須掌握MATLAB的程序設(shè)計。本講詳細介紹MATLAB程序設(shè)計的基本知識,通過本章的學習,可以掌握關(guān)于MATLAB程序設(shè)計的方法,增強設(shè)計應(yīng)用程序的能力

2、。MATLAB不僅是一個功能強大的工具軟件,更是一種高效的編程語言。MATLAB的編程效率比常用的BASIC、C、FORTRAN和PASCAL等語言要高得多,而且容易維護。MATLAB軟件即MATLAB語言的編程環(huán)境,M文件也就是用MATLAB語言編寫的程序代碼文件。4.1MATLAB的變量和表達式一、MATLAB的變量及其類型1、變量命名規(guī)則在MATLAB中,對變量(包括函數(shù))命名時應(yīng)遵循以下規(guī)則:(1)變量名(包括函數(shù)名)對字母的大小寫敏感,即MATLAB區(qū)分字母的大小寫;(2)變量名的第一個字符必須為英文字母,而且不能超過31個字符;(3)變量名由英文字母、數(shù)字和下劃線組成,即變量名可以

3、包含下連字符、數(shù)字,但不能為空格符(Backspace)和標點。例如,my_var_30就是合法的變量名。2、局部變量和全局變量(1)局部變量只在每個函數(shù)體內(nèi)定義、使用,而不能從其他函數(shù)和MATLAB工作空間訪問的變量稱為局部變量。(2)全局變量在多個函數(shù)及MATLAB函數(shù)中都能使用的變量稱為全局變量。通常每個函數(shù)體內(nèi)都有自己定義的變量,不能從其他函數(shù)和MATLAB工作空間訪問這些變量,這就是局部變量。如果要使某個變量在幾個函數(shù)及MATLAB函數(shù)中都能使用,它就是全局變量。(3)局部變量和全局變量的區(qū)別全局變量名應(yīng)盡可能大寫,并用“global聲明。如果要在幾個函數(shù)和MATLAB的工作空間中都

4、能訪問一個全局變量,則需在每個函數(shù)和MATLAB工作空間中都聲明該變量是全局變量。全局變量要在函數(shù)體的變量賦值語句之前說明,整個函數(shù)以及所有對函數(shù)的遞歸調(diào)用都可以利用全局變量。【注意】:在實際編程中,應(yīng)盡量避免使用全局變量,因為全局變量的值一旦改動,則在其他包括該變量的函數(shù)中都將改變,這樣有可能會出現(xiàn)不可預見的情況。3、永久變量/預定義變量PredefinedVariable定義變量時,有些MATLAB的保留字符不能用,其中有一部分就是MATLAB的永久變量,也稱為預定義變量(PredefinedVariable)。每當MATLAB啟動時,系統(tǒng)自動定義變量,駐留于內(nèi)存中。它們不會被命令clea

5、r清除(永久變量的名稱就源于此)。系統(tǒng)也可以為這些永久變量賦值,但所賦的值可以用clear命令清除,從而恢復系統(tǒng)預定義的值(預定義變量的名字就反映這個意思)。常見的永久變量見表4-1。表4-1MATLAB的永久變量變量名含義ans預設(shè)的計算結(jié)果的變量名(計算結(jié)果的缺省變量名)EpsMATLAB定義的正的極小值=2.2204e-16pi內(nèi)建的值(圓周率)Inf或inf值,無限大,定義為SKIPIF10NaN或nan無法定義一個數(shù)目,非數(shù)(NotaNumber),如0/0i或j虛數(shù)單位SKIPIF1y=1/0無窮大的使用Warning:Dividebyzero.Y=Inf1/y無窮大的作用和ans

6、變量的使用ans=0【說明】:(1)在MATLAB中,象1/0這樣的操作不會引起程序執(zhí)行中斷,只是在給出警告信息的同時,用一個永久變量inf來表示,而且這個變量和其他變量一樣,可在各種運算中發(fā)揮巨大的作用。(2)對于inf同樣可以當作一個變量來使用,此特點在編程中有很大作用。二、MATLAB基本表達式MATLAB采用的是表達式語言,用戶輸入的語句由MATLAB系統(tǒng)解釋運行。用戶可以在MATLAB的命令窗口中鍵入命令,也可以在編輯器內(nèi)編寫應(yīng)用程序,MATLAB軟件對此命令或程序中各條語句進行翻譯,然后在MATLAB環(huán)境下對它進行處理,最后返回運算結(jié)果。1、語句格式MATLAB語句由表達式和變量組

7、成,有兩種表示形式:表達式變量=表達式2、表達式書寫規(guī)則MATLAB書寫表達式的規(guī)則與“手寫算式”差不多相同,具體遵循以下規(guī)定:(1)表達式由變量名、運算符、數(shù)字和函數(shù)名組成;(2)表達式將按常規(guī)的優(yōu)先級從左至右執(zhí)行運算;(3)優(yōu)先級的規(guī)定是:指數(shù)運算級別最高,乘除運算次之,加減運算級別最低;(4)括號可以改變運算順序;(5)書寫表達式時,賦值符“=”和運算符兩側(cè)允許有空格,以增加可讀性。但在復數(shù)或符號表達式中要盡量避免,以防出錯;(6)表達式的末尾可加上“;”,也可以不加。有“;”時,MATLAB系統(tǒng)不顯示計算結(jié)果,而是直接把數(shù)值賦給變量,如果沒有用變量就無法看到結(jié)果;沒有“;”時,MATL

8、AB系統(tǒng)將會在該條語句的下面直接顯示運算結(jié)果。3、說明(1)在MATLAB語句的第一種形式中,表達式運算后產(chǎn)生的結(jié)果如果是矩陣或其他數(shù)值類型,MATLAB系統(tǒng)將會自動賦給變量名為ans,并顯示在屏幕上。ans是一個默認的永久變量,它會在以后類似的操作中被自動覆蓋掉,所以重要的結(jié)果一定要記錄下來,也就是使用第二種形式。(2)在MATLAB語句的第二種形式中,“=”右邊的表達式計算后產(chǎn)生的結(jié)果,MATLAB系統(tǒng)會自動賦給“=”左邊的變量,然后存入內(nèi)存中,并顯示在屏幕上。(3)MATLAB語言與C語言不同,它允許一次返回多個結(jié)果,這時“=”左邊是用“”括起來的變量列表,例如命令函數(shù):X,Y,Z=pe

9、aks;它返回了坐標列向量X,Y,Z的值。例4-2example4_2.m創(chuàng)建一個表達式。x=(3*42+exp(sin(45)/6x=8.3903(4)如果一個表達式過長,也可以在結(jié)尾加上.(代表此行指令與下一行連續(xù)),例如3*82-8*9.6ans=1204.2MATLAB數(shù)組及其類型一、MATLAB的數(shù)據(jù)結(jié)構(gòu)MATLAB是一種面向數(shù)組(Array)的編程語言,其數(shù)據(jù)類型的最大特點是每一種類型都以數(shù)組為基礎(chǔ),從數(shù)組中派生出來的,事實上,MATLAB把每種類型的數(shù)據(jù)都作為數(shù)組來處理。1、數(shù)據(jù)結(jié)構(gòu)的類型圖4-1在MATLAB中,有6種基本的數(shù)據(jù)類型,即:char(字符)、double(雙精度數(shù)

10、值)、sparse(稀疏數(shù)據(jù))、storage(存儲型)、cell(單元數(shù)組)和Struct(結(jié)構(gòu))。數(shù)據(jù)類型間的關(guān)系如圖4-1所示。2、有關(guān)說明(1)存儲型是一個虛擬數(shù)據(jù)類型,它包括int8(8位整型)、uint8(無符號8位整型)、intl6(16位整型)、uintl6(無符號16位控型)、iht32(32位整型)和uint32(無符號32位整型)。(2)最常用的數(shù)據(jù)類型只有雙精度型和字符型,所有MATLAB計算都把數(shù)據(jù)當作雙精度型處理。(3)無符號8位整型一般用于儲存圖像數(shù)據(jù)。(4)稀疏數(shù)據(jù)一般用于處理稀疏矩陣。(5)單元數(shù)組和結(jié)構(gòu)數(shù)組一般用在大型程序中。(6)儲型數(shù)組一般只用于內(nèi)存的有

11、效儲存,可對這些類型的數(shù)組進行操作,但不能進行任何數(shù)學運算,否則必須用double函數(shù)把它轉(zhuǎn)換為雙精度類型。3、數(shù)組之間的差別MATLAB的數(shù)組有:字符串數(shù)組(CharacterStringArray)、單元數(shù)組(CellArray)、結(jié)構(gòu)數(shù)組(StructureArray)和數(shù)值數(shù)組(NumericArmy),它們之間的基本差別如表4-2所示。二、字符串數(shù)組對于MATLAB編程來說,字符處理必不可少。對于字符串的使用應(yīng)符合以下規(guī)定:(1)所有字符串都用單引號括起來;(2)字符串中的每個字符都是字符串變量(矩陣或向量)中的一個元素;(3)字符串中的字符以ASCII碼形式儲存并區(qū)分大小。用函數(shù)a

12、bs可以看到字符的ASCII碼。MATLAB有強大的字符處理功能,其字符串處理函數(shù)如表4-3所示。表4-3字符串處理函數(shù)1、字符串數(shù)組的建立(1)直接賦值法建立字符串數(shù)組建立字符串可通過直接賦值,先把待建的字符放在單引號中,然后直接賦值給變量。如:a=Thisisabooka=Thisisabook(2)建立中文字符串數(shù)組創(chuàng)建中文字符串時,字符外邊的單引號對必須在英文狀態(tài)下輸入。與英文字符一樣,每個中文字符也占一個元素位置,但應(yīng)注意此時的ASCII大于256。A=中國長城A=中國長城(3)建立帶單引號的字符串當字符串中的字符包含有(英文)單引號時,每個單引號符用連續(xù)的兩個單引號符表示。B=Ch

13、ina中國B=China中國(4)多行字符串的創(chuàng)建在直接創(chuàng)建多行字符串數(shù)組時,要保證同一字符串數(shù)組的各行字符數(shù)相等,即保證各行等長。如果不等長,則用空格符來調(diào)節(jié)其長度,使它們彼此相等。如:AB=中國;changchengAB=中國changcheng(5)利用字符串操作函數(shù)創(chuàng)建字符串數(shù)組在MATLAB中,有專用函數(shù)char、str2mat和strvcat創(chuàng)建多行字符串數(shù)組。這三個函數(shù)創(chuàng)建多行數(shù)組時,不必擔心每行字符是否相等,它們總會按最長行設(shè)置第二維的長度,其他行的尾部用空格填充。它們的調(diào)用格式為:S=char(TI,T2,T3,)S=str2mat(T1,T2,T3,)S=strvcat(T

14、1,T2,T3,)其中:T1,T2,T3,是字符串,在輸入時,T1,T2,T3,兩邊要加英文狀態(tài)下的單引號。(6)利用轉(zhuǎn)換函數(shù)建立字符串數(shù)組在MATLAB中,把數(shù)值數(shù)組轉(zhuǎn)化為字符串數(shù)組的常用函數(shù)為int2str、num2str、mat2str、char和double。函數(shù)命令char可把ASCII碼數(shù)組轉(zhuǎn)化為字符串數(shù)組;命令double可把其他任何數(shù)組轉(zhuǎn)化為數(shù)值數(shù)組。【說明】:中文字符能被命令char和double正確轉(zhuǎn)化。2、字符串數(shù)組的操作(1)字符串的連接字符串可以連接到一起組成更大的字符串。可以直接在中括號內(nèi)用逗號連接,也可以通過函數(shù)strcat連接。如:A=中國長城B=China中國

15、ab=A,B,第二個輸入是表示輸入空格字符串a(chǎn)b=中國長城China中國strcat(A,B)函數(shù)strcat連接,忽略原字符串結(jié)尾處的空格ans=中國長城China中國3、字符串數(shù)組元素的標識在一維字符串數(shù)組中,MATLAB按從左向右的順序用自然數(shù)數(shù)碼(1,2,3等)標識字符位置,其操作也用標識來進行。三、單元數(shù)組CellArray單元數(shù)組(CellArray)是一種比較特殊的MATLAB數(shù)組,該數(shù)組的基本成分是單元,它的每個元素都是一個單元,單元中包含其他MATLAB數(shù)組。每個單元本身在數(shù)組中是平等的,它們只能以下標區(qū)分。單元內(nèi)可以存放任何類型、任何大小的數(shù)組,而且同一單元數(shù)組內(nèi)各單元的內(nèi)

16、容可以不同。同數(shù)值數(shù)組一樣,單元數(shù)組的維數(shù)不受限制,可以是一維、二維或更高維。單元數(shù)組對單元的編址方法有單下標編址和全下標編址。對于單元數(shù)組來說,單元和單元里的內(nèi)容是兩個不同的范疇。因此,尋訪單元和尋訪單元內(nèi)容是兩種不同的操作。以二維單元數(shù)組為例,A(2,3)是指A單元數(shù)組中的第二行第三列單元元素;而A2,3是指A單元數(shù)組中的第二行第三列單元中所允許存或取的內(nèi)容。兩者的區(qū)別僅是用圓括號或是用花括號。1、單元數(shù)組的建立在MATLAB中,有三種方法來建立單元數(shù)組。(1)利用賦值語句建立單元數(shù)組賦值語句建立單元數(shù)組又有兩種不同的方式:用小括號括起單元的下標,在賦值語句的右側(cè)用花括號括起單元的內(nèi)容。如

17、:A(1,1)=Mtalab;單元(1,1),字符串A(1,2)=6.0;單元(1,2),標量,記錄版本號A(2,1)=矩陣;單元(2,1),中文字符串A(2,2)=234;23l4;548;單元(2,2),矩陣A列出矩陣AA=結(jié)果matlab6矩陣3x3double用花括號括起單元的下標,在賦值語句的右側(cè)直接指定單元的內(nèi)容。如上面命令可寫成:A1,1=matlab;單元(1,1)中的內(nèi)容A1,2=6.0;單元(1,2)中的內(nèi)容A2,2=矩陣;單元(2,1)中的內(nèi)容A2,2=234;2314;548;單元(2,2)中的內(nèi)容(2)利用花括號(單元數(shù)組法)建立單元數(shù)組在花括號中直接賦值,單元與單元

18、之間用逗號、空格或分號隔開,使用如下語句也可得出與上面相同的單元數(shù)組。A=matlab,6.0;矩陣,234;2314;548或A=matlab6.0;矩陣234;2314;548【說明】:上式中6.0后面的分號表示數(shù)組另起一行,不能用別的符號代替。(3)利用cell函數(shù)建立單元數(shù)組cell函數(shù)用來預分配指定大小的單元數(shù)組,其調(diào)用格式為:c=cell(n)建立nn的單元數(shù)組,單元是空矩陣;C=cell(m,n)或cell(m,n)建立mn的單元數(shù)組,單元是空矩陣;c=cell(m,n,p,)或cell(m,n,p,.)建立mnp的單元數(shù)組,單元是空矩陣;c=cell(size(A)建立和A大小

19、相同的單元數(shù)組。2、單元數(shù)組的訪問在MATLAB中,單元數(shù)組的訪問有兩種方式:(1)用內(nèi)容下標(花括號)訪問單元內(nèi)容A1,1訪問第(1,1)個單元中的內(nèi)容ans=matlab(2)用單元下標(小括號)訪問單元子集又如數(shù)組A:A(1,1)訪問第(1,1)個單元ans=matlabb=A(1:2,1)把單元數(shù)組A中第一列的兩個單元賦給b,b也成為單元數(shù)組b2=matlab矩陣3、單元數(shù)組的顯示單元數(shù)組中的內(nèi)容一般以壓縮的形式顯示。要形象地查看單元數(shù)組中的內(nèi)容,MATLAB提供了函數(shù)cellplot命令,而函數(shù)celldisp命令只是顯示單元數(shù)組全部或部分內(nèi)容。(1)cellplot函數(shù)【調(diào)用格式】

20、:圖4-2圖形方式顯示單元數(shù)組H=cellplot(C,legend);式中第二個輸入?yún)?shù)用于現(xiàn)實色彩圖例,該命令用大白方格表示單元,用小方格表示所存的數(shù)組元素,色彩表示數(shù)據(jù)屬性。如數(shù)組A用圖形方式顯示為:cellplot(A,legend)結(jié)果如圖4-2所示。(2)celldisp函數(shù)4、單元數(shù)組的操作在MATLAB中,可對單元數(shù)組進行一系列操作。如:(1)把單元(注意,不是單元內(nèi)容)設(shè)置為空來刪除該單元數(shù)組中的單元;(2)用函數(shù)reshape命令來改變單元數(shù)組的大小,但要注意改變形狀時數(shù)組中的元素個數(shù);(3)單元數(shù)組也可像一般數(shù)組那樣用方括號進行連接;(4)單元數(shù)組可代替用逗號或空格分隔的

21、變量列表;(5)如果數(shù)組中的多個單元是用花括號和冒號一起引用的,MATLAB則把每個單元的內(nèi)容看作一個獨立的變量。四、結(jié)構(gòu)數(shù)組StructureArrayMATLAB中的結(jié)構(gòu)數(shù)組(StructureArray)與單元數(shù)組一樣,能在一個數(shù)組存放各類數(shù)組。從一定意義上講,結(jié)構(gòu)數(shù)組組織數(shù)據(jù)的能力比單元數(shù)組更強、更富于變化。結(jié)構(gòu)數(shù)組的基本成分是結(jié)構(gòu)(Structure),數(shù)組中的每個結(jié)構(gòu)相等,它們以下標區(qū)分。結(jié)構(gòu)必須在劃分“域”后才能使用。數(shù)據(jù)不能直接存放在結(jié)構(gòu)上,而只能存放在域中。結(jié)構(gòu)的域可以存放任何類型、任何大小的數(shù)組,而且不同結(jié)構(gòu)的同名域中存放的內(nèi)容可以不同。1、結(jié)構(gòu)數(shù)組的建立(1)直接建立結(jié)構(gòu)

22、數(shù)組直接建立結(jié)構(gòu)和各個域,同時給各域賦值(也可以不賦值),結(jié)構(gòu)和域之間用點連接。在訪問結(jié)構(gòu)數(shù)組的各個域時,也是“結(jié)構(gòu)數(shù)組名.域名”的格式。當結(jié)構(gòu)帶有子域時,需完整地鍵入結(jié)構(gòu)名、域名、子域名,才能顯示域中的內(nèi)容。結(jié)構(gòu)數(shù)組的各個域可以按照其本身的數(shù)據(jù)類型進行相應(yīng)的各種運算。例4-5example4_5.m建立一橋梁混凝土試件強度的結(jié)構(gòu)數(shù)組。=XX大橋;域名為name,中文字符串,記錄橋名bridge.position=頂板;域名為position,中文字符串,記錄試件位置bridge.position.group=2組;子域名為group,字符串,記錄組數(shù)bridge.pos

23、ition.value=28.429.430.1;26.829.028.8;子域名value,記錄試件強度bridge得到結(jié)構(gòu)數(shù)組的內(nèi)容如下bridge=name:XX大橋position:1x1structbridge.position顯示域position中的內(nèi)容ans=group:2組value:2x3doublebridge.position.value顯示域value中的內(nèi)容ans=28.400029.400030.100026.800029.000028.8000(2)利用structure函數(shù)創(chuàng)建結(jié)構(gòu)數(shù)組除了上面所講述的直接建立結(jié)構(gòu)數(shù)組外,MATLAB還有一個專門建立結(jié)構(gòu)數(shù)組的函

24、數(shù)struct。該函數(shù)命令的調(diào)用格式為:struct(fieldl,valuesl,field2,values2,)%用指定的域名和各個域的數(shù)據(jù)建立結(jié)構(gòu)數(shù)組。如果數(shù)組中包含多個結(jié)構(gòu),而且各個結(jié)構(gòu)域中的數(shù)據(jù)不盡相同,則域的數(shù)據(jù)valuesl、values2、必須是單元數(shù)組。建立的結(jié)構(gòu)數(shù)組和單元數(shù)組的大小相同。如:s=struct(type,big,little,color,red,x,3,4)建立結(jié)構(gòu)數(shù)組s=1x2structarraywithfields:typecolorx2、結(jié)構(gòu)數(shù)組的操作(1)結(jié)構(gòu)數(shù)組域中內(nèi)容的調(diào)取和設(shè)置在MATLAB中,對結(jié)構(gòu)數(shù)組域中內(nèi)容的調(diào)取和設(shè)置可通過函數(shù)getfi

25、eld和setfield進行。(2)刪除結(jié)構(gòu)的域在MATLAB中,利用函數(shù)rmfield可以刪除結(jié)構(gòu)的域。(3)結(jié)構(gòu)數(shù)組和單元數(shù)組的轉(zhuǎn)換在MATLAB中,利用函數(shù)struct2cell和cell2struct可以進行結(jié)構(gòu)數(shù)組和單元數(shù)組之間的轉(zhuǎn)換。3、數(shù)據(jù)的分配MATLAB中的函數(shù)deal可把輸入數(shù)據(jù)分配給輸出數(shù)據(jù),其調(diào)用格式為:(1)A,B,C,=deal(X,Y,Z,)等價于A=X,B=Y,C=Z,(2)A,B,C,=deal(X)等價于A=X,B=X,C=X,例4-6example4-6.msys=rand(3)ones(3,1)eye(3)zeros(3,1);建立單元數(shù)組sysa,b,

26、c,d=deal(sys:);把sys中的每個“單元”分配給相對應(yīng)的變量a=0.95010.48600.45650.23110.89130.01850.60680.76210.8214b=111c=100010001d=000【說明】:例4-5中的sys:和sys不同,sys是將整個單元數(shù)組分配給每個變量。4.3MATLAB的運算符和操作符在MATLAB中,一般的運算符和操作符構(gòu)成運算最基本的操作指令,例如加、減、乘、除和乘方等運算,這些指令幾乎在所有計算機語言中都有,并且大同小異。在MATLAB中,幾乎所有的運算都是以矩陣為基本的運算單元,這與大多數(shù)計算機語言不同,也是MATLAB的顯著特點

27、。一、運算符在MATLAB中,最常見的運算符如表4-4所示。【注】:在矩陣運算中,左除和右除有一定的區(qū)別。a=1:1:10;b=0:10:90;a+bans=11223344556677889100a-bans=1-8-17-26-35-44-53-62-71-80a.*b%注意這里a后加了個“.”ans=02060120200300420560720900a/bans=0.1158abans=0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123456789b

28、./aans=Columns1through705.00006.66677.50008.00008.33338.5714Columns8through108.75008.88899.0000a.bans=Columns1through705.00006.66677.50008.00008.33338.5714Columns8through108.75008.88899.0000a.2ans=149162536496481100說明:在這里特別要注意一下有沒有加點“.”之間的區(qū)別,這些算術(shù)運算符所運算的兩個陣列是否需要長度一致。矩陣轉(zhuǎn)置運算通過在矩陣變量后加的方法來表示轉(zhuǎn)置運算a=1:1:10;

29、b=0:10:90;aans=12345678910c=a+b*i;cans=1.00002.0000-10.0000i3.0000-20.0000i4.0000-30.0000i5.0000-40.0000i6.0000-50.0000i7.0000-60.0000i8.0000-70.0000i9.0000-80.0000i10.0000-90.0000i二、操作符在MATLAB中,操作符在資料構(gòu)造和運算中非常有用。各操作符的含義如表4-5所示?!菊f明】:(1)冒號“:”冒號在矩陣的構(gòu)造和運算中極為實用,它可以用來產(chǎn)生向量;用作矩陣的下標;部分地選擇矩陣元素;進行行循環(huán)操作等。(2)續(xù)號“

30、”如果一個命令很長,一行容不下,則可以在一行的末尾加三個或更多的點,表示此行未完,而在下一行繼續(xù)。(3)分號“;”在方括號中,分號表示矩陣中行的結(jié)尾。如用在每行的結(jié)尾,則MATLAB不會顯示該行運算的結(jié)果,此功能可以用在M文件中控制命令的顯示,減少輸出篇幅。4.4MATLAB的關(guān)系運算和邏輯運算除了傳統(tǒng)的數(shù)學運算,MATLAB支持關(guān)系和邏輯運算。在程序流程控制中,常有一些邏輯和模糊邏輯推理,需要對其做出“是真、是假”的判斷或回答,以便控制程序的流程,或執(zhí)行次序。作為所有關(guān)系和邏輯表達式的輸入,MATLAB把任何非零數(shù)值當作真,把零當作假。所有關(guān)系和邏輯表達式的輸出,對于真,輸出為1;對于假,輸

31、出為零。在關(guān)系和邏輯運算中,MATLAB有以下規(guī)定:(1)在所有的關(guān)系表達式和邏輯表達式中,輸入的任何非0數(shù)都被看作是“邏輯真”,而只有0才被認為是“邏輯假”;(2)所有關(guān)系表達式和邏輯表達式的計算結(jié)果是一個由0和1組成的“邏輯數(shù)組(LogicalArray)”,數(shù)組中的1表示“真”,0表示“假”;(3)邏輯數(shù)組是一種特殊的數(shù)值數(shù)組,與“數(shù)值類”有關(guān)的操作和函數(shù)對它也適用;但它又不同于普通的“數(shù)值”,它還表示對事物的判斷結(jié)論“真”與“假”,有其自身的特殊用途。一、關(guān)系運算1、關(guān)系運算符MATLAB關(guān)系(運算)操作符用來比較兩個同樣大小的數(shù)組,或用來比較一個數(shù)組和一個標量。其關(guān)系操作符如表4-6

32、所示。表4-6關(guān)系運算符關(guān)系操作符功能說明關(guān)系操作符功能說明小于大于=大于或等于=等于=不等于注:=和=意味著兩種不同的事:=比較兩個變量,當它們相等時返回1,當它們不相等時返回0;在另一方面,=被用來將運算的結(jié)果賦給一個變量。2、關(guān)系運算規(guī)則(1)比較的兩個變量是標量若標量a、b之間關(guān)系成立,則關(guān)系運算結(jié)果為l;若標量a、b之間關(guān)系不成立,則關(guān)系結(jié)果為0。(2)比較的兩個變量是數(shù)組當兩個維數(shù)相同的數(shù)組A和B比較時,數(shù)組A、B比較的是相同位置的元素,按標量的運算規(guī)則逐個進行。關(guān)系運算的結(jié)果是一個維數(shù)和A相同的數(shù)組,它的元素由0和1組成。(3)比較的兩個變量一個是數(shù)組A,另一個是標量b把標量b和

33、數(shù)組A的每一個元素按標量關(guān)系運算規(guī)則逐個比較。關(guān)系運算的結(jié)果是一個維數(shù)和數(shù)組A相同的數(shù)組,它是由0和l組成。例如:例4-9example4_9.m關(guān)系運算示例A=1:9,B=9-AA=123456789B=876543210tf=A4%找出A中大于4的元素;0出現(xiàn)在A4的地方tf=000011111tf=(A=B)%找出A中的元素等于B中的元素tf=000000000tf=B-(A2)%找出A2,并從B中減去所求得的結(jié)果向量tf=87543210-1(4)算術(shù)運算、關(guān)系運算和邏輯運算的優(yōu)先級由高到低為算術(shù)運算、關(guān)系運算和邏輯運算。例4-10example4_10.m關(guān)系運算示例。B=B+(B=

34、0)*epsB=Columns1through78.00007.00006.00005.00004.00003.00002.0000Columns8through91.00000.0000這是一個演示,表明如何用特殊的MATLAB數(shù)eps來代替在一個數(shù)組中的零元素,eps近似為2.2e-16。這種特殊的表達式在避免被0除時是很有用的。例4-12example4-12.mx=(-3:3)/3x=-1.0000-0.6667-0.333300.33330.66671.0000sin(x)./xWarning:Dividebyzeroans=0.84150.92760.9816NaN0.98160.

35、92760.8415由于第四個數(shù)據(jù)是0,計算函數(shù)sin(x)/x時給出了一個警告。由于sin(0)/0是沒定義的,在該處MATLAB結(jié)果返回NaN。用eps替代0以后,再試一次,x=x+(x=0)*eps;sin(x)./xans=0.84150.92760.98161.00000.98160.92760.8415現(xiàn)在sin(x)/x在x=0處給出了正確的極限。例4-13example4-13.m關(guān)系運算示例。A=348;902;537輸入矩陣AA=348902537B=441;784;517輸入矩陣BB=441784517E=(A=B)比較矩陣A和B是否相等E=010000101NE=(A=

36、B)比較矩陣A和B是否不等NE=101111010A0=(A5)標出矩陣A中大于5的元素A0=001100001B0=(B=A=348;902;537輸入矩陣AA=348902537B=441;784;517輸入矩陣BB=441784517AB=A&B對矩陣A和B求邏輯“與”AB=111101111A_B=A|B對矩陣A和B求邏輯“或”A_B=111111111C=A對矩陣A求邏輯“非”C=000010000cc=(A3)&(AA=1:9;B=9-A;tf=A4%找出A大于的元素tf=000011111tf=(A4)%對上面的結(jié)果取非,也就是1替換0,0替換1tf=111100000tf=(A

37、2)&(Ax=linspace(0,10,100);%createdatay=sin(x);%computesinez=(y=0).*y;%setnegativevaluesofsin(x)tozeroz=z+0.5*(yz=(xplot(x,z)xlabel(x),ylabel(z=f(x),title(ADiscontinuousSignal)三、關(guān)系與邏輯函數(shù)除了上面的關(guān)系與邏輯操作符,MATLAB提供了大量的其他關(guān)系與邏輯函數(shù),這些函數(shù)在交互運算及進行矩陣的標化中非常有用,可以很方便地查找或替換矩陣中滿足一定條件的部分或所有元素,如表4-8所示。表4-8關(guān)系與邏輯函數(shù)函數(shù)名稱功能xor

38、(A,B)異或運算。A或B非零(真)返回1,x和y都是零(假)或都是非零(真)返回0。any(A)如果在一個向量x中,任何元素是非零,返回1;矩陣x中的每一列有非零元素,返回1all(A)如果在一個向量x中,所有元素非零,返回1;矩陣x中的每一列所有元素非零,返回1isequel(A,B)ismember(A,B)1、any函數(shù)這是一個判斷向量中元素是否有非0的函數(shù)。在矩陣處理時,有時要判斷矩陣中的元素有無0值。如果在對矩陣進行數(shù)組除時,就要判斷作除數(shù)的矩陣是否有0元素。其調(diào)用格式為:(1)any(A)若A是向量,如果A向量中至少有一個元素為非0數(shù),any(A)將返回邏輯“真”,即為1,否則為

39、0;若A為矩陣,函數(shù)any(A)按向量的列判斷,如果矩陣A的某列中存在某個元素為非0數(shù),則返回當前列的結(jié)果為l;若A是多維矩陣,any(A)將第一個不是單維的維作為向量,按向量的運算規(guī)則進行判斷;(2)any(A,dim)指定的第dim維作為向量進行計算。如any(A,1)就是按向量A第一維進行計算。例4-25example4_25.m函數(shù)any的用法。A=348;902;537輸入矩陣AA=348902537any(A)邏輯運算ans=111any(A,2)對的二維進行邏輯運算ans=1113、all函數(shù)【格式】:(1)all(A)若A是向量,如果A向量中每個元素都是非0數(shù),all(A)將返

40、回邏輯“真”,即為1,如果至少有一個元素為0,則返回值為0。若A為矩陣,函數(shù)a1l(A)按向量的列判斷,如果矩陣A的某列中所有元素都為非0數(shù),則返回當前列的結(jié)果為1。若A是多維矩陣,all(A)將第一個不是單維的維作為向量,按向量的運算規(guī)則進行判斷;(2)all(A,dim)指定的第dim維作為向量進行計算。如all(A,1)就是按向量A第一維進行計算。例4-27example4_27.m判斷矩陣A=348;902;537的所有元素是否都大于或等于1。A=348;902;537輸入矩陣AA=348902537all(all(A=1)用函數(shù)all判斷ans=0A=1看看矩陣A大于等于1的值ans=l11101111all(A=1)用一次函數(shù)all判斷ans=101四、判斷函數(shù)除了關(guān)系及邏輯函數(shù)外,MATLAB還提供了大量的判斷函數(shù),測試特殊值或條件的存在,返回邏輯值。這些命令在MATLA

溫馨提示

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

最新文檔

評論

0/150

提交評論