第3章MATLAB程序設計00001_第1頁
第3章MATLAB程序設計00001_第2頁
第3章MATLAB程序設計00001_第3頁
第3章MATLAB程序設計00001_第4頁
第3章MATLAB程序設計00001_第5頁
已閱讀5頁,還剩46頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、第3章 matlab程序設計 3.1 m文件 3.2 數據的輸入輸出 3.3 選擇結構 3.4 循環結構 3.5 函數文件 3.6 全局變量和局部變量 目錄目錄3.1 m文件編程vm文件的功能和特點matlab是解釋性語言語法簡單調試容易人機交互性強開放性、可擴展性強3.1.1 m文件的建立與編輯1.建立新的m文件(1)菜單操作:matlab命令窗口的file菜單 new菜單項 m-file命令。(2)命令操作:在matlab命令窗口輸入命令edit。(3)命令按鈕操作:單擊matlab命令窗口工具欄上的“新建”命令按鈕。 2. 編輯已有的m文件 3.1.2 m文件的分類文件的分類分類:命令文

2、件分類:命令文件(script file/腳本文件腳本文件)和函數文件和函數文件(function file)。1。命令文件。命令文件有效指令的集合,以文件名直接調用運行。有效指令的集合,以文件名直接調用運行。若要一次執行大量的若要一次執行大量的matlab命令,可將這些命令存命令,可將這些命令存放於一個后綴為放於一個后綴為m的文件,并在的文件,并在 matlab提示號下鍵提示號下鍵入此文件名即可。入此文件名即可。 命令文件命令文件v對于一些比較簡單的問題 ,在指令窗中直接輸入指令計算.v對于復雜計算,采用命令文件最為合適.vmatlab只是按文件所寫的指令執行.vm命令文件的特點是:命令文件

3、的構成比較簡單,只是一串按用戶意圖排列而成的(包括控制流向指令在內的)matlab指令集合m文件中定義的變量為全局變量.命令文件運行后 ,所產生的所有變量都駐留在 matlab基本工作空間(base workspace)中。只要用戶不使用清除指令(clear), matlab指令窗不關閉,這些變量將一直保存在基本工作空間中 例3.1 建立一個命令文件將變量a,b的值互換,然后運行該命令文件。 首先建立命令文件并以文件名exch.m存盤: clear; a=1:10; b=11,12,13,14;15,16,17,18; c=a;a=b;b=c; a b 然后在matlab的命令窗口中輸入exc

4、h,將會執行該命令文件。目錄目錄函數文件函數文件v與命令文件不同與命令文件不同 ,函數文件猶如一個,函數文件猶如一個“黑箱黑箱”,把一些,把一些數據送進并經加工處理,再把結果送出來數據送進并經加工處理,再把結果送出來.vmatlab提供的函數指令大部分都是由函數文件定義的提供的函數指令大部分都是由函數文件定義的.用用m文件自定義函數,開頭為文件自定義函數,開頭為: function yname = fname(xname)yname: 因變量名,因變量名,fname: 函數名,函數名,xname:自變量:自變量名名. 文件名為文件名為fname,即與函數名相同,即與函數名相同. 例3.2 建立

5、一個函數文件將變量a,b的值互換,然后在命令窗口調用該函數文件。 首先建立函數文件fexch.m: function a,b=fexch(a,b) % exch c=a;a=b;b=c; 然后在matlab的命令窗口調用該函數文件: clear; x=1:10; y=11,12,13,14;15,16,17,18; x,y=fexch(x,y)目錄目錄由上例可以看出函數文件的一般格式為:function 輸出表函數名(輸入表)函數體 函數文件的第一行必須是以關鍵字function開始,表明該文件是函數文件輸入表是以逗號相分隔的形參輸出表是函數的返回值如果返回值只有一個方括號可以省略;如果返回值

6、不止一個,輸出表中的各個變量要以逗號隔開標準的函數文件基本結構。標準的函數文件基本結構。 (1)函數定義行(關鍵字)函數定義行(關鍵字function)functionout1,out2,. = filename(in1,in2,.)輸入和輸出(返回)的輸入和輸出(返回)的參數個數參數個數分別由分別由nargin和和nargout兩兩個個matlab保留的變量來給出。保留的變量來給出。(2)第一行幫助行,即)第一行幫助行,即h1行以(行以(%)開頭,作為)開頭,作為lookfor指令搜索的行,可以使程式易於了解與管理。特別要說明指令搜索的行,可以使程式易於了解與管理。特別要說明的是,第一注解行

