MATLABch04MATLAB程序設計基礎知識Word版_第1頁
MATLABch04MATLAB程序設計基礎知識Word版_第2頁
MATLABch04MATLAB程序設計基礎知識Word版_第3頁
MATLABch04MATLAB程序設計基礎知識Word版_第4頁
MATLABch04MATLAB程序設計基礎知識Word版_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Matlab-ch04(MATLAB程序設計-基礎知識)第4講 MATLAB程序設計-基礎知識內(nèi)容提要:本章主要介紹MATLAB程序設計的有關基礎知識。重點及難點: MATLAB作為一種高級應用軟件,除了命令行操作的直接交互方式以外,還有自己的編程語言。為了充分發(fā)揮和體現(xiàn)MATLAB的功能,必須掌握MATLAB的程序設計。本講詳細介紹MATLAB程序設計的基本知識,通過本章的學習,可以掌握關于MATLAB程序設計的方法,增強設計應用程序的能力。 MATLAB不僅是一個功能強大的工具軟件,更是一種高效的編程語言。MATLAB的編程效率比常用的BASIC、C、FORTRAN和PASCAL等語言要高

2、得多,而且容易維護。MATLAB軟件即MATLAB語言的編程環(huán)境,M文件也就是用MATLAB語言編寫的程序代碼文件。§4.1 MATLAB的變量和表達式一、MATLAB的變量及其類型 1、變量命名規(guī)則 在MATLAB中,對變量(包括函數(shù))命名時應遵循以下規(guī)則: (1)變量名(包括函數(shù)名)對字母的大小寫敏感,即MATLAB區(qū)分字母的大小寫; (2)變量名的第一個字符必須為英文字母,而且不能超過31個字符; (3)變量名由英文字母、數(shù)字和下劃線組成,即變量名可以包含下連字符、數(shù)字,但不能為空格符(Backspace)和標點。 例如,my_var_30就是合法的變量名。 2、局部變量和全局

3、變量 (1)局部變量 只在每個函數(shù)體內(nèi)定義、使用,而不能從其他函數(shù)和MATLAB工作空間訪問的變量稱為局部變量。 (2)全局變量 在多個函數(shù)及MATLAB函數(shù)中都能使用的變量稱為全局變量。 通常每個函數(shù)體內(nèi)都有自己定義的變量,不能從其他函數(shù)和MATLAB工作空間訪問這些變量,這就是局部變量。如果要使某個變量在幾個函數(shù)及MATLAB函數(shù)中都能使用,它就是全局變量。 (3)局部變量和全局變量的區(qū)別 全局變量名應盡可能大寫,并用“global'聲明。如果要在幾個函數(shù)和MATLAB的工作空間中都能訪問一個全局變量,則需在每個函數(shù)和MATLAB工作空間中都聲明該變量是全局變量。 全局變量要在函數(shù)

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

5、ar命令清除,從而恢復系統(tǒng)預定義的值(預定義變量的名字就反映這個意思)。常見的永久變量見表4-1。表4-1 MATLAB的永久變量變量名含義ans預設的計算結果的變量名(計算結果的缺省變量名)EpsMATLAB定義的正的極小值=2.2204e-16pi內(nèi)建的值(圓周率)Inf或inf值,無限大,定義為NaN或nan無法定義一個數(shù)目,非數(shù)(Not a Number),如0/0i 或 j虛數(shù)單位nargin函數(shù)輸入?yún)?shù)個數(shù)nargout函數(shù)輸出參數(shù)個數(shù)realmax最大的正實數(shù)realmin最小的正實數(shù)flops浮點運算次數(shù) 【注意】: (1)用戶在編寫指令和程序時,盡可能不對表4-1中所列永久變

