掌MATLAB程序設(shè)計及應(yīng)用實(shí)例_第1頁
掌MATLAB程序設(shè)計及應(yīng)用實(shí)例_第2頁
掌MATLAB程序設(shè)計及應(yīng)用實(shí)例_第3頁
掌MATLAB程序設(shè)計及應(yīng)用實(shí)例_第4頁
掌MATLAB程序設(shè)計及應(yīng)用實(shí)例_第5頁
已閱讀5頁,還剩56頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第5章MATLAB程序設(shè)計2010-08-231.本章內(nèi)容5.1M文件5.2函數(shù)m文件5.3數(shù)據(jù)的輸入輸出指令5.4選擇結(jié)構(gòu)5.5循環(huán)結(jié)構(gòu)5.6M文件調(diào)試5.7應(yīng)用程序接口2.在matlab窗口輸入數(shù)據(jù)和命令進(jìn)行計算時,當(dāng)處理復(fù)雜問題和大量數(shù)據(jù)時是不方便的。用戶如想靈活應(yīng)用matlab去解決實(shí)際問題,充分調(diào)用matlab的科學(xué)技術(shù)資源,就需要編輯m文件包含matlab語言代碼的文件稱為m文件,其擴(kuò)展名為m。5.1M文件3.1.建立新的M文件(1)菜單操作:MATLAB命令窗口的File菜單→New菜單項(xiàng)→M-file命令.M文件的建立與編輯4.(2)命令操作:在MATLAB命令窗口輸入命令edit。(3)命令按鈕操作:單擊MATLAB命令窗口工具欄上的“新建”命令按鈕。2.編輯已有的M文件m文件的類型是普通的文本文件,可以使用系統(tǒng)認(rèn)可的文本文件編輯器來建立m文件。如dos下的edit,windows的記事本和word等。M文件的建立與編輯5.M文件有兩類:

獨(dú)立的m文件—稱命令文件可調(diào)用m文件—稱函數(shù)文件(1)命令文件—簡單的m文件

命令文件實(shí)際上是一串指令的集合,與在命令窗口逐行執(zhí)行文件中的所有指令,其結(jié)果是一樣的。沒有輸入輸出參數(shù)。M文件的分類6.命令文件包括兩部分:注釋文件和程序文件%RANK Numberoflinearlyindependentrowsorcolumns.% K=RANK(X)isthenumberofsingularvaluesofX% thatarelargerthanMAX(SIZE(X))*NORM(X)*EPS.% K=RANK(X,tol)isthenumberofsingularvaluesofXthat% arelargerthantol.% Copyright(c)1984-94byTheMathWorks,Inc.s=svd(x);if(nargin==1)tol=max(size(x))*max(s)*eps;endr=sum(s>tol);程序部分7.例建立一個命令文件將變量a,b的值互換,然后運(yùn)行該命令文件。

首先,建立m文件并以文件名exch.m存盤;接著,在編輯窗口輸入下列程序:clear;a=1:10;b=[11,12,13,14;15,16,17,18];c=a;a=b;b=c;ab書寫完成,切忌保存。命令m文件舉例在MATLAB的命令窗口中輸入exch,將會執(zhí)行該命令文件。8.matlab用戶可以根據(jù)需要編輯自己的m文件,它們可以像庫函數(shù)一樣方便的調(diào)用,從而極大地擴(kuò)展了matlab

的能力。對于某一類特殊問題,如創(chuàng)建了許多m函數(shù)文件,則可形成新的工具箱。用matlab語言創(chuàng)建定義新的matlab函數(shù)的功能,正體現(xiàn)了matlab語言強(qiáng)大的擴(kuò)展功能。需要輸入變量,返回輸出變量(2)函數(shù)m文件9.函數(shù)M文件的基本結(jié)構(gòu)函數(shù)定義行H1行對程序的總體介紹函數(shù)說明對程序詳細(xì)描述程序主體注釋解釋程序功能的文字

