第3章 基本編程_第1頁
第3章 基本編程_第2頁
第3章 基本編程_第3頁
第3章 基本編程_第4頁
第3章 基本編程_第5頁
已閱讀5頁,還剩46頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、 第3章 基本編程教學目標l熟悉熟悉 MATLAB 的編程環境的編程環境l掌握掌握 MATLAB 的變量類型的變量類型l掌握掌握 MATLAB 中的流程控制語句中的流程控制語句l了解了解 MATLAB 中的錯誤處理中的錯誤處理l了解了解 MATLAB 程序調試方法程序調試方法l了解了解 MATLAB 代碼優化方法代碼優化方法教學內容lM文本文件介紹文本文件介紹 l函數流程控制函數流程控制 l函數變量函數變量 lMATLAB 編程錯誤處理編程錯誤處理 l調試程序調試程序 l優化程序優化程序 M文本文件介紹l選擇HOME | New | Script選項進入文本編輯器界面建立新的M文件M文本文件介

2、紹(1)在軟件操作界面選擇HOME|Open(2)在命令窗口中輸入edit+文件名lMATLAB中有大量的函數,包括: 內建函數(C語言編寫) 自帶函數(M文件)編輯已有的M文件M文件的分類函數functions腳本script 函數式M文件和腳本式M文件都是以.m作為擴展名的文本文件,在文本編輯器中創建文件。二者在語法和使用上略有區別。腳本l腳本式 M文件可包含MATLAB的各種命令,類似DOS系統中的批處理文件l腳本文件的運行:(1)EDITOR|RUN(2)在命令窗口中直接鍵入該M文件的文件名(3)運行腳本文件時,需要將腳本所在的目錄設置為當前工作目錄。腳本例:建立例:建立一個腳本一個腳

3、本M文件將變量文件將變量a, b的值互換,然后運行的值互換,然后運行該腳本文件該腳本文件。(1)首先建立腳本文件并以exch.m存盤clear;a=1:10;b=11 12 13 14;15 16 17 18;c=a;a=b;b=c;ab腳本(2)然后在MATLAB的命令窗口中輸入exch,將會執行該命令文件,輸出為:a = 11 12 13 14 15 16 17 18b = 1 2 3 4 5 6 7 8 9 10函數l函數式函數式M文件文件 function 返回變量列表=函數名(輸入變量列表) 注釋說明語句段 函數體第一行為function語句; function后定義函數名和輸入輸出

4、參數,函數被調用時按此格式執行;文件名必須與函數名一一對應;函數執行完后,只保留返回結果,不保留中間過程;函數例例 :建立:建立一個函數一個函數M文件將變量文件將變量a, b的值互換,然后在的值互換,然后在命令窗口調用該函數文件命令窗口調用該函數文件。(1)建立函數文件并以fexch.m存盤 functiona,b=fexch(a,b) c=a;a=b;b=c;函數輸出結果:x = 11 12 13 14 15 16 17 18y = 1 2 3 4 5 6 7 8 9 10在MATLAB的命令窗口中調用該函數文件:clear;x=1:10;y=11 12 13 14;15 16 17 18;

5、 %輸入參數,也就是給函數fexch(a,b)中的形參a,b賦具體值x,y=fexch(x,y) %調用函數fexch()函數與腳本函數函數l既有輸入參數,又有輸出參數l函數中的變量(除特殊聲明外)都是局部變量l函數名必須與文件名相同l函數被調用時,MATLAB會為它開辟臨時工作空間,當執行完函數或return命令時結束函數的運行,返回輸出值,同時清空臨時工作空間。腳本腳本l不用輸入參數,也沒有輸出參數l腳本中的變量都是全局變量l文件名任意指定l在函數中調用腳本文件,等價于在函數中將腳本文件的內容粘貼在調用的位置。變量類型MATLAB中的特殊變量中的特殊變量變量類型nargin的用法的用法lf