6、量名重新賦值,以免產(chǎn)生混淆。 (2)鍵入clear則是去除所有定義過的變量名稱,但不能清除永久變量。 (3)who命令看不到永久變量。 例4-1example4_1.m 無窮大的使用和作用。>>y=1/0 無窮大的使用 Warning: Divide by zero. Y= Inf>>1/y 無窮大的作用和ans變量的使用 ans= 0 【說明】: (1)在MATLAB中,象1/0這樣的操作不會引起程序執(zhí)行中斷,只是在給出警告信息的同時,用一個永久變量inf來表示,而且這個變量和其他變量一樣,可在各種運算中發(fā)揮巨大的作用。 (2)對于inf同樣可以當作一個變量來使用,此

7、特點在編程中有很大作用。二、MATLAB基本表達式 MATLAB采用的是表達式語言,用戶輸入的語句由MATLAB系統(tǒng)解釋運行。用戶可以在MATLAB的命令窗口中鍵入命令,也可以在編輯器內(nèi)編寫應用程序,MATLAB軟件對此命令或程序中各條語句進行翻譯,然后在MATLAB環(huán)境下對它進行處理,最后返回運算結果。 1、語句格式 MATLAB語句由表達式和變量組成,有兩種表示形式:>>表達式>>變量=表達式 2、表達式書寫規(guī)則 MATLAB書寫表達式的規(guī)則與“手寫算式”差不多相同,具體遵循以下規(guī)定: (1)表達式由變量名、運算符、數(shù)字和函數(shù)名組成; (2)表達式將按常規(guī)的優(yōu)先級從

8、左至右執(zhí)行運算; (3)優(yōu)先級的規(guī)定是:指數(shù)運算級別最高,乘除運算次之,加減運算級別最低; (4)括號可以改變運算順序; (5)書寫表達式時,賦值符“=”和運算符兩側(cè)允許有空格,以增加可讀性。但在復數(shù)或符號表達式中要盡量避免,以防出錯; (6)表達式的末尾可加上“;”,也可以不加。有“;”時,MATLAB系統(tǒng)不顯示計算結果,而是直接把數(shù)值賦給變量,如果沒有用變量就無法看到結果;沒有“;”時,MATLAB系統(tǒng)將會在該條語句的下面直接顯示運算結果。 3、說明 (1)在MATLAB語句的第一種形式中,表達式運算后產(chǎn)生的結果如果是矩陣或其他數(shù)值類型,MATLAB系統(tǒng)將會自動賦給變量名為ans,并顯示在