說明:除程序主體外,其他部分以%開頭。函數(shù)描述10.function[s,p]=fcircle(r)%FCIRCLEcalculatetheareaandperimeterofacircleofradiir%r圓半徑%s圓面積%p圓周長s=pi*r*r;p=2*pi*r;

函數(shù)m文件舉例程序主體11.

matlab自定義的函數(shù)文件稱內(nèi)置函數(shù)文件,因此,屬于函數(shù)m文件調(diào)用內(nèi)置函數(shù)的方法:使用函數(shù)名并給出相應(yīng)的入口、出口參數(shù)即可。例如:sin.m函數(shù)——用typesin查不到。調(diào)用格式:y=sin(2*x)

實(shí)際應(yīng)用中:

x=0:2*pi/180:2*pi;y=sin(2*x)plot(x,y)matlab內(nèi)置函數(shù)文件12.(1)函數(shù)文件的基本結(jié)構(gòu)函數(shù)文件由function語句引導(dǎo)其基本結(jié)構(gòu)為:

function輸出形參表=函數(shù)名(輸入形參表)%注釋說明部分函數(shù)體語句5.2函數(shù)文件13.函數(shù)文件的格式說明(1)關(guān)于函數(shù)文件名:函數(shù)文件名與函數(shù)名也可以不相同(一般設(shè)為相同!)。當(dāng)兩者不同時,MATLAB將忽略函數(shù)名而確認(rèn)函數(shù)文件名,因此調(diào)用時使用函數(shù)文件名。(2)關(guān)于注釋說明部分。注釋說明包括三部分內(nèi)容:①緊隨函數(shù)文件引導(dǎo)行之后以%開頭的第一注釋行。②第一注釋行及之后連續(xù)的注釋行。③與在線幫助文本相隔一空行的注釋行。

(1)函數(shù)文件的基本結(jié)構(gòu)14.函數(shù)調(diào)用的一般格式:

[輸出實(shí)參表]=函數(shù)名(輸入實(shí)參表)

注意:等號左邊是方括號,右邊輸入?yún)?shù)用括號(2)函數(shù)文件的調(diào)用15.例5.1編寫函數(shù)文件求半徑為r的圓的面積和周長function[s,p]=fcircle(r)%FCIRCLEcalculatetheareaandperimeterofacircleofradiir%r圓半徑%s圓面積%p圓周長s=pi*r*r;p=2*pi*r;

以上函數(shù)文件以文件名fcircle.m存入c:\matlab7\work\mas下,然后在MATLAB命令窗口調(diào)用該函數(shù):