7、通常用來簡短說明此的是,第一注解行通常用來簡短說明此m檔案的功能,以檔案的功能,以便便lookfor能以關鍵字比對的方式來找出此能以關鍵字比對的方式來找出此m檔案。檔案。 舉例來說舉例來說,fexch.m的第一注解行包含的第一注解行包含exch這個字,因此這個字,因此如果鍵入如果鍵入lookfor exch,matlab即可列出所有在第一注即可列出所有在第一注解行包含解行包含exch的的m檔案,因而檔案,因而fexch.m也會被列名在內。也會被列名在內。 (3)函數體說明及有關注解)函數體說明及有關注解,以(以(%)開頭,)開頭,用以說明函數的作用及有關內容用以說明函數的作用及有關內容(4)函

8、數體語句)函數體語句函數體內使用的除返回和輸入變量這些在函數體內使用的除返回和輸入變量這些在function語句中直接引用的變量以外的所語句中直接引用的變量以外的所有變量都是局部變量,即在該函數返回之有變量都是局部變量,即在該函數返回之后,這些變量會自動在后,這些變量會自動在matlab的工作空的工作空間中清除掉。如果希望這些中間變量成為間中清除掉。如果希望這些中間變量成為在整個程序中都起作用的變量,則可以將在整個程序中都起作用的變量,則可以將它們設置為全局變量它們設置為全局變量例3.3 建立一個自變量為m, n的函數,用其構造mn矩陣,其元素隨機取均勻分布在09中的整數: function