9、屏幕上。ans是一個默認的永久變量,它會在以后類似的操作中被自動覆蓋掉,所以重要的結果一定要記錄下來,也就是使用第二種形式。 (2)在MATLAB語句的第二種形式中,“=”右邊的表達式計算后產(chǎn)生的結果,MATLAB系統(tǒng)會自動賦給“=”左邊的變量,然后存入內(nèi)存中,并顯示在屏幕上。 (3)MATLAB語言與C語言不同,它允許一次返回多個結果,這時“=”左邊是用“ ”括起來的變量列表,例如命令函數(shù):>>X,Y,Z=peaks; 它返回了坐標列向量X,Y,Z的值。 例4-2example4_2.m 創(chuàng)建一個表達式。>>x=(3*42+exp(sin(45)/6 x= 8.390

10、3 (4)如果一個表達式過長,也可以在結尾加上.(代表此行指令與下一行連續(xù)),例如>>3*82-8*9.6 ans = 120§4.2 MATLAB數(shù)組及其類型一、MATLAB的數(shù)據(jù)結構 MATLAB是一種面向數(shù)組(Array)的編程語言,其數(shù)據(jù)類型的最大特點是每一種類型都以數(shù)組為基礎,從數(shù)組中派生出來的,事實上,MATLAB把每種類型的數(shù)據(jù)都作為數(shù)組來處理。 1、數(shù)據(jù)結構的類型圖4-1 在MATLAB中,有6種基本的數(shù)據(jù)類型,即:char(字符)、double(雙精度數(shù)值)、sparse(稀疏數(shù)據(jù))、storage(存儲型)、cell(單元數(shù)組)和Struct(結構)。

11、 數(shù)據(jù)類型間的關系如圖4-1所示。 2、有關說明 (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ù)組和結構數(shù)組一般用在大型程序中。 (6)儲型數(shù)組一般只用于內(nèi)存的有效儲存,可對這些類型的數(shù)組進行操作,但不能進行任何數(shù)學運算,否則必須用double函數(shù)

12、把它轉(zhuǎn)換為雙精度類型。 3、數(shù)組之間的差別 MATLAB的數(shù)組有:字符串數(shù)組(Character String Array)、單元數(shù)組(Cell Array)、結構數(shù)組(Structure Array)和數(shù)值數(shù)組(Numeric Army),它們之間的基本差別如表4-2所示。二、字符串數(shù)組 對于MATLAB編程來說,字符處理必不可少。對于字符串的使用應符合以下規(guī)定: (1)所有字符串都用單引號括起來; (2)字符串中的每個字符都是字符串變量(矩陣或向量)中的一個元素; (3)字符串中的字符以ASCII碼形式儲存并區(qū)分大小。用函數(shù)abs可以看到字符的ASCII碼。 MATLAB有強大的字符處理功

13、能,其字符串處理函數(shù)如表4-3所示。表4-3 字符串處理函數(shù) 1、字符串數(shù)組的建立 (1)直接賦值法建立字符串數(shù)組 建立字符串可通過直接賦值,先把待建的字符放在單引號中,然后直接賦值給變量。如:>>a='This is a book' a= This is a book (2)建立中文字符串數(shù)組 創(chuàng)建中文字符串時,字符外邊的單引號對必須在英文狀態(tài)下輸入。與英文字符一樣,每個中文字符也占一個元素位置,但應注意此時的ASCII大于256。>>A='中國長城' A= 中國長城 (3)建立帶單引號的字符串 當字符串中的字符包含有(英文)單引號時,

14、每個單引號符用連續(xù)的兩個單引號符表示。>>B='China"中國''' B= China'中國' (4)多行字符串的創(chuàng)建 在直接創(chuàng)建多行字符串數(shù)組時,要保證同一字符串數(shù)組的各行字符數(shù)相等,即保證各行等長。如果不等長,則用空格符來調(diào)節(jié)其長度,使它們彼此相等。如:>>AB='中國 ''chang cheng' AB= 中國 chang cheng (5)利用字符串操作函數(shù)創(chuàng)建字符串數(shù)組 在MATLAB中,有專用函數(shù)char、str2mat和strvcat創(chuàng)建多行字符串數(shù)組。這三個函數(shù)創(chuàng)

15、建多行數(shù)組時,不必擔心每行字符是否相等,它們總會按最長行設置第二維的長度,其他行的尾部用空格填充。它們的調(diào)用格式為:u S=char(TI,T2,T3,)u S=str2mat(T1,T2,T3,)u S=strvcat(T1,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ù)組。

16、【說明】: 中文字符能被命令char和double正確轉(zhuǎn)化。 2、字符串數(shù)組的操作 (1)字符串的連接 字符串可以連接到一起組成更大的字符串??梢灾苯釉谥欣ㄌ杻?nèi)用逗號連接,也可以通過函數(shù)strcat連接。如:>>A='中國長城'>>B='China"中國'''>>ab=A, ''B,' ' 第二個輸入是表示輸入空格字符串 ab= 中國 長城China'中國'>> strcat(A,B) 函數(shù)strcat連接,忽略原字符串結尾處的空格 ans=

17、 中國長城China'中國' 3、字符串數(shù)組元素的標識 在一維字符串數(shù)組中,MATLAB按從左向右的順序用自然數(shù)數(shù)碼(1,2,3等)標識字符位置,其操作也用標識來進行。三、單元數(shù)組 Cell Array 單元數(shù)組(Cell Array)是一種比較特殊的MATLAB數(shù)組,該數(shù)組的基本成分是單元,它的每個元素都是一個單元,單元中包含其他MATLAB數(shù)組。每個單元本身在數(shù)組中是平等的,它們只能以下標區(qū)分。單元內(nèi)可以存放任何類型、任何大小的數(shù)組,而且同一單元數(shù)組內(nèi)各單元的內(nèi)容可以不同。 同數(shù)值數(shù)組一樣,單元數(shù)組的維數(shù)不受限制,可以是一維、二維或更高維。單元數(shù)組對單元的編址方法有單下標編

18、址和全下標編址。 對于單元數(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ù)組又有兩種不同的方式:u 用小括號括起單元的下標,在賦值語句的右側(cè)用花括號括起單元的內(nèi)容。如:>>A(1,1)='Mtalab' 單元(1,1),字符串>&

19、gt;A(1,2)=6.0; 單元(1,2),標量,記錄版本號>>A(2,1)='矩陣' 單元(2,1),中文字符串>>A(2,2)=2 3 4;23 l 4;5 4 8; 單元(2,2),矩陣>>A 列出矩陣A A= 結果 'matlab' 6 '矩陣' 3x3 doubleu 用花括號括起單元的下標,在賦值語句的右側(cè)直接指定單元的內(nèi)容。如上面命令可寫成:>>A1,1='matlab' 單元(1,1)中的內(nèi)容>>A1,2=6.0; 單元(1,2)中的內(nèi)容>>

20、A2,2='矩陣' 單元(2,1)中的內(nèi)容>>A2,2=2 3 4;23 1 4;5 4 8; 單元(2,2)中的內(nèi)容 (2)利用花括號(單元數(shù)組法)建立單元數(shù)組 在花括號中直接賦值,單元與單元之間用逗號、空格或分號隔開,使用如下語句也可得出與上面相同的單元數(shù)組。>>A='matlab',6.0; '矩陣',2 3 4;23 1 4;5 4 8 或>>A='matlab' 6.0; '矩陣' 2 3 4; 23 1 4;5 4 8 【說明】:上式中6.0后面的分號表示數(shù)組另起一行

21、,不能用別的符號代替。 (3)利用cell函數(shù)建立單元數(shù)組 cell函數(shù)用來預分配指定大小的單元數(shù)組,其調(diào)用格式為:u c=cell(n) 建立n×n的單元數(shù)組,單元是空矩陣;u C=cell(m,n)或cell(m,n) 建立m×n的單元數(shù)組,單元是空矩陣;u c=cell(m,n,p,)或cell(m,n,p,.) 建立m×n×p×的單元數(shù)組,單元是空矩陣;u c=cell(size(A) 建立和A大小相同的單元數(shù)組。 2、單元數(shù)組的訪問 在MATLAB中,單元數(shù)組的訪問有兩種方式: (1)用內(nèi)容下標(花括號)訪問單元內(nèi)容>>A

22、1,1 訪問第(1,1)個單元中的內(nèi)容 ans= matlab (2)用單元下標(小括號)訪問單元子集 又如數(shù)組A:>>A(1,1) 訪問第(1,1)個單元 ans= 'matlab'>>b=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)用

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

24、素個數(shù); (3)單元數(shù)組也可像一般數(shù)組那樣用方括號進行連接; (4)單元數(shù)組可代替用逗號或空格分隔的變量列表; (5)如果數(shù)組中的多個單元是用花括號和冒號一起引用的,MATLAB則把每個單元的內(nèi)容看作一個獨立的變量。四、結構數(shù)組 Structure Array MATLAB中的結構數(shù)組(Structure Array)與單元數(shù)組一樣,能在一個數(shù)組存放各類數(shù)組。從一定意義上講,結構數(shù)組組織數(shù)據(jù)的能力比單元數(shù)組更強、更富于變化。結構數(shù)組的基本成分是結構(Structure),數(shù)組中的每個結構相等,它們以下標區(qū)分。結構必須在劃分“域”后才能使用。數(shù)據(jù)不能直接存放在結構上,而只能存放在域中。結構的域可

25、以存放任何類型、任何大小的數(shù)組,而且不同結構的同名域中存放的內(nèi)容可以不同。 1、結構數(shù)組的建立 (1)直接建立結構數(shù)組 直接建立結構和各個域,同時給各域賦值(也可以不賦值),結構和域之間用點連接。在訪問結構數(shù)組的各個域時,也是“結構數(shù)組名.域名”的格式。當結構帶有子域時,需完整地鍵入結構名、域名、子域名,才能顯示域中的內(nèi)容。結構數(shù)組的各個域可以按照其本身的數(shù)據(jù)類型進行相應的各種運算。 例4-5example4_5.m 建立一橋梁混凝土試件強度的結構數(shù)組。>>='XX大橋; 域名為name,中文字符串,記錄橋名>>bridge.positio

26、n='頂板; 域名為position,中文字符串,記錄試件位置>>bridge.position.group='2組' 子域名為group,字符串,記錄組數(shù)>>bridge.position.value=28.4 29.4 30.1;26.8 29.0 28.8; 子域名value,記錄試件強度>>bridge 得到結構數(shù)組的內(nèi)容如下 bridge= name: 'XX大橋' position: 1x1 struct bridge.position 顯示域position中的內(nèi)容 ans= group: '2組

27、' value:2x3 double>>bridge.position.value 顯示域value中的內(nèi)容 ans= 28.4000 29.4000 30.1000 26.8000 29.0000 28.8000 (2)利用structure函數(shù)創(chuàng)建結構數(shù)組 除了上面所講述的直接建立結構數(shù)組外,MATLAB還有一個專門建立結構數(shù)組的函數(shù)struct。該函數(shù)命令的調(diào)用格式為:>>struct('fieldl', valuesl, 'field2', values2,) %用指定的域名和各個域的數(shù)據(jù)建立結構數(shù)組。 如果數(shù)組中包含多個

28、結構,而且各個結構域中的數(shù)據(jù)不盡相同,則域的數(shù)據(jù)valuesl、values2、必須是單元數(shù)組。建立的結構數(shù)組和單元數(shù)組的大小相同。如:>>s=struct('type', 'big', 'little', 'color', 'red', 'x',3,4) 建立結構數(shù)組 s= 1x2 struct array with fields: type color x 2、結構數(shù)組的操作 (1)結構數(shù)組域中內(nèi)容的調(diào)取和設置 在MATLAB中,對結構數(shù)組域中內(nèi)容的調(diào)取和設置可通過函數(shù)getfiel

29、d和setfield進行。 (2)刪除結構的域 在MATLAB中,利用函數(shù)rmfield可以刪除結構的域。 (3)結構數(shù)組和單元數(shù)組的轉(zhuǎn)換 在MATLAB中,利用函數(shù)struct2cell和cell2struct可以進行結構數(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.m>>sys=rand(3) ones(3,1) eye(3) zer

30、os(3,1); 建立單元數(shù)組sys>>a,b,c,d=deal(sys:); 把sys中的每個“單元”分配給相對應的變量 a= 0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214 b= 1 1 1 c= 1 0 0 0 1 0 0 0 1 d= 0 0 0 【說明】:例4-5中的sys:和sys不同,sys是將整個單元數(shù)組分配給每個變量。§4.3 MATLAB的運算符和操作符 在MATLAB中,一般的運算符和操作符構成運算最基本的操作指令,例如加、減、乘、除和乘方等運算,這些指令幾乎在所有計算機語

31、言中都有,并且大同小異。在MATLAB中,幾乎所有的運算都是以矩陣為基本的運算單元,這與大多數(shù)計算機語言不同,也是MATLAB的顯著特點。一、運算符 在MATLAB中,最常見的運算符如表4-4所示。 【注】:在矩陣運算中,左除和右除有一定的區(qū)別。 >> a=1:1:10;>> b=0:10:90;>> a+bans =1 12 23 34 45 56 67 78 89 100>> a-bans =1 -8 -17 -26 -35 -44 -53 -62 -71 -80 >> a.*b %注意這里a后加了個“.”ans = 0 20 6

32、0 120 200 300 420 560 720 900>> a/bans = 0.1158 >> abans = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 1 2 3 4 5 6 7 8 9 >> b./aans = Columns 1 t

33、hrough 7 0 5.0000 6.6667 7.5000 8.0000 8.3333 8.5714 Columns 8 through 10 8.7500 8.8889 9.0000>> a.bans =Columns 1 through 7 0 5.0000 6.6667 7.5000 8.0000 8.3333 8.5714Columns 8 through 10 8.7500 8.8889 9.0000>> a.2ans = 1 4 9 16 25 36 49 64 81 100 說明:在這里特別要注意一下有沒有加點“.”之間的區(qū)別,這些算術運算符所運算的兩

34、個陣列是否需要長度一致。        矩陣轉(zhuǎn)置運算通過在矩陣變量后加的方法來表示轉(zhuǎn)置運算>> a=1:1:10;>> b=0:10:90;>> a'ans = 1 2 3 4 5 6 7 8 910>> c=a+b*i;>> c'ans = 1.0000 2.0000 -10.0000i 3.0000 -20.0000i 4.0000 -30.0000i 5.0000 -40.0000i 6.0000 -50.0000i 7.0000 -60.00

35、00i 8.0000 -70.0000i 9.0000 -80.0000i 10.0000 -90.0000i二、操作符 在MATLAB中,操作符在資料構造和運算中非常有用。各操作符的含義如表4-5所示。 【說明】: (1)冒號“:” 冒號在矩陣的構造和運算中極為實用,它可以用來產(chǎn)生向量;用作矩陣的下標;部分地選擇矩陣元素;進行行循環(huán)操作等。 (2)續(xù)號“” 如果一個命令很長,一行容不下,則可以在一行的末尾加三個或更多的點,表示此行未完,而在下一行繼續(xù)。 (3)分號“;” 在方括號中,分號表示矩陣中行的結尾。如用在每行的結尾,則MATLAB不會顯示該行運算的結果,此功能可以用在M文件中控制命令

36、的顯示,減少輸出篇幅。§4.4 MATLAB的關系運算和邏輯運算 除了傳統(tǒng)的數(shù)學運算,MATLAB支持關系和邏輯運算。在程序流程控制中,常有一些邏輯和模糊邏輯推理,需要對其做出“是真、是假”的判斷或回答,以便控制程序的流程,或執(zhí)行次序。 作為所有關系和邏輯表達式的輸入,MATLAB把任何非零數(shù)值當作真,把零當作假。所有關系和邏輯表達式的輸出,對于真,輸出為1;對于假,輸出為零。 在關系和邏輯運算中,MATLAB有以下規(guī)定: (1)在所有的關系表達式和邏輯表達式中,輸入的任何非0數(shù)都被看作是“邏輯真”,而只有0才被認為是“邏輯假”; (2)所有關系表達式和邏輯表達式的計算結果是一個由0

37、和1組成的“邏輯數(shù)組(Logical Array)”,數(shù)組中的1表示“真”,0表示“假”; (3)邏輯數(shù)組是一種特殊的數(shù)值數(shù)組,與“數(shù)值類”有關的操作和函數(shù)對它也適用;但它又不同于普通的“數(shù)值”,它還表示對事物的判斷結論“真”與“假”,有其自身的特殊用途。一、關系運算 1、關系運算符 MATLAB關系(運算)操作符用來比較兩個同樣大小的數(shù)組,或用來比較一個數(shù)組和一個標量。其關系操作符如表4-6所示。表4-6 關系運算符關系操作符功能說明關系操作符功能說明<小于< =小于或等于>大于> =大于或等于= =等于 =不等于注:=和=意味著兩種不同的事:= 比較兩個變量,當它們

38、相等時返回1,當它們不相等時返回0;在另一方面,=被用來將運算的結果賦給一個變量。 2、關系運算規(guī)則 (1)比較的兩個變量是標量u 若標量a、b之間關系成立,則關系運算結果為l;u 若標量a、b之間關系不成立,則關系結果為0。 (2)比較的兩個變量是數(shù)組 當兩個維數(shù)相同的數(shù)組A和B比較時,數(shù)組A、B比較的是相同位置的元素,按標量的運算規(guī)則逐個進行。關系運算的結果是一個維數(shù)和A相同的數(shù)組,它的元素由0和1組成。 (3)比較的兩個變量一個是數(shù)組A,另一個是標量b 把標量b和數(shù)組A的每一個元素按標量關系運算規(guī)則逐個比較。關系運算的結果是一個維數(shù)和數(shù)組A相同的數(shù)組,它是由0和l組成。例如: 例4-9e

39、xample4_9.m 關系運算示例>>A=1:9, B=9-A A = 1 2 3 4 5 6 7 8 9 B = 8 7 6 5 4 3 2 1 0>>tf=A>4 %找出A中大于4的元素;0出現(xiàn)在A<=4的地方,1出現(xiàn)在A>4的地方tf = 0 0 0 0 1 1 1 1 1>>tf=(A=B) %找出A中的元素等于B中的元素tf = 0 0 0 0 0 0 0 0 0>>tf=B-(A>2) %找出A>2,并從B中減去所求得的結果向量tf = 8 7 5 4 3 2 1 0 -1 (4)算術運算、關系運算和邏

40、輯運算的優(yōu)先級 由高到低為算術運算、關系運算和邏輯運算。 例4-10example4_10.m 關系運算示例。>>B=B+(B=0)*epsB = Columns 1 through 7 8.0000 7.0000 6.0000 5.0000 4.0000 3.0000 2.0000 Columns 8 through 9 1.0000 0.0000 這是一個演示,表明如何用特殊的MATLAB數(shù)eps來代替在一個數(shù)組中的零元素,eps近似為2.2e-16。這種特殊的表達式在避免被0除時是很有用的。 例4-12example4-12.m>>x=(-3:3)/3x = -1

41、.0000 -0.6667 -0.3333 0 0.3333 0.6667 1.0000>>sin(x)./xWarning: Divide by zeroans = 0.8415 0.9276 0.9816 NaN 0.9816 0.9276 0.8415 由于第四個數(shù)據(jù)是0,計算函數(shù)sin(x)/x時給出了一個警告。由于sin(0)/0是沒定義的,在該處MATLAB結果返回NaN。用eps替代0以后,再試一次,>>x=x+(x=0)*eps;>>sin(x)./xans = 0.8415 0.9276 0.9816 1.0000 0.9816 0.927

42、6 0.8415 現(xiàn)在sin(x)/x在x=0處給出了正確的極限。 例4-13example4-13.m 關系運算示例。>>A=3 4 8;9 0 2;5 3 7 輸入矩陣A A= 3 4 8 9 0 2 5 3 7>>B=4 4 1;7 8 4;5 1 7 輸入矩陣B B= 4 4 1 7 8 4 5 1 7>>E=(A=B) 比較矩陣A和B是否相等 E= 0 1 0 0 0 0 1 0 1>>NE=(A=B) 比較矩陣A和B是否不等 NE= 1 0 1 1 1 1 0 1 0>>A0=(A>5) 標出矩陣A中大于5的元素 A

43、0= 0 0 1 1 0 0 0 0 1>>B0=(B=<6) 標出矩陣B中小于等于6的元素 B0= 1 1 1 0 0 1 1 1 0二、邏輯運算 1、邏輯(運算)符 邏輯操作符提供了一種組合或否定關系表達式。MATLAB邏輯操作符如表4-8所示。表5.2 邏輯運算符邏輯操作符說明&與、和|或非、否 2、邏輯運算法則 (1)在邏輯運算中,非0元素的邏輯量為“真”,用1表示;0元素的邏輯量為“假”,用0表示; (2)如果兩個標量a和b運算,則:u a&b 當a,b全是非0時,運算結果是1,否則是0;u a|b 當a、b中只要有一個非0,運算結果為1;u a 當

44、a是0時,運算結果是1,否則是0。 (3)如果兩個維數(shù)相同的數(shù)組A和B參與運算,則將數(shù)組A和B相同位置上的元素按標量的運算規(guī)則逐個進行運算。邏輯運算的結果是返回一個由0和1組成的與數(shù)組A具有同樣維數(shù)的數(shù)組; (4)如果標量b和數(shù)組A參與運算,則將標量b和數(shù)組A中的每個元素進行邏輯運算。邏輯運算的結果是返回一個由0和1組成的與數(shù)組A具有同樣維數(shù)的數(shù)組; (5)邏輯“非”運算是一元運算符,服從數(shù)組運算規(guī)則; (6)在邏輯“與”、“或”、“非”三者中,“與”與“或”具有相同的優(yōu)先級,從左向右依次執(zhí)行,都低于“非”的優(yōu)先級; (7)通過增加“( )”可以改變各操作符之間的優(yōu)先級。 例4-16examp

45、le4-16.m 邏輯操作符的用法。>>A=3 4 8;9 0 2;5 3 7 輸入矩陣A A= 3 4 8 9 0 2 5 3 7>>B=4 4 1;7 8 4;5 1 7 輸入矩陣B B= 4 4 1 7 8 4 5 1 7>>AB=A&B 對矩陣A和B求邏輯“與” AB= 1 1 1 1 0 1 1 1 1>>A_B=A|B 對矩陣A和B求邏輯“或” A_B= 1 1 1 1 1 1 1 1 1>>C=A 對矩陣A求邏輯“非” C= 0 0 0 0 1 0 0 0 0>>cc=(A>3)&(A&

46、lt;6) 求矩陣A中大于3小于6的元素 cc= 0 1 0 0 0 0 1 0 0 例4-18example4_18 邏輯操作符用法的例子>>A=1:9;B=9-A;>>tf=A>4 %找出A大于的元素tf = 0 0 0 0 1 1 1 1 1>>tf=(A>4) %對上面的結果取非,也就是1替換0,0替換1tf = 1 1 1 1 0 0 0 0 0>>tf=(A>2)&(A<6) %在A大于2與A小于6處返回1tf = 0 0 1 1 1 0 0 0 0 利用邏輯運算,將數(shù)組容易用來產(chǎn)生或表示不連續(xù)信號,或

47、由多段其他信號所組成的信號。基本想法是,把數(shù)組中要保持的那些值與1相乘,所有其他值與0相乘。圖4.1 不連續(xù)信號 例4-20example4_20.m 利用邏輯運算產(chǎn)生不連續(xù)信號>>x=linspace(0, 10, 100); % create data>>y=sin(x) ; % compute sine>>z=(y>=0).*y ; % set negative values of sin(x) to zero>>z=z+0.5*(y<0) ; % where sin(x) is negative add 1/2>>

48、z=(x<=8).*z ; % set values past x=8 to zero>>plot(x, z)>>xlabel('x'), ylabel('z=f(x)'), title('A Discontinuous Signal')三、關系與邏輯函數(shù) 除了上面的關系與邏輯操作符,MATLAB提供了大量的其他關系與邏輯函數(shù),這些函數(shù)在交互運算及進行矩陣的標化中非常有用,可以很方便地查找或替換矩陣中滿足一定條件的部分或所有元素,如表4-8所示。表4-8 關系與邏輯函數(shù)函數(shù)名稱功能xor(A,B)異或運算。A或B非零

49、(真)返回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,否則為0;若A為矩陣,函數(shù)any(A)按向量的列判斷,如果矩陣A的某列中存在某個元素為非0數(shù),則返回當前列的結果為l;若A是多維矩陣,any(A)將第一個不是單維的維作為向量,按向量的運算規(guī)則進行判斷; (2)any(A,dim) 指定的第dim維作為向量進行計算。如any(A,1)就是按向量A第

溫馨提示

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

評論

0/150

提交評論