版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第六講,Matlab提供的工作方式包括:,1 交互式指令操作:用戶在命令窗口輸入命令,系統(tǒng)執(zhí)行現實結果,適合于簡單的問題的處理 2 M文件的編程工作:調用函數文件執(zhí)行程序,M文件是由Matlab語句構成的ASCII碼文本文件,擴展名為.m。 M文件有兩種形式:M腳本文件和M函數文件。,一 M文件,1 M文件的創(chuàng)建和執(zhí)行 2 M腳本文件和函數文件 3 M文件的結構,1) M文件創(chuàng)建,保存,打開和編輯。(見演示),2) 搜索和執(zhí)行M文件:,執(zhí)行方法:用戶在命令窗口鍵入M文件名,并按下回車鍵來執(zhí)行。系統(tǒng)首先搜索該文件,若文件存在,以解釋方式按順序執(zhí)行M文件的語句。 搜索過程: 檢查工作空間是否有該名
2、稱 檢查是否為MATLAB內部函數 檢查當前目錄 在默認搜索路徑中查找文件,1 M文件的創(chuàng)建和執(zhí)行,2 腳本文件和函數文件,1) M腳本文件,是一串按用戶意圖排列而成的(包括控制流指令) matlab指令集合。 腳本文件中的命令格式和前后位置,與在命令窗口中輸入的沒有任何區(qū)別。,腳本文件的特點:,1) MATLAB在運行腳本文件時,只是簡單地按順序從文件中讀取一條條命令,送到MATLAB命令窗口中去執(zhí)行。 2) 與在命令窗口中直接運行命令一樣,腳本文件運行產生的變量都是駐留在MATLAB的工作空間(workspace) 中,可以很方便地查看變量,除非用clear命令清除;腳本文件的命令也可以訪
3、問工作空間的所有數據,因此要注意避免變量的覆蓋而造成程序出錯。 3)腳本文件創(chuàng)建或定義的變量保留在工作空間中,因此空間中的其他命令文件和函數文件都可以訪問這些變量。 4) 因此在程序設計中,腳本文件常作為主程序來設計。,2) M函數文件,與腳本文件不同,函數文件是一個黑箱,從外界只能看到傳給它的輸入量和送出來的計算結果,內部運行是不可見的它的特點是:,(1) 從形式上看,與腳本文件不同,函數文件的第一行總是以”function”引導的函數申明行,該行還羅列出函數與外界聯系的全部標稱輸入輸出宗量對輸入輸出宗量的數目沒有限制即可以沒有輸入輸出宗量,也可以是任意多個數目,function 輸出變量列
4、表 = 函數名(輸入變量列表),函數聲明格式:,(2) matlab允許使用比標稱數目少的輸入輸出宗 量,實現對函數的調用.,(3)函數文件保存的文件名應該和用戶定義的函數 名一致。,(4) 從運行上看,與腳本文件不同.函數文件運行時, matlab會專門為它開辟一個臨時工作空間,稱為函數工作空間.所有中間變量都存放在函數工作空間.當執(zhí)行完文件最后一條指令或遇到return時,就結束該函數文件的運行,同時該臨時函數空間及其所有的中間變量就立即被清除,(6) 假如在函數文件中,發(fā)生對某腳本文件的調用,那么該腳本文件運行產生的所有變量都存放在該函數空間中,而不是在基本空間,(5) 函數空間隨具體M
5、函數文件的調用而產生,隨調用結束而刪除.函數空間是相對基本空間獨立的,臨時的.在matlab整個運行期間,可以產生任意多個臨時函數空間,3 M函數文件的一般結構,(1) 函數申明行:位于函數文件的首行,以matlab關鍵字function開頭,函數名以及函數的輸入輸出宗量都在這一行定義,(2) H1行:緊隨函數申明行之后以%開頭的第一注釋行包括:大寫體的函數文件名,運用關鍵詞簡要描述函數功能該行供lookfor關鍵詞查詢和help在線幫助使用,(3) 在線幫助文本區(qū):H1行及其之后的連續(xù)以%開頭的所有注釋行構成的整個在線幫助文本.通常包括:函數輸入輸出宗量的含義,調用格式說明.,(4) 編寫和
6、修改記錄:以%開頭,注釋編寫和修改的日期,版本記錄,(5) 函數體:是實現M文件功能的指令集它接收輸入宗量,進行程序流程控制,得到輸出宗量如果僅從運算角度看,只有函數申明行和函數體兩部分是構成M函數文件必不可少的,說明: 從結構上看,M腳本文件僅比M函數文件少一個函數申明行,其余各部分的構造和作用都相同 函數定義名和保存文件名一致兩者不一致時,將忽視文件首行的函數定義名,而以保存文件名為準 函數文件的名字必須以字母開頭,后面可以是字母,下劃線以及數字的任意組合,例 M函數文件示例,% circle.m function sa=circle(r,s) % 函數申明行 % CIRCL plot a
7、 cirlce of radiar in the line specified by s % r 指定半徑數值 % s 指定線型顏色的字符串 % sa 圓面積 % % circle(r) 利用藍實線畫半徑為r的圓 % circle(r,s) 利用s指定的顏色畫半徑為r的圓 % sa=circle(r) 計算圓面積,并畫半徑為r的蘭色圓周 % sa=circle(r,s) 計算圓面積,并畫半徑為r的圓,s指定線的顏色 % 編寫于x年x月x日,修改于x年x月x日,if nargin2 error(輸入宗量太多); end; if nargin=1 s=b; end; clf; t=0:pi/100
8、:2*pi; x=r*exp(i*t); if nargout=0 plot(x,s); else sa=pi*r*r; fill(real(x),imag(x),s) end axis(square),M函數文件調用方式:,function sa=circle(r,s),y=circle(5,r-),二 Matlab程序控制流,for循環(huán)結構 while循環(huán)結構 if-else-end分支結構 switch-case結構 try-catch結構 控制程序流的其他常用指令,matlab提供了五種控制程序流的結構:,1 for循環(huán)結構,for k=k1:inc:k2 (和一維數組冒號法定義相同)
9、 (command) % 循環(huán)體 end,例 for循環(huán)示例,for ii=1:10 x(ii)=ii; end,x = 1 2 3 4 5 6 7 8 9 10,說明: 循環(huán)不會因為在循環(huán)體內對循環(huán)變量更新設置而中 斷 在for后面的表達式中的數組可以為任何合法的matlab數組 循環(huán)結構可以嵌套使用 為了得到高效率的代碼,應盡量提高代碼的向量化程度,避免使用循環(huán)結構;在循環(huán)指令之前應盡量對數組進行預定義 由于i和j是預定義變量,作虛單位使用建議不作為循環(huán)變量使用,例 多重循環(huán)生成9x9乘法表,for ii=1:9 for kk=1:ii a(ii,kk)=ii*kk; end end,x=
10、1:1:9; y=x; x=x*y; a=tril(x);,矩陣的運算得到,(2) while循環(huán)結構,while expression (command) % 循環(huán)體 end,說明: 在while和end之間的組命令為循環(huán)體. 當執(zhí)行到while指令時, 首先檢測expression的值,如其值為邏輯真(非0),則執(zhí)行循環(huán)體中的命令(組命令).當組命令執(zhí)行完畢,繼續(xù)檢測表達式的值,若仍為真,循環(huán)執(zhí)行組命令,一旦表達式為假,就結束循環(huán) while和for兩種循環(huán)的區(qū)別在于:while循環(huán)結構的循環(huán)體被執(zhí)行的次數是不確定的,而for結構中循環(huán)體的執(zhí)行次數是確定的 當while指令后的表達式是空數
11、組時,認為表達式值為假 使用while循環(huán)條件時要小心出現無限循環(huán),如果出現按Ctrl+C可終止,例 級數收斂性判斷:,當收斂到終值 s=2/6,的0.01%以內時,項數N是多少.,series=1; k=2; exact=pi2/6; while abs(series-exact)/exact)1e-4; series=series+1/k2; k=k+1; End,(3) if-else-end分支結構,if-else-end指令為程序流提供了一種分支結構,它的最常用的方式為:, 如果判決條件expression為一個空數組,認為條件為假 表達式由多個邏輯子表達式組成時,將盡可能少地檢測子
12、表達式的值 if指令判決和break指令配合使用,可以強制終止for或while循環(huán),(4) switch-case結構,switch expression case test1 command1 case test2 case testk commandk otherwise commands end,說明: 當遇到switch結構時,matlab將表達式的值依次和各個case指令后面的檢測值進行比較。如果比較結果為假,則取下一個檢測值再比較,一旦比較結果為真,matlab將執(zhí)行相應的一組命令,然后跳出該結構。如果所有的比較結果都為假,即表達式和所有的檢測值都不等,matlab將執(zhí)行othe
13、rwise后面的一組命令??梢娫摻Y構保證至少有一組命令會得到執(zhí)行。 switch指令后面的表達式為一個標量或者一個字符串。對于標量形式的表達式,比較這樣進行:表達式檢測值i.對于字符串,將調用函數strcmp來實現比較。 case指令后面的檢測值不僅可以是一個標量值或字符串,還可以是一個單元數組。如果一個檢測值是一個單元數組,matlab將把表達式的值和該單元數組中的所有元素進行比較,如果單元數組中某個元素和表達式的值相等,就認為此次比較結果為真。 當matlab檢測到某個檢測值和表達式相等時,將執(zhí)行相應的一組命令,執(zhí)行完畢,自動跳出swith結構,無需使用break指令。,for month
14、 = 1:12 switch month case 3,4,5 season = Spring; case 6,7,8 season = Summer; case 9,10,11 season = Autumn; case 12,1,2 season = Winter; end fprintf(Month %d = %s.n, month, season); end,例:根據月份來判斷季節(jié),(5) try-catch結構,try command1 % 組命令1總被執(zhí)行,若正確,則跳出此結構 catch command2 % 僅當組命令1出現執(zhí)行錯誤,組命令2才被執(zhí)行 end,說明: 只有在執(zhí)行
15、組命令1出現錯誤后,組命令2才被執(zhí)行 可調用lasterr函數查詢出錯原因,如果函數lasterr運行結構為一個空 串,則表明命令1被成功執(zhí)行了。 當執(zhí)行組命令2時出錯,則終止該結構,例 try-catch結構應用,N=4; A=magic(3); % A為3x3矩陣 try A_N=A(N, : ); % 取A的第N行元素 catch A_end=A(end, : ); end lasterr,(6) 控制程序流的其他常用指令,1) v=input(msg) v=input(msg, s ) 該指令執(zhí)行時,控制權交給鍵盤,待輸入結束,按Enter鍵,控制權交換matlab ,msg是提示用的
16、字符串,告訴用戶輸入什么.第一種格式用于鍵入數值,字符 串等數據,最后v是一個數值(包括數組)或者一個字符串第二種格式,不管 鍵入什么,總以字符串形式賦給變量v,2) keyboard 從M文件中激活鍵盤,遇到該命令時,將控制權交給鍵盤,用戶可以從鍵盤輸入各種matlab指令,僅當用戶輸入return指令后,控制權才交還給程序與input指令的區(qū)別是:該指令允許輸入任意多個matlab指令,而input只能輸入賦給變量的值該指令在調試M文件時非常有用,3) continue 跳過位于其后的循環(huán)中的其他指令,執(zhí)行循環(huán)的下一個迭代,例 更改數組中的值,a=ones(1,12); for k=1:1
17、2 if rem(k,3)=0 continue else a(k)=k; end end,4) Break 終止while,for循環(huán),也可以在if-end, switch-case, try-catch中導致中斷,5) pause, pause(n) 第一種格式使程序暫停執(zhí)行,等待用戶按任意鍵繼續(xù),第二種格式使程序暫停n秒后,再繼續(xù)執(zhí)行,8) lasterr, 顯示最新出錯原因,并終止程序,9) lastwarn 顯示matlab自動給出的最新警告程序并繼續(xù)運行,6) return 結束return指令所在函數的執(zhí)行,把控制轉至主調函數或指令窗.否則,只有 整個被調函數執(zhí)行完畢才轉出,7)
18、 error(msg) 顯示出錯信息msg,終止程序,10) warning(msg) 顯示警告信息msg,程序繼續(xù)執(zhí)行,三 變量的檢測傳遞和限權使用函數,1 輸入輸出宗量檢測指令 2 局部變量和全局變量 3 子函數和私用函數,1 輸入輸出宗量檢測指令,nargin-在函數體內,用于獲取實際輸入宗量 nargout-在函數體內,用于獲取實際輸出宗量 nargin(fun)-獲取fun指定函數的標稱輸入宗量 nargout(fun)-獲取fun指定函數的標稱輸出宗量 inputname(n)-在函數體內使用,給出第n個輸入宗量的實際調用變量名 Varargin-輸入參數 Varargout-輸出
19、參數,例:參見教學示例circle,2 局部變量和全局變量,(1) 局部變量 它存在于函數空間內部的中間變量,產生于該函數的運行過程中,其影響范圍 也僅限于該函數本身,(2) 全局變量 通過global指令,matlab也允許幾個不同的函數空間以及基本工作空間共享同一個變量.這種共享的變量稱為全局變量.每個希望共享全局變量的函數或matlab基本工作空間,必須逐個用global對具體變量加以專門定義.沒采用global定義的函數或基本工作空間,將無權享用全局變量,對全局變量的定義必須在該變量被使用之前進行,建議把全局變量的定義放在函數體的首行位置,并使用大寫字符命名全局變量由于全局變量損害函數
20、的封裝性,因此不提倡使用全局變量,3 子函數和私用函數,(1) 子函數,matlab允許一個M函數文件包含多個函數的代碼,其中,第一個出現的函數稱為主函數該文件中的其他函數稱為子函數保存時所用函數文件名與主函數定義名相同外部程序只能對主函數進行調用,1) 每個子函數的第一行是其函數申明行 2) 在M函數文件內,主函數的位置是不可改變的,但子函數的排列次序可以任意變動 3) 子函數只能被處于同一文件的主函數或其他子函數調用 4) 在M函數文件中,任何指令通過函數名對函數進行調用時,子函數的優(yōu)先級僅次于內建函數 5) 同一文件的主函數,子函數的工作空間都是彼此獨立的,各函數間的信息,或通過輸入輸出
21、宗量,或通過全局變量傳遞,或通過跨空間指令傳遞,子函數性質:,(2) 私用函數,所謂私用函數,是指位于private目錄上的M文件函數其性質如下:,1) 私用函數的構造與普通M函數完全相同 2) 私用函數只能被private目錄的直接父目錄上的M文件函數所調用,它不能被其他目錄上的任何M函數, M腳本文件或matlab指令窗中的命令所調用也不能被直接父目錄上的M腳本文件調用 3) M文件中,任何指令通過函數名對函數進行調用時,私用函數的優(yōu)先級雖低于內建函數和子函數,但高于其他任何目錄上的函數,matlab的搜索順序總結,假設matlab在一個文件中碰到指令cow時,它將按以下步驟逐步進行檢索,
22、(1) 檢查cow是否一個變量名,如果不是,執(zhí)行下一步; (2) 檢查cow是不是內建函數(Built-in Function),不是則執(zhí)行下一步 (3) 檢查cow是不是cow所在的M文件中的一個子函數,不是則往下執(zhí)行 (4) 檢查cow是不是它所在M文件的一個私有函數(先找cow.p,然后是 cow.m),不是則往下執(zhí)行 (5) 檢查cow是不是當前目錄下的文件(先找cow.p,然后是cow.m),不是 則往下執(zhí)行 (6) 檢查搜索路徑上是否有cow存在(先找cow.p,然后是cow.m) matlab將使用最先找到的那個cow,如果一直找不到,就給出錯誤提示,四 P碼文件,1 語法分析過
23、程和偽代碼,一個M文件首次被調用(運行文件名或被M文件編輯器打開)時,matlab將首先對該M文件進行語法分析(Parse),并把生成的相應內部偽代碼(簡稱P碼)文件存放在內存中此后,再次調用該M文件時,就直接調用該文件在內存中的P碼文件,而不會對原碼文件重復進行語法分析matlab的分析器總是把M文件連同被它調用的所有函數M文件一起變換成P碼文件的,P碼文件有與原碼文件相同的文件名,其擴展名為.p, P碼文件運行速度高于其原碼文件.假如存在同名的P碼和原碼文件,那么當該文件名被調用時,被執(zhí)行的肯定是P碼文件,說明: P碼文件較之原碼文件有兩大優(yōu)點:一是運行速度快,二是它是二進制文件,程序保密
24、性好,3 內存中P碼文件的列表和清除,inmem-羅列出內存中所有P碼文件名 clear funname-清除內存中的funname.p P碼文件 clear functions-清除內存中的所有P碼文件,如:pcode circle/circle.p,pcode funname-在當前目錄上生成funname.p pcode funname inplace-在funname.m所在目錄上生成P碼文件 funname.p,2 P碼文件的預生成,五 內聯函數,內聯函數是matlab提供另一種是實現函數功能的對象。創(chuàng)建內聯函數可以使用inline命令實現。,inline(string,arg1,arg2,) %創(chuàng)建內聯函數,語法:,string必須是不帶賦值號(“=”)的字符串;arg1和arg2是函數的輸入變量。,說明:,例:,f=inline(sin(x)*exp(-z*x),x,z) %創(chuàng)建內聯函數 y=f(5,0.3) %調用函數f,六 串演算函數,matlab還提供了兩種演算函數: 1是串演
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中職農業(yè)技術(農業(yè)技術應用)試題及答案
- 2025年大學一年級(醫(yī)學檢驗技術)臨床微生物檢驗試題及答案
- 2025年中職農業(yè)經濟管理(農村經濟核算)試題及答案
- 2025年高職第二學年(制冷與空調技術)制冷系統(tǒng)設計專項測試卷
- 2025年大學第四學年(生物技術)基因工程綜合測試試題及答案
- 2025年大學編輯出版學(編輯校對基礎)試題及答案
- 2025年大學(口腔醫(yī)學)口腔醫(yī)學心理學試題及答案
- 2025年大學護理技能綜合訓練(護理綜合技能)試題及答案
- 2025年高職新能源汽車檢測與維修(汽車減排管理)試題及答案
- 2025年中職西式烹飪工藝(海鮮烹飪)試題及答案
- 2022年-2024年青島衛(wèi)健委事業(yè)編中醫(yī)筆試真題
- JJG(交通) 070-2006 混凝土超聲檢測儀
- 合作銷售礦石協議書
- 2025上海初三各區(qū)一模、二模作文題、主題歸納及審題分析指導
- 圍手術期心肌梗塞的護理
- 2025-2026學年蘇教版(2024)小學科學二年級上冊期末測試卷附答案(共三套)
- 垃圾清運補充合同范本
- 2026屆湖南省長沙市長郡集團九年級物理第一學期期末預測試題含解析
- 生日主題宴會設計方案
- 《JJG 1081.1-2024鐵路機車車輛輪徑量具檢定規(guī)程 第1部分:輪徑尺》 解讀
- 《基坑圍護結構滲漏檢測技術標準》
評論
0/150
提交評論