9、a=randint(m,n) a=floor(10*rand(m,n);以上兩句存為m文件randint.m. 用法: a=randint(2,3) %z則a為23矩陣,其元素為隨機取自09中的整數. 函數m文件中的變量為局部變量,要想在command window 或其他m文件中可調用,必須在這些地方把此變量說明為global: 例如,global a; 注意,m文件必須存放在matlab的搜索路徑中才可被調用. 3.2 數據的輸入輸出3.2.1 input函數 調用格式為: a=input(提示信息,選項); 其中,提示信息為一個字符串,用于提示用戶輸入什么樣的數據。 如果在input函數

10、調用時采用s選項,則允許用戶輸入一個字符串。例如,想輸入一個人的姓名,可采用命令: xm=input(whats your name?,s) whats your name?xiaoweixm = xiaowei目錄目錄 3.2.2 disp函數 調用格式為 disp(輸出項) 其中輸出項既可以為字符串,也可以為矩陣。 注意:用disp函數顯示矩陣時將不顯示矩陣的名字,而且其格式更緊密,且不留任何沒有意義的空行。目錄目錄 例3.4 求一元二次方程ax2 +bx+c=0的根。 程序如下: a=input(a=?); b=input(b=?); c=input(c=?); d=b*b-4*a*c;

11、 x=(-b+sqrt(d)/(2*a),(-b-sqrt(d)/(2*a); disp(x1=,num2str(x(1),x2=,num2str(x(2)目錄目錄disp(x) 顯示顯示x的內容,與的內容,與x 的區別是:前者僅顯示的區別是:前者僅顯示x的內容,后者多個的內容,后者多個x=.a=? 3b=? 4c=? 9x1=-0.66667+1.5986i,x2=-0.66667-1.5986i 3.2.3 pause函數 其調用格式為: pause(延遲秒數) 如果省略延遲時間,直接使用pause,則將暫停程序,直到用戶按任一鍵后程序繼續執行。 若要強行中止程序的運行可使用ctrl+c命

12、令。目錄目錄matlab流程控制流程控制v循環語句循環語句 for, whilev條件轉移條件轉移 if end, if elseif else endv開關語句開關語句 switch casev注釋語句注釋語句 %v中斷語句中斷語句 breakv暫停語句暫停語句 pausev回顯語句回顯語句 echo on/off 3.3 選擇結構 3.3.1 if語句 在在matlab中,中,if語句有語句有3種格式。種格式。 1.單分支單分支if語句語句 語句格式為:語句格式為: if 條件 語句組 end 當條件成立時,則執行語句組,執行完之當條件成立時,則執行語句組,執行完之后繼續執行后繼續執行if

13、語句的后繼語句,若條件不成立,語句的后繼語句,若條件不成立,則直接執行則直接執行if語句的后繼語句。語句的后繼語句。目錄目錄 2.雙分支if語句 語句格式為: if 條件 語句組1 else 語句組2 end 當條件成立時,執行語句組1,否則執行語句組2,語句組1或語句組2執行后,再執行if語句的后繼語句。目錄目錄 例3.4計算分段函數值目錄目錄2cos(1)1,10,10 xxxyx xx x程序如下: x=input(請輸入請輸入x的值的值:); if x=10 y=cos(x+1)+sqrt(x*x+1); else y=x*sqrt(x+sqrt(x); end y請輸入請輸入x的值的

14、值:y = 47.189312 3.多分支if語句語句格式為:if 條件1 語句組1 elseif 條件2 語句組2 elseif 條件m 語句組m else 語句組m+1end目錄目錄 例3.5 輸入一個字符,若為大寫字母,則輸出其后繼字符,若為小寫字母,則輸出其前導字符,若為數字字符則輸出其對應的數值,若為其他字符則原樣輸出。目錄目錄 c=input(請輸入一個字符,s); if c=a & c=a& c=0& c *inner matrix dimensions must agree. 3.4 循環結構 3.4.1 for語句 基本格式基本格式for for 循環

15、變量起始值:步長:終止值循環變量起始值:步長:終止值 循環體循環體 endend步長缺省值為步長缺省值為1 1,可以在正實數或負實數范圍內任意指定。,可以在正實數或負實數范圍內任意指定。對于正數,循環變量的值大于終止值時,循環結束;對對于正數,循環變量的值大于終止值時,循環結束;對于負數,循環變量的值小于終止值時,循環結束。循環于負數,循環變量的值小于終止值時,循環結束。循環結構可以嵌套使用。結構可以嵌套使用。目錄目錄 for i=1:5for i=1:5 for j=1:5 for j=1:5 a(i,j)=1/(i+j-1); a(i,j)=1/(i+j-1); end endendend

16、a=a= 1.0000 0.5000 0.3333 0.2500 0.2000 1.0000 0.5000 0.3333 0.2500 0.2000 0.5000 0.3333 0.2500 0.2000 0.16670.5000 0.3333 0.2500 0.2000 0.1667 0.3333 0.2500 0.2000 0.1667 0.1429 0.3333 0.2500 0.2000 0.1667 0.1429 0.2500 0.2000 0.1667 0.1429 0.1250 0.2500 0.2000 0.1667 0.1429 0.1250 0.2000 0.1667 0.

17、1429 0.1250 0.1111 0.2000 0.1667 0.1429 0.1250 0.1111 例例3.8 已知求已知求y的表達式,的表達式, 當當n=100時,求時,求y的值。的值。 目錄目錄在實際在實際matlab編程中,為提高程序的執行速度,常編程中,為提高程序的執行速度,常用向量運算來代替循環操作:用向量運算來代替循環操作: n=100; i=1:n; f=1./i.2; y=sum(f)11/ /niyi i程序如下:程序如下: y=0;n=100; for i=1:n y=y+1/i/i; end yy = 2047/1252 例3.9 求定積分 。程序如下: a=0;

18、b=3*pi;n=1000; h=(b-a)/n; x=a:h:b; f=exp(-0.5*x).*sin(x+pi/6); for i=1:n s(i)= (f(i)+f(i+1)*h/2; end s=sum(s) 目錄目錄1320()sin()6xexdx 事實上,matlab提供了有關數值積分的標準函數,實際應用中可直接調用這些函數求數值積分。s = 754/837 for語句更一般的格式:語句更一般的格式:for 循環變量=矩陣表達式 循環體語句 end 執行過程是依次將矩陣的各列元素賦給循環變量,然后執行循環體語句,直至各列元素處理完畢。實際上,“表達式1:表達式2:表達式3”是一

19、個僅為一行的矩陣(行向量),因而列向量是單個數據。目錄目錄 例3.10 已知5個學生4門功課的成績,求每名學生的總成績。程序如下:s=0;a=65,76,56,78;98,83,74,85;76,67,78,79;98,58,42,73;67,89,76,87for k=a s=s+k;enddisp(s);目錄目錄a = 65 76 56 78 98 83 74 85 76 67 78 79 98 58 42 73 67 89 76 87 275 340 300 271 319 3.4.2 while語句 while語句一般用于不能事先確定循環次數的情況 while語句的一般格式為: whi

20、le (條件) 循環體語句 end 其執行過程為:若條件成立,則執行循環體語句,執行后再判斷條件是否成立,如果不成立則跳出循環(如圖3.5所示)。目錄目錄while循環和循環和for循環的區別在于,循環的區別在于,while循環結構循環結構的循環體被執行的次數不是確定的,而的循環體被執行的次數不是確定的,而for結構中循結構中循環體的執行次數是確定的。環體的執行次數是確定的。例 用循環求解例 用循環求解 最小的 m用用while循環語句編寫一個計算循環語句編寫一個計算1000以內以內的的fibonacci數:數: f=1 1; i=1; while f(i)+f(i+1)1000 f(i+2)

21、=f(i)+f(i+1); i=i+1; end f= 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 例例3.11 產生一個長度為的調和數列。產生一個長度為的調和數列。 程序如下:程序如下: x=zeros(1,6); i=1; while i=6 x(i)=1/i; i=i+1; end format rat %使用分數表示數值使用分數表示數值 disp(x)目錄目錄columns 1 through 5 1 1/2 1/3 1/4 1/5 column 6 1/6 與循環結構相關的還有一個break語句,當在循環體內執行到該語句時,程序將跳出

22、循環。該語句一般與if語句配合使用。 例3.12 用while語句實現例3.8。 程序如下: y=0; i=1; while 1 f=1/i/i; y=y+f; if i=100 break; end i=i+1; end y目錄目錄 3.4.3 循環的嵌套v如果一個循環結構的循環體又包括一個循環結構,就稱為循環的嵌套,或稱為多重循環結構。可以按照嵌套層數,分別叫做二重循環、三重循環等。處于內部的循環叫作內循環,處于外部的循環叫作外循環。v在設計多重循環時,要特別注意內、外循環之間的關系,以及各語句放置的位置,不要搞錯。目錄目錄 例3.13 用篩選法求某自然數范圍內的全部素數。 程序如下: m

23、=input(m=); p=2:m; for i=2:sqrt(m) n=find(rem(p,i)=0&p=i); p(n)=; end p目錄目錄m=100p = columns 1 through 5 2 3 5 7 11 columns 6 through 10 13 17 19 23 29 columns 11 through 15 31 37 41 43 47 columns 16 through 20 53 59 61 67 71 columns 21 through 25 73 79 83 89 97 3.5 函數文件 3.5.1 函數文件的基本結構 函數文件由func

24、tion語句引導,其基本結構為: function 輸出形參表=函數名(輸入形參表) 注釋說明部分 函數體語句目錄目錄 說明:(1)關于函數文件名: 函數文件名與函數名也可以不相同。當兩者不同時,matlab將忽略函數名而確認函數文件名,因此調用時使用函數文件名。(2)關于注釋說明部分。注釋說明包括三部分內容:緊隨函數文件引導行之后以%開頭的第一注釋行。第一注釋行及之后連續的注釋行。與在線幫助文本相隔一空行的注釋行。 (3)關于return語句。執行到該語句就結束函數的執行,程序流程轉至調用該函數的位置。通常,在函數文件中也可不使用return語句,這時在被調函數執行完成后自動返回。目錄目錄

25、例3.14 編寫函數文件求半徑為r的圓的面積和周長。 函數文件如下: function s,p=fcircle(r) %circle calculate the area and perimeter of a circle of radii r %r 圓半徑圓半徑 %s 圓面積圓面積 %p 圓周長圓周長 %2001年年7月月30日編日編 s=pi*r*r; p=2*pi*r; 將以上函數文件以文件名fcircle.m存入c:matlabr11work下,然后在matlab命令窗口調用該函數: s,p=fcircle(10)目錄目錄s = 13823/44 p = 7100/113 3.5.2 函數調用 函數調用的一般格式是: 輸出實參表=函數名(輸入實參表)例3.15 利用函數文件,實現直角坐標(x,y)與極坐標(,)之間的轉換。 函數文件tran.m: function rho,theta=tran(x,y) rho=sqr

溫馨提示

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

評論

0/150

提交評論