6、unctiona,b,c=example(x1,x2,x3,x4)la=0;b=0;lif(nargin=1)lc=x1;lelseif (nargin=2)l c=3;lelseif(nargin2)l c=5;lendnargout的用法的用法lfunctiona,b,n=fexch(a,b)lif(nargout=3)l n=5;l c=a;a=b;b=c;lend變量作用域l函數內部定義的變量均為局部變量,如果需要使用全局變量,則應當使用命令global定義,并且在任何使用該全局變量的函數中都應加以定義。l定義全局變量時,變量之間必須用空格分隔,不能以逗號分隔。程序控制結構l順序結構順

7、序結構 l循環結構循環結構 l選擇結構選擇結構l其他流程控制函數其他流程控制函數 順序結構l順序結構程序在編譯時,按照程序的物理位置順序執行,這種程序容易編制,但是結構單一,能夠實現的功能有限。 x=12;y=6;z=18;sum=x+y+z;sub=x-y-z 將以上程序以文件名sequence.m保存并在命令窗口中輸入sequence,并按Enter鍵確認,輸出結果:sum=36sun=-12循環結構lfor 語句語句 for 循環變量 = 表達式1:表達式2:表達式3 執行代碼塊 end 以表達式1的值為起點,表達式2的值為步長,表達式3的值為終點。 for 語句一定要有end結束標志;

8、 循環語句中要用“;”防止中間結果的輸出; 書寫時采用鋸齒結構以增加可讀性;循環結構例 已知當n=100時,求y的值。程序如下:程序如下:y=0;n=100;for i=1:n y=y+1/i/i;endy運行結果如下:運行結果如下:y = 1.6350循環結構l求求mysum=0; for i=1:1:100 mysum=mysum+i; end; mysum循環結構lwhile 語句語句 將相同的代碼塊執行多次,但是次數并不預先指定,當 while 的條件表達式為真時,執行代碼塊,直到條件表達式為假。while 語句結構:while 條件表達式 執行代碼塊end 循環結構mysum=0;i