[s,p]=fcircle(10)16.函數(shù)的遞歸調(diào)用例:利用遞歸調(diào)用函數(shù)文件factor.m:functionf=factor(n)ifn<=1f=1;elsef=factor(n-1)*n;end然后在MATLAB命令窗口調(diào)用該函數(shù):f=factor(5)(2)函數(shù)文件的調(diào)用f=5!17.函數(shù)所傳遞參數(shù)的可調(diào)性在調(diào)用函數(shù)時,MATLAB用兩個永久變量nargin和nargout分別記錄調(diào)用該函數(shù)時的輸入實(shí)參和輸出實(shí)參的個數(shù)。只要在函數(shù)文件中包含這兩個變量,就可以準(zhǔn)確地知道該函數(shù)文件被調(diào)用時的輸入輸出參數(shù)個數(shù),從而決定函數(shù)如何進(jìn)行處理例:nargin用法示例(2)函數(shù)文件的調(diào)用18.函數(shù)文件examp.m:functionfout=charray(a,b,c)ifnargin==1fout=a;elseifnargin==2fout=a+b;elseifnargin==3fout=(a*b*c)/2;end命令文件main5_2.m:x=[1:3];y=[1;2;3];examp(x)%結(jié)果是ans=123examp(x,y')%結(jié)果是ans=246examp(x,y,3)%結(jié)果是ans=21(2)函數(shù)文件的調(diào)用19.全局變量用命令global定義。函數(shù)文件的內(nèi)部變量是局部的,與其他函數(shù)文件及MATLAB工作空間相互隔離例全局變量應(yīng)用示例。先建立函數(shù)文件wadd.m,該函數(shù)將輸入的參數(shù)加權(quán)相加。

functionf=wadd(x,y)globalALPHABETAf=ALPHA*x+BETA*y;在命令窗口中輸入:globalALPHABETAALPHA=1;BETA=2;s=wadd(1,2)(3)全局變量和局部變量20.5.3數(shù)據(jù)的輸入輸出指令input函數(shù)----提示用戶從鍵盤輸入數(shù)值和字符串等pause函數(shù)----暫停,等待用戶響應(yīng)dips函數(shù)----輸出相關(guān)內(nèi)容21.input函數(shù)調(diào)用格式為:

A=input(‘提示信息’,選項(xiàng));其中提示信息為一個字符串,用于提示用戶輸入什么樣的數(shù)據(jù)。如果在input函數(shù)調(diào)用時采用's'選項(xiàng),則允許用戶輸入一個字符串。例如,想輸入一個人的姓名,可采用命令:

xm=input('Whatisyourname?','s')

Whatisyourname?xiaoqiangxm=xiaoqiang22.

其調(diào)用格式為:

pause(延遲秒數(shù))pause函數(shù)如果省略延遲時間,直接使用pause,則將暫停程序,直到用戶按任一鍵后程序繼續(xù)執(zhí)行。

若要強(qiáng)行中止程序的運(yùn)行可使用Ctrl+C命令。23.disp函數(shù)調(diào)用格式為

disp(輸出項(xiàng))

其中,輸出項(xiàng)既可以為字符串,也可以為矩陣。

注意:用disp函數(shù)顯示矩陣時將不顯示矩陣的名字,而且其格式更緊密,且不留任何沒有意義的空行。24.

程序如下:

a=input('a=?');b=input('b=?');c=input('c=?');

d=b*b-4*a*c;x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];

disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);例5.2求一元二次方程ax2+bx+c=0的根。25.5.4選擇結(jié)構(gòu)——if語句if語句在MATLAB中,if語句有3種格式。switch語句try語句

26.語句格式為:if條件語句組end1.單分支if語句當(dāng)條件成立時,則執(zhí)行語句組,執(zhí)行完之后繼續(xù)執(zhí)行if語句的后繼語句,若條件不成立,則直接執(zhí)行if語句的后繼語句27.雙分支if語句格式為:if條件語句組1else語句組2end2.雙分支if語句當(dāng)條件成立時,執(zhí)行語句組1,否則執(zhí)行語句組2,語句組1或語句組2執(zhí)行后,再執(zhí)行if語句的后繼語句。28.例計算分段函數(shù)值程序如下:

x=input('請輸入x的值:');ifx==10y=cos(x+1)+sqrt(x*x+1);elsey=x*sqrt(x+sqrt(x));end

y29.多分支if語句格式為:if條件1語句組1elseif條件2語句組2……elseif條件m語句組melse語句組m+1end3.多分支if語句30.例5.2輸入一個字符,若為大寫字母,則輸出其后繼字符,若為小寫字母,則輸出其前導(dǎo)字符,若為數(shù)字字符則輸出其對應(yīng)的數(shù)值,若為其他字符則原樣輸出。程序如下:c=input('請輸入一個字符','s');ifc>='A'&c<='Z'disp(setstr(abs(c)+1));elseifc>='a'&c<='z'disp(setstr(abs(c)-1));elseifc>='0'&c<='9'disp(abs(c)-abs('0'));elsedisp(c);end31.5.4選擇結(jié)構(gòu)-switch語句switch語句其語句格式為:switch表達(dá)式case值1語句組1case值2語句組2……case值m語句組motherwise語句組m+1end32.例x=100switchfix(x/10)case{9,10}disp('gradeisA')case{8}disp('gradeisB')case{7}disp('gradeisC')case{6}disp('gradeisD')otherwisedisp('gradeisE')end5.4選擇結(jié)構(gòu)-switch語句33.5.4選擇結(jié)構(gòu)-try語句語句格式為:try語句組1catch語句組2end

try語句先試探性執(zhí)行語句組1,如果語句組1在執(zhí)行過程中出現(xiàn)錯誤,則將錯誤信息賦給保留的lasterr變量,并轉(zhuǎn)去執(zhí)行語句組2。這種試探性執(zhí)行語句是其他高級語言所沒有的。34.例矩陣乘法運(yùn)算要求兩矩陣的維數(shù)相容,否則會出錯。先求兩矩陣的乘積,若出錯,則自動轉(zhuǎn)去求兩矩陣的點(diǎn)乘程序如下:main5_3.mA=[1,2,3;4,5,6];B=[7,8,9;10,11,12];tryC=A*B;catchC=A.*B;endClasterr%顯示出錯原因35.5.5循環(huán)結(jié)構(gòu)循環(huán)語句for語句while語句循環(huán)的嵌套36.5.5循環(huán)結(jié)構(gòu)-for語句1.for語句語句格式為:for循環(huán)變量=表達(dá)式1:表達(dá)式2:表達(dá)式3循環(huán)體語句end37.for語句更一般的格式:for循環(huán)變量=矩陣表達(dá)式循環(huán)體語句end5.5循環(huán)結(jié)構(gòu)-for語句執(zhí)行過程是依次將矩陣的各列元素賦給循環(huán)變量,然后執(zhí)行循環(huán)體語句,直至各列元素處理完畢。實(shí)際上,“表達(dá)式1:表達(dá)式2:表達(dá)式3”是一個僅為一行的矩陣(行向量),因而列向量是單個數(shù)據(jù)。38.例已知5個學(xué)生4門功課的成績,求每名學(xué)生的總成績程序如下:s=0;a=[65,76,56,78;98,83,74,85;76,67,78,79;98,58,42,73;67,89,76,87];fork=as=s+k;enddisp(s);5.5循環(huán)結(jié)構(gòu)-for語句39.5.5循環(huán)結(jié)構(gòu)-while語句while語句的一般格式為:

while(條件)循環(huán)體語句end其執(zhí)行過程為:若條件成立,則執(zhí)行循環(huán)體語句,執(zhí)行后再判斷條件是否成立,如果不成立則跳出循環(huán)40.其他常用指令ContinueBreak41.continue命令通常用于for或while循環(huán)語句中,與if語句一起使用,達(dá)到跳過本次循環(huán),去執(zhí)行下一輪循環(huán)的目的分析下列程序,說明運(yùn)行結(jié)果及原因a=3;b=6;fori=1:3b=b+1;ifi<2continue%當(dāng)if條件滿足時不再執(zhí)行后面語句,跳出本次循環(huán)。enda=a+2%當(dāng)i<2時不執(zhí)行該語句end運(yùn)行結(jié)果:a=7b=942.

break命令通常用于for或while循環(huán)語句中,與if語句一起使用,中止本次循環(huán),跳出最內(nèi)層循環(huán)分析下列程序,說明運(yùn)行結(jié)果及原因a=3;b=6;fori=1:3b=b+1;ifi>2break%當(dāng)if條件滿足時不再執(zhí)行循環(huán)enda=a+2end運(yùn)行結(jié)果:a=7b=9i<2a=3b=643.程序流控制語句

return指令終止當(dāng)前的命令序列,把控制返回到調(diào)用函數(shù)或鍵盤。Keyboard

把“控制權(quán)”交給鍵盤。echo指令

用來控制m文件在執(zhí)行過程中是否顯示44.keyboard指令

多用于程序修改或測試;一般使用在m-files里面。當(dāng)運(yùn)行m-files的程序時,它會在keyboard的位置停下,并且在命令窗口出現(xiàn)K>>

,這時你可以在命令窗口中輸入命令,可以測試軟件已經(jīng)運(yùn)行的程序(keyboard以上的程序),或者可以改變已運(yùn)行程序所得到的變量!當(dāng)調(diào)試好了以后,在K>>后面輸入return,程序就會接著運(yùn)行keyboard以后的程序。

