《3 Matlab編程》由會員分享,可在線閱讀,更多相關(guān)《3 Matlab編程(44頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、,單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,*,Matlab,編程入門,Matlab,編程簡介,Matlab,作為一種廣泛應(yīng)用于科學(xué)計算的工具軟件,不僅具有強大的數(shù)值計算、符號計算、矩陣運算能力和豐富的繪圖功能,同時也具有和,C,、,FORTRAN,等高級語言一樣進(jìn)行程序設(shè)計。,在,Matlab,程序設(shè)計中,要充分利用,Matlab,數(shù)據(jù)結(jié)構(gòu)的特點,提高編程效率。,利用,Matlab,的程序控制功能,可以將有關(guān),Matlab,命令編成程序存儲在一個文件中,(,M,文件,),,然后在命令窗口中運行該文件,,Matlab,就會自動依次執(zhí)行文件中的命令,直到全部命令執(zhí)行完畢。,用,Matl
2、ab,語言編寫的程序稱為,M,文件,。,M,文件是由若干,Matlab,命令組合在一起構(gòu)成的,它可以完成某些操作,也可以實現(xiàn)某種算法。事實上,,Matlab,提供的內(nèi)部函數(shù)以及各種工具箱,都是利用,Matlab,語言開發(fā)的,M,文件。用戶也可以結(jié)合自己的工作需要,開發(fā)自己的程序或工具箱。,M,文件根據(jù)調(diào)用方式的不同可以分為兩類:,Script,:,腳本文件,/,命令文件,Function,:,函數(shù)文件,M,文件,M,文件以,.,m,為擴展名。,M,文件是一個文本文件,可以用任何文本編輯器來建立和編輯,通常使用,Matlab,自帶的,M,文件編輯器。,M,文件的建立與打開,新建一個,M,文件,菜
3、單操作,(,File,New M-File,),命令操作,(,edit,M,文件名,),命令按鈕,(,快捷鍵,),打開已有的,M,文件,菜單操作,(,File,Open,),命令操作,(,edit,M,文件名,),命令按鈕,(,快捷鍵,),雙擊,M,文件,在命令窗口中輸入,f2cs,,,即可執(zhí)行該,M,文件。,例:,編寫一個腳本文件將華氏溫度轉(zhuǎn)化為攝氏溫度,腳本文件舉例,clear;,%,清除當(dāng)前工作空間中的變量,f=,input(,Please,input Fahrenheit temperature:,);,c=5*(f-32)/9;,fprintf(The,centigrade temp
4、erature is%,gn,c,);,新建一個,M,文件,f2cs.m,,,內(nèi)容如下:,腳本文件運行后,文件中所產(chǎn)生的,所有變量都駐留在,Matlab,當(dāng)前工作空間,,可以用,whos,查看。,關(guān)系運算,小于,大于,=,大于等于,=,等于,=,不等于,比較大小,如果結(jié)論是,真,則返回,1,,否則返回,0,注意,=,與,=,的區(qū)別,關(guān)系操作符能用來比較兩個,同樣大小,的數(shù)組,或用來比較,一個數(shù)組和一個標(biāo)量,,在后一種情況,標(biāo)量和數(shù)組中的每一個元素相比較,比較結(jié)果與數(shù)組大小一樣。,關(guān)系,運算符,例:,關(guān)系運算,舉例,2+2=4,23,A=1 3 5;2 0 6;,B=3 1 0;2 4 6;,A
5、=B,x=5 0;4 2;,x,B=,1 2 3;4 5 6;7 8 9,;,disp,(B,),數(shù)據(jù)輸出,disp,數(shù)據(jù)的輸出:,disp,A=,Hello,Tom,!,;,disp,(A,),例:,數(shù)據(jù)輸出,fprintf,fprintf,(fid,format,variables,),按指定的,格式,將變量的值輸出到指定的,文件,數(shù)據(jù)的輸出:,fprintf,fid,為文件句柄,若缺省,則將變量的值輸出到屏幕上,format,用來指定數(shù)據(jù)輸出時采用的格式,常見的有,%d,(,整數(shù),),%e,(,實數(shù):采用科學(xué)計數(shù)法形式,),%f,(,實數(shù):采用浮點數(shù)形式,),%g,(,由系統(tǒng)自動選取上述
6、兩種格式之一,),%s,(,輸出字符串,),format,中還可以使用一些特殊格式,如:,n,(,換行,),t,(,制表符,),b,(,退格,),(,反斜桿,),%,(,百分號,),數(shù)據(jù)輸出,fprintf,a=,Hello,;b=2.4;c=100*pi;,fprintf,(,a=%,s,b,=%,f,c,=%,en,a,b,c,),例:,format,中的輸出格式要與輸出變量一一對應(yīng),可以沒有輸出變量,fprintf,(,Today is Mondayn,),例:,pause,程序的暫停,:,pause,pause,或,pause(n,),若想強行終止程序的運行,可以使用,Ctrl+c,其
7、中,n,是延遲時間,以秒為單位;,若缺省,則將暫停程序,直到用戶按任意鍵后繼續(xù),pause off,屏蔽程序中所有,pause,的作用,pause on,打開,pause,的作用,選擇結(jié)構(gòu),是根據(jù)給定的條件成立或不成立,分別執(zhí)行不同的語句。,Matlab,用于實現(xiàn)選擇結(jié)構(gòu)的語句有,if,語句,和,switch,語句,。,選擇結(jié)構(gòu),單分支結(jié)構(gòu),if,expression,(,條件),statements(,語句組),end,if,條件語句,if,expression(,條件),statements1(,語句組1),else,statements2(,語句組2),end,雙分支結(jié)構(gòu),if,expr
8、ession1,(,條件,1,),statements1(,語句組,1),elseif,expression2(,條件,2,),statements2(,語句組,2),.,elseif,expressionm,(,條件,m,),statementsm,(,語句組,m,),else,statements(,語句組,),end,多分支結(jié)構(gòu),if,條件語句,if,語句舉例,數(shù)論中的一個有趣問題:任取一個正整數(shù),如果是偶數(shù),用,2,除,如果是奇數(shù),用,3,乘再加,1,,反復(fù)這個過程,直到所得到的數(shù)為,1,。,問:是否存在使該過程永不中止的整數(shù),?,while,1,n=,input,(Please,en
9、ter,n(nonpositive,quit):),;,if,n1,if,rem,(n,2)=0,n=n/2,;,else,n=3*n+1,;,end,fprintf,(n,n=%d,n),;,end,fprintf,(n,n=%d is not we need!continue.n,nt,),;,end,if,語句舉例,根據(jù)表達(dá)式的不同取值,分別執(zhí)行不同的語句。,switch,expression(,表達(dá)式),case,value1(,表達(dá)式1),statement1(,語句組1),case,value2(,表達(dá)式2),statement2(,語句組2),.,case,valuem,(,表達(dá)
10、式,m),statementm,(,語句組,m),otherwise,statement(,語句組),end,switch,語句,Matlab,首先計算,expression,的值,然后將它依次與各個,case,指令后的檢測值進(jìn)行比較,當(dāng)比較結(jié)果為真時,就執(zhí)行相應(yīng)的語句組,然后跳出,switch,結(jié)構(gòu)。,switch,后面的表達(dá)式,expression,的值可以是一個標(biāo)量或字符串。,switch,語句,otherwise,指令可以不出現(xiàn)。,如果所有的比較結(jié)果都為假,則執(zhí)行,otherwise,后面的語句組,然后跳出,switch,結(jié)構(gòu)。,循環(huán)結(jié)構(gòu),是按照給定的條件,重復(fù)執(zhí)行指定的語句。,Mat
11、lab,用于實現(xiàn)循環(huán)結(jié)構(gòu)的語句有,for,語句,和,while,語句,循環(huán)結(jié)構(gòu),for,variable=expression,statement(,循環(huán)體,),end,循環(huán)變量,表達(dá)式,expression,可以是行向量,也可以是矩陣,for,循環(huán),clear;,y=0;n=100;,for,k=1:n,y=y+1/(2*k-1);,end,例:,已知,,當(dāng),n,=100,時,求,y,的值,循環(huán)語句可以嵌套使用,while,循環(huán),while,expression,(,條件,),statement(,循環(huán)體,),end,不能在,for,循環(huán)體,內(nèi)改變循環(huán)變量的值,為了提高代碼的運行效率,應(yīng)盡可
12、能提高代碼的向量化程度,避免,for,循環(huán),的使用,如果預(yù)先就知道循環(huán)的次數(shù),則可以采用,for,循環(huán),;否則,如果預(yù)先無法確定循環(huán)的次數(shù),則可以使用,while,循環(huán),。,這個例子給出了計算,eps,的一種方法。,這里我們用大寫,EPS,,,因此系統(tǒng)中,eps,的值不會被覆蓋。當(dāng),EPS=,eps,時,條件仍成立;而當(dāng),EPS=eps/2,時,條件為假,退出循環(huán),所以最后應(yīng)有,EPS=eps/2,。,num,用來記錄循環(huán)次數(shù)。,計算,Matlab,中,eps,值,while,循環(huán)舉例,num=0;EPS=1;,while,(1+EPS)1,EPS=EPS/2;,num=num+1;,end,
13、break,和,continue,break,語句用于,終止循環(huán),的執(zhí)行,即跳出最內(nèi)層循環(huán),continue,語句用于結(jié)束,本次循環(huán),,進(jìn)行下一次循環(huán),break,和,continue,一般與,if,語句配合使用,其它流控制語句,return,return,語句用于,退出,正在運行的腳本或函數(shù),通常用在函數(shù)文件中。,function,輸出形參列表,=,函數(shù)名,(,輸入形參列表,),%,注釋說明部分,(,可選,),函數(shù)體語句,(必須),第一行為,引導(dǎo)行,,表示該,M,文件是函數(shù)文件,函數(shù)名的命名規(guī)則與變量名相同,(,必須以字母開頭,),當(dāng),輸出形參,多于一個時,用,方括號,括起來,函數(shù)必須是一個
14、,單獨的,M,文件,函數(shù),文件名必須與函數(shù)名一致,以,百分號,開始的語句為,注釋語句,函數(shù)文件,函數(shù)文件由,function,語句引導(dǎo),function,y=,myfliplr,(x,),%,returns X with row preserved and columns,%,flipped in the left/right direction,%,%X=1 2 3 becomes 3 2 1,%4 5 6 6 5 4,%,num_col,=size(x,2);,%,取,x,的列數(shù),y=x,(:,num_col:-1:1),;,函數(shù)文件舉例,myfliplr.m,function,print
15、yh(n,),%,打印楊輝三角形,本函數(shù)沒有輸出參數(shù),yh,=1;,disp(yh,);,if n=1,return,;end,yh,=1,1;,disp(yh,);,for k=3:n,yh_old,=,yh,;k2=,ceil,(k/2);,for l=2:k2,yh(l,)=yh_old(l-1)+yh_old(l);,end,yh(k2+1:k)=yh(k-k2:-1:1);,disp(yh,);,end,函數(shù)文件舉例,printyh.m,楊輝三角形,1111211331146411510,10,51,其特點征是,它的兩條斜邊都是由數(shù)字,1,組成的,而其余的數(shù)則是等于它肩上的兩個數(shù)之和
16、。,函數(shù)調(diào)用的一般格式,輸出實參列表,=函數(shù)名,(,輸入實參列表,),函數(shù)調(diào)用時,,實參的順序,應(yīng)與函數(shù)定義時的,形參的順序,一致。,函數(shù)可以,嵌套調(diào)用,,即一個函數(shù)可以被其它函數(shù)調(diào)用,甚至可以被它自身調(diào)用,此時稱為,遞歸調(diào)用,。,函數(shù)所傳遞的參數(shù)具有可調(diào)性,,Matlab,用兩個永久變量,nargin,和,nargout,分別記錄調(diào)用該函數(shù)時的輸入實參和輸出實參的個數(shù)。,函數(shù)調(diào)用,%,函數(shù)文件,myfactor.m,function,f=,myfactor,(n,),if(n=1),f=1;,else,f=n*,myfactor,(n-1);,end,%,main.m,%,計算,s=1!+2!+3!+4!+5!,%,clear;,s=0;,for i=1:5,s=,s+,myfactor,(i,);,end,fprintf,(s=%g,n,s,),例:利用函數(shù)的遞歸調(diào)用計算,n,!,遞歸函數(shù)舉例,%,ex4argin.m,function out=ex4argin(a,b),if(,nargin,=1,),out=a;,elseif,(,nargin,=2,),out=a*b;,en