9、=1; while (i=100) mysum=mysum+i; i=i+1; end mysum 例:求循環結構function output=function3(p,n)num=1;result1=1;tmp1=1;result2=1;tmp2=1;while numA(3)&A(1)+A(3)A(2)&A(2)+A(3)A(1) p=( A(1)+A(2)+A(3)/2; s=sqrt(p*(p-A(1)*(p-A(2)*(p-A(3); disp(s); else disp(不能構成一個三角形。) end運行結果如下:請輸入三角形的三條邊:6 8 10 24選擇結構l當判斷包含多個選擇

10、時,可以采用當判斷包含多個選擇時,可以采用elseif 語句,結構為:語句,結構為:if 表達式1 執行代碼塊1elseif 表達式2 執行代碼塊2elseif .else 執行代碼塊endl其中可以包含任意多個其中可以包含任意多個 elseif 語句。語句。 2022年4月19日第35頁選擇結構l例:輸入一個字符,若為大寫字母則輸出其后繼字符,例:輸入一個字符,若為大寫字母則輸出其后繼字符,若為小寫字母則輸出其前導字符,若為數字字符則輸若為小寫字母則輸出其前導字符,若為數字字符則輸出其對應的數值,若為其他字符則原樣輸出出其對應的數值,若為其他字符則原樣輸出。c=input(請輸入一個字符請輸

11、入一個字符,s);if c=A&c=a&c=0&c=9 disp(abs(c)-abs(0);else disp(c);end選擇結構lswitch-case-otherwiseswitch 表達式 case 值1 執行代碼塊1; case 值2 執行代碼塊2; . case 值n 執行代碼塊n; otherwise 執行代碼塊end選擇結構例:某商場對顧客所購買的商品實行打折銷售,標準如下例:某商場對顧客所購買的商品實行打折銷售,標準如下(商品價格用(商品價格用price來表示):來表示): price500 沒有折扣沒有折扣 500 price1000 5折扣折扣 1000 price25

12、00 8折扣折扣 2500 price5000 10折扣折扣 5000 price 14折扣折扣求所銷售商品的實際銷售價格。求所銷售商品的實際銷售價格。選擇結構price=input(請輸入商品價格請輸入商品價格:);pricec=fix(price/500)switch c case 0 rate=0; case 1 rate=5/100; case 2 rate=8/100; case 3 rate=8/100; case 4 rate=8/100;case 5 rate=10/100; case 6 rate=10/100; case 7 rate=10/100; case 8 rate

13、=10/100; case 9 rate=10/100; otherwise rate=14/100;endprice=price*(1-rate)其他流程控制函數 continue:continue 語句通常用在循環控制中,用于結束當次循環,繼續執行下一次循環,但是不結束當前循環。一般 continue 語句與 if 語句相結合,當滿足一定的條件時,執行 continue 語句。break:用于循環控制,中斷當前循環。 break 用于跳出當前循環,不再執行該循環的任何操作。return:結束該程序的執行,返回到調用函數或者鍵盤其他流程控制函數l中斷命令中斷命令 break例:雞兔同籠,頭有

14、36,腳共100,求雞兔各多少?i=1;while i if rem(100-i*2,4)=0&(i+(100-i*2)/4)=36 break; end i=i+1;endchicken=irabit=(100-2*i)/4其他流程控制函數lcontinue語句語句function output=function5(x,n)num=1;while num=n x_tmp=rand(1)*x; if x_tmp0.8*x continue; else output(num)=x_tmp; num=num+1; end end其他流程控制函數ltrycatchend語句語句 trycatch 語

15、句可以包容程序運行中的錯誤,并返回錯誤類型try 運行代碼塊1catch 運行代碼塊2endlasterr 首先執行語句段1,如果在執行過程中出現錯誤,則將錯誤信息賦給lasterr變量,并放棄該段語句,轉而執行語句段2中的語句。人機交互語句l echo語句 echo on 打開命令式文件的回應命令; echo off 關閉回應命令; echo file on 使file文件的命令在執行中被顯示; echo file off 關閉file文件的命令執行中的回應; echo on all 顯示所有執行文件的執行過程; echo off all 關閉所有執行文件的回應顯示;人機交互語句l用戶輸入提

16、示命令用戶輸入提示命令 input 用來提示用戶從鍵盤輸入數據、字符串用來提示用戶從鍵盤輸入數據、字符串或表達式,并接收輸入值。或表達式,并接收輸入值。r=input(How many apples:)How many apples:2r = 2人機交互語句l keyboard 暫停執行程序并等待鍵盤輸入狀態,處理完畢后,鍵入return并回車,程序將繼續運行,通常用來對程序調試及在程序中修改變量。l pause pause暫停程序,等待回應; pause(n)等待n秒后繼續執行; pause on 顯示并執行pause命令; pause off 顯示但不執行pause命令。 程序調試l語法錯

17、誤 發生在程序代碼的解釋過程中,一般有函數參數輸入類型有誤或矩陣運算階數不符等情況。l執行錯誤 發生在程序運行過程中,出現溢出或死循環等引起,錯誤與程序有關,較難發現。程序調試l直接調試法直接調試法 l利用調試工具利用調試工具l采用命令行調試程序 l采用調試界面調試程序 直接調試法(1)通過分析后,將可能出錯的語句后面的分號(;)刪除,將結果顯示在命令窗口中,與預期值進行比較;(2)利用函數 disp 顯示中間變量的值;(3)在程序中的適當位置添加 keyboard 指令。當 MATLAB 執行至此處時將暫停,等待用戶反應。(4)在調試一個單獨的函數時,可以將函數改寫為腳本文件,此時可以直接對輸入參數賦值,然后以腳本方式運行該 M 文件,這樣可以保存中間變量,在運行完成后,可以查看中間變量的

溫馨提示

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

評論

0/150

提交評論