45.echo指令用來控制m文件中程序代碼在執(zhí)行過程中是否顯示echoon—打開所有命令文件的顯示方式

echooff—關(guān)閉所有命令文件的顯示方式

echo—在以上兩者間切換

echo對于命令文件和函數(shù)文件有所不同,命令文件用法簡單,函數(shù)文件用法較復(fù)雜,具體請help查詢。

echofileon—打開file函數(shù)文件的顯示方式

echofileoff—關(guān)閉file函數(shù)文件的顯示方式

echofile—切換file函數(shù)文件的顯示方式

echoonall—打開所有函數(shù)文件的顯示方式

echooffall—關(guān)閉所有函數(shù)文件的顯示方式46.5.5循環(huán)的嵌套如果一個循環(huán)結(jié)構(gòu)的循環(huán)體又包括一個循環(huán)結(jié)構(gòu),就稱為循環(huán)的嵌套,或稱為多重循環(huán)結(jié)構(gòu)。可以按照嵌套層數(shù),分別叫做二重循環(huán)、三重循環(huán)等。處于內(nèi)部的循環(huán)叫作內(nèi)循環(huán),處于外部的循環(huán)叫作外循環(huán)。在設(shè)計多重循環(huán)時,要特別注意內(nèi)、外循環(huán)之間的關(guān)系,以及各語句放置的位置,不要搞錯。47.MATLAB程序設(shè)計原則和技巧1、%后面的內(nèi)容是程序的注解,要善于運(yùn)用注解使程序更具可讀性。2、養(yǎng)成在主程序開頭用clear指令清除變量的習(xí)慣,以消除工作空間中其他變量對程序運(yùn)行的影響。但注意在子程序中不要用clear。3、參數(shù)值要集中放在程序的開始部分,以便維護(hù)。要充分利用MATLAB工具箱提供的指令來執(zhí)行所要進(jìn)行的運(yùn)算,在語句行之后輸入分號使其及中間結(jié)果不在屏幕上顯示,以提高執(zhí)行速度。48.4、程序盡量模塊化,也就是采用主程序調(diào)用子程序的方法,將所有子程序合并在一起來執(zhí)行全部的操作。5、盡量使用MATLAB內(nèi)部定義的函數(shù)6、充分利用Debugger來進(jìn)行程序的調(diào)試(設(shè)置斷點(diǎn)、單步執(zhí)行、連續(xù)執(zhí)行)7、設(shè)置好MATLAB的工作路徑,以便程序運(yùn)行。49.本節(jié)內(nèi)容是需上機(jī)應(yīng)用的重點(diǎn)內(nèi)容。程序出錯主要為兩類:1、語法錯誤如缺‘(’或‘)’等,在運(yùn)行時可檢測出大多數(shù)該類錯誤,并指出錯在哪一行。2、算法錯誤

邏輯上的錯誤,不易查找,遇到此類錯誤時需耐心。一般可考慮如下方法:直接調(diào)試法和工具調(diào)試法5.6程序的調(diào)試50.直接調(diào)試法指在利用matlab的相關(guān)指令對程序進(jìn)行調(diào)試。主要方法有:

■刪除句尾分號和利用disp語句,顯示中間結(jié)果;

■在適當(dāng)位置加上keyboard語句,使程序暫停;■在函數(shù)定義行之前加上%注釋,使之變成腳本語言;■利用echo指令,使運(yùn)行時在屏幕上逐行顯示文件內(nèi)容?!鯟trl+C強(qiáng)行停止程序直接調(diào)試法51.直接調(diào)試法一些輔助函數(shù):常用指令:return,echo,input,pause,keyboard,break;

■echo命令可以使文件命令在執(zhí)行時可見,這對程序的調(diào)試和演示很有用。

■keyboard請求鍵盤輸入命令

■pause等待用戶反映命令警告命令:error,warning.lasterr,lastwarn,

溫馨提示

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

評論

0/150

提交評論