版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第5章程序設計和M文件5.1程序控制5.2M文件結構5.3函數的使用5.4函數句柄和函數句柄5.5
函數繪圖5.6數值分析本章小結和練習5.1程序控制
5.1.1分支控制語句1.if結構
if條件1
語句段1 elseif條件2
語句段2 ...... else
語句段n
end例
根據函數計算結果,使用if結構,函數如下>>x=input('InputXplease.x=‘)%從鍵盤輸入x的值InputXplease.x=10>>ifx>=1y=x.^2-1elseif-1<x&x<1y=0*xelsey=-x.^2-1endy=992.switch結構switch表達式
case值1
語句段1
case值2
語句段2 ... otherwise
語句段n
end
說明:將表達式依次與case后面的值進行比較,滿足值的范圍就執(zhí)行相應的語句段,如果都不滿足則執(zhí)行otherwise后面的語句段;表達式只能是標量或字符串;case后面的值可以是標量、字符串或元胞數組,如果是元胞數組則將表達式與元胞數組的所有元素進行比較,只要某個元素與表達式相等,就執(zhí)行其后的語句段;switch和end必須配對使用。例
使用switch結構判斷學生成績的等級,90分以上為優(yōu),80~90為良,70~80為中,60~70為及格,60分以下為不及格。>>score=98;>>s1=fix(score/10); %取十位數>>switchs1case{9,10}s='優(yōu)'case8s='良'case7s='中'case6s='及格'otherwises='不及格'end5.1.2循環(huán)控制語句1.for循環(huán)
for循環(huán)變量=array
循環(huán)體
end說明:array可以是向量也可以是矩陣,循環(huán)執(zhí)行的次數就是array的列數,每次循環(huán)中循環(huán)變量依次取array的各列并執(zhí)行循環(huán)體,直到array所有列取完。forn=1:5 %循環(huán)5次forn=-1:0.1:1 %循環(huán)21次forn=linspace(-2*pi,2*pi,5) %循環(huán)5次a=eye(2,3);forn=a %循環(huán)3次,n為列向量例
使用for循環(huán)實現符號運算在實時編輯器窗口編寫,并運行程序。例
使用for循環(huán)計算并繪制x在[-5,5]范圍內的三段曲線,函數為
y=[];forx=-5:0.1:5ifx>=1y1=x.^2-1;elseif-1<x&x<1y1=0*x;elsey1=-x.^2-1;endy=[yy1];endx=-5:0.1:5;plot(x,y)例
使用for循環(huán)實現動畫曲線,在實時編輯器窗口編寫并運行程序。使用animatedline創(chuàng)建動畫線圖,在for循環(huán)中每次使用addpoints函數在曲線上繪制點,并使用drawnow刷新屏幕。h=animatedline;%創(chuàng)建動畫曲線axis([-1,1,0,2])x=-1:0.01:1;y=2*x.^2;fork=1:length(x)addpoints(h,x(k),y(k));%繪制點
drawnow%刷新屏幕end2.while循環(huán)
while條件表達式 循環(huán)體
end例使用while循環(huán)對單位矩陣進行轉換,轉換為對角線上分別是1、2、3、4、5的矩陣,在實時編輯器窗口編寫并運行程序。3.break和continue語句(1)break語句break語句使包含break的最內層for或while循環(huán)強制終止,并立即跳出該循環(huán)結構,執(zhí)行end后面的命令,break一般與if語句結合使用。(2)continue語句continue語句與break不同的是continue只結束本次for或while循環(huán),而繼續(xù)進行下次循環(huán),continue一般也與if語句結合使用。例使用for循環(huán)將字符串中的數值取出,遇到非數值則跳過。>>str='Theresultis100.';>>len=length(str);>>s=[];>>forn=1:lenifstr(n)>'9'|str(n)<'0' %非數值時continueends=[sstr(n)];end練習:編寫M腳本文件,分別使用for和while循環(huán)語句計算,當sum>1000時終止程序。答案:clearsum=0forn=1:10sum=n^n+sum
ifsum>1000breakendendclearsum=0;n=1;whilesum<10sum=n^n+sum
ifsum>1000 break endn=n+1end5.1.3錯誤控制語句 try
語句段1 catch
ME
語句段2 end說明:先試探地執(zhí)行語句段1,如果出現錯誤則立即終止當前正在運行的程序,將錯誤信息賦給變量ME,并轉而執(zhí)行語句段2中的語句;如果語句段1正確則跳過語句段2;當語句段1和語句段2都錯誤,則程序出錯。ME變量是一個
MException
對象。出現異常時,MATLAB創(chuàng)建
MException
對象,并在處理該錯誤的
catch
語句中返回該對象,如果不需要也可以僅使用catch語句。例
使用錯誤控制結構查看a*b的運算。a=[135];b=[123];tryc=a.*bcatchMEc=a.*b’end結果:c=22查看ME,MException
屬性顯示錯誤信息為矩陣的尺寸不匹配。5.1.4流程控制命令1.return命令return命令用于提前結束程序的執(zhí)行,并立即返回到上一級調用函數或等待鍵盤輸入命令,一般用于遇到特殊情況需要立即退出程序或終止鍵盤方式。應注意當程序進入死循環(huán)時,則按Ctrl+break鍵來終止程序的運行。2.keyboard命令keyboard命令用來使程序暫停運行,等待鍵盤命令,命令窗口出現“K>>”提示符,當鍵盤輸入“return”后,程序才繼續(xù)運行。keyboard命令可以用來在程序調試或程序執(zhí)行時使用。3.input命令
r=input(‘str’,‘s’)%從鍵盤中輸入數據保存到變量r。>>x=input('輸入數據x=')輸入數據x=5x=5>>x=input('輸入字符s=')輸入字符s='Hello'x='Hello’>>x=input('輸入表達式y(tǒng)=')輸入表達式y(tǒng)=sin(2)x=0.90934.disp命令disp命令是較常用的顯示命令,常用來顯示字符串型的信息提示。5.pause命令pause命令用來使程序暫停運行,當用戶按任意鍵才繼續(xù)執(zhí)行。pause(n) %暫停n秒6.warning和error命令在程序中可以給出錯誤或警告信息以提醒用戶。warning(‘message’) %顯示警告信息 error(‘message‘) %顯示錯誤信息5.2M文件結構MATLAB的程序如果要保存則使用擴展名是“.m”的M文件,M文件有兩種即M腳本文件(ScriptFile)和M函數文件(FunctionFile)。5.2.1M文件的一般結構1.函數聲明行函數聲明行是在M函數文件的第一行,只有M函數文件必須有,以“function”引導并指定函數名、輸入和輸出參數,M腳本文件沒有函數聲明行。2.H1行H1行是幫助文字的第一行。3.幫助文本4.程序代碼
程序代碼由MATLAB語句和注釋語句構成。在命令窗口中使用lookfor和help命令查找“ex5_9”的信息,則lookfor只顯示H1行的信息,而help命令顯示H1行和其它注釋文本.程序代碼幫助文本函數聲明行H1行5.2.2M腳本文件和M函數文件1.M腳本文件M腳本文件的說明如下:(1)MATLAB在運行腳本文件時,只是簡單地按順序從文件中讀取一條條命令,送到MATLAB命令窗口中去執(zhí)行;(2)M腳本文件運行產生的變量都駐留在MATLAB的工作空間中,可以很方便地查看變量,在命令窗口中運行的命令都可以使用這些變量;(3)腳本文件的命令可以訪問工作空間的所有數據,因此要注意避免工作空間和腳本文件中的同名變量相互覆蓋,一般在M腳本文件的開頭使用“clear”命令清除工作空間的變量。2.M函數文件M函數文件的說明如下:(1)M函數文件中的函數聲明行是必不可少的;(2)M函數文件在運行過程中產生的變量都存放在函數本身的工作空間中,函數的工作空間是獨立的、臨時的,隨具體的M函數文件調用而產生并隨調用結束而刪除,在MATLAB運行過程中如果運行多個函數則產生多個臨時的函數空間;(3)當文件執(zhí)行完最后一條命令或遇到“return”命令時就結束函數文件的運行,同時函數工作空間的變量被清除;(4)一個M函數文件至少要定義一個函數。函數聲明行的格式如下:function[輸出參數列表]=函數名(輸入參數列表)
說明:函數名是函數的名稱,保存時最好函數名與文件名一致,當不一致時,MATLAB以文件名為準;輸入參數列表是函數接收的輸入參數,多個參數間用“,”分隔;輸出參數列表是函數運算的結果。functionc=ex5_9(a,b)%EX5_9(a,b)returnstheproductofaandbmatrices%cistheproduct%aisavector%bisavectortryc=a*bcatchMEc=a*b’end例5-9
將例5-7的計算行向量乘積的運算使用M函數文件保存。調用該函數:>>z=ex5_9([123],[456])z=410185.2.3M文件編輯器/M實時編輯器窗口1.M文件編輯器窗口的使用2.實時編輯器窗口的使用5.3函數的使用
5.3.1主函數和子函數1.主函數一個M函數文件中可以包含一個或多個函數,主函數是出現在文件最上方的函數,即第一行聲明的函數,一個M文件只能有一個主函數,通常主函數名與M函數文件名相同。2.子函數(1)子函數的次序無任何限制;(2)子函數只能被同一文件中的函數(主函數或子函數)調用,不能被其它文件的函數調用;(3)同一文件的主函數和子函數運行時的工作空間是相互獨立的。練習例5-105.3.2函數的輸入輸出參數1.參數的傳遞函數的參數傳遞是將主調函數中的變量值傳給被調函數的輸入參數(1)函數參數傳遞的是數值(2)被調函數的輸入參數是存放在函數的工作空間中,與MATLAB的工作空間是獨立的,當調用結束時函數的工作空間被清除,輸入參數也被清除。
y=p1(zeta,t)functiony=p1(z,x)參數傳遞2.輸入輸出參數的個數(1)nargin和nargout函數nargin('fun') %獲取函數fun的輸入參數個數nargout('fun')%獲取函數fun的輸出參數個數說明:fun是函數名,可以省略,當nargin和nargout函數在函數體內時fun可省略,在函數外時fun不省略。例
當輸入參數個數變化時使用nargin函數繪制不同線型的曲線。functionn=ex5_11(s1,s2)
x=0:10;y=nargin*ones(11,1); holdonifnargin==0plot(x,y) %實線曲線
elseifnargin==1plot(x,y,s1)elseplot(x,y,[s1s2])end調用命令:>>ex5_11>>ex5_11('r')>>ex5_11('k','o')>>nargin('ex5_11')ans=2>>ex5_11('g',':','p')(2)varargin和varargout函數varargin和varargout函數將函數調用時實際傳遞的參數構成元胞數組,通過訪問元胞數組中各元素內容來獲得輸入輸出變量。functiony=fun(varargin)%輸入參數為varargin的函數funfunctionvarargout=fun(x)%輸出參數為varargout的函數fun例
根據輸入參數的個數將例5-11中參數個數使用varargin和varargout函數,繪制不同線型的曲線。functionvarargout=ex5_12(varargin)x=0:10;lin=length(varargin);%取輸入參數個數
y=lin*ones(11,1);holdoniflin==0plot(x,y)elseiflin==1plot(x,y,varargin{1})elseplot(x,y,[varargin{1}varargin{2}])endvarargout{1}=lin在命令窗口中輸入調用命令:>>y=ex5_12('y','o')varargout=[2]y=2>>ex5_12('y','o')varargout=[2]ans=25.3.3局部變量、全局變量和持久變量1.局部變量局部變量(LocalVariables)的作用范圍只能在函數內部。2.全局變量全局變量在使用前必須用“global”聲明,而且每個要共享全局變量的函數和工作空間,都必須逐個用“global”對該變量加以聲明。聲明和清除全局變量的命令格式如下:global變量名 %聲明全局變量clearglobal變量名 %清除全局變量例
在主函數和子函數之間使用全局變量。functiony=ex5_13()globalT %全局變量TT=0:0.1:20;y=f1(0.2)
functiony=f1(w)globalT %全局變量y=sin(w*T)3.持久變量持久變量也是局部變量,但是在函數運行完時持久變量不被清除,每次調用值仍然保留在內存中。MATLAB使用persistent聲明持久變量,使用mlock函數鎖定持久變量,使其不會被“clear”命令清除了,使用munlock函數解鎖變量。命令格式如下:persistent變量名 %聲明持久變量mlock %鎖定當前運行函數的工作空間munlock(fun) %解鎖函數的工作空間調試程序的方法(見附錄A):直接檢測調試:1)對于需要檢測的變量可以通過刪除語句行末尾的分號,或在程序的適當位置加顯示變量值的語句,將結果顯示在命令窗口中。2)在程序的適當位置添加“keyboard”語句,當程序運行至此句時會暫停運行,并在命令窗口顯示“k>>”提示符,這時就可以在命令窗口查看和修改各變量的內容。當程序運行時,會有警告提示和出錯提示在命令窗口中出現,警告提示一般為橙色文字,出錯提示為紅色文字,警告提示時程序仍然能夠運行。在編輯器窗口查看提示:M文件編輯/調試器窗口專門用來對M文件進行編輯和調試“EDITOR”面板的“Breakpoints”
和“Section”按鈕。設斷點
單步運行設置斷點,則斷點所在行前面有一個紅點,設置或清除斷點更簡便的方法是直接在該行的前面用鼠標單擊一下。添加控件來選擇k的變化:將光標選中“k=2”行中的“2”,在工具欄選擇按鈕“Control”然后在下拉選項中選擇“NumericSlider”滾動條控件,則在程序中增加了滾動條,用鼠標右鍵單擊滾動條,選擇“ConfigureControl”在出現的屬性頁面設置滾動條的最大值為8,最小值為0,步長為1使用實時編輯器窗口調試:5.4函數類型和函數句柄
5.4.1函數類型1.局部函數局部函數就是子函數,局部函數僅對同一文件中的其他函數可見,可以任意順序出現在主函數的后面,不能被其他文件調用。2.嵌套函數定義在其他函數內部的函數稱為嵌套函數,嵌套函數是完全包含在父函數內的。functionA(x)…… functionB(x,y)
…… endend
3.私有函數私有函數存放在“private”子目錄中,只能被其直接父目錄的文件所調用,而不能被其它目錄的函數調用。4.匿名函數匿名函數是不保存為文件的函數,是面向命令行代碼的函數形式:fhandle=@(arg1,arg2,......)(expr) %創(chuàng)建匿名函數例>>fhnd1=@(x)(1+exp(-x)); %創(chuàng)建匿名函數>>rf1=fhnd1(2) %調用匿名函數rf1=1.13535.4.2函數句柄1.創(chuàng)建函數句柄fhandle=@fun %創(chuàng)建函數句柄例
使用兩種方法創(chuàng)建函數句柄,計算f=e-xsin(x)的值。>>fnd1=@(x)sin(x).*exp(-x) %創(chuàng)建函數句柄
fnd1=@(x)sin(x).*exp(-x)>>x=0:20;>>y=fnd1(x)
20231031修改 %調用函數2.處理函數句柄的函數>>x=0:10;>>y=feval(fnd,x)創(chuàng)建函數并保存為“ex5_16_1.m”文件:functiony=ex5_16_1(x)y=exp(-x).*sin(x)在命令窗口調用函數:>>fnd=@ex5_16_1; %創(chuàng)建函數句柄>>x=0:10;>>y=fnd(x);5.4.3函數的工作過程和P碼文件1.函數的搜索過程當在MATLAB中輸入一個函數名時,首先確認不是變量名后,函數搜索的順序如下:檢查是否是本M函數文件內部的子函數;檢查是否是“private”目錄下的私有函數;檢查是否在當前路徑中;檢查是否在搜索路徑中。2.P碼文件P碼就是偽代碼(Pseudocode),一個M文件第一次被調用時,MATLAB就將其進行編譯并生成P碼文件存放在內存中,生成的P碼文件與原M文件名相同,其擴展名為“.p”,P碼文件的保密性好。例:>>pcodeex5_13.m>>y=ex5_135.5
函數繪圖
5.5.1二維函數曲線fplot(fun,xinterval,Linespec) %繪制函數fun的曲線fplot(funx,funy,tinterval,Linespec)%繪制函數funx和funy的曲線
說明:fun是函數句柄或函數名;xinterval是自變量的取值范圍[xmin,xmax],tinterval是自變量的取值范圍
[tmin,tmax],當省略時默認區(qū)間為[-55];Linespec是線型。例:>>fhnd=@(x)(exp(-x).*sin(x));>>fplot(fhnd,[020],'b-.*')5.5.2三維函數曲線繪制三維函數曲線的函數包括:fmesh繪制三維網格圖,fsurf繪制三維曲面圖,fplot3繪制三維曲線圖。例
使用fsurf命令繪制f(x,y,z)當自變量z在[0,3]范圍的三維曲面圖。
練習
創(chuàng)建一個函數文件myfun.mfunctiony=myfun(x)y(:,1)=200*sin(x(:))./x(:);y(:,2)=x(:).^2;
fnd=@myfunfplot(fnd,[-20,20])5.6數值分析
5.6.1求最小值和過零點1.一元函數的最小值fminbnd函數可以獲得一元函數在給定區(qū)間內的最小值。[x,y]=fminbnd(fun,x1,x2) %尋找最小值2.多元函數的最小值fminsearch函數可以獲得多元函數的最小值。[x,fval]=fminsearch(fun,x0) %尋找最小值3.一元函數的過零點x=fzero(fun,x0)%獲得fun在x0附近的過零點一元函數f(x)的過零點求解可以使用fzero函數來實現。例
使用fminbnd函數獲得匿名函數在[0,10]范圍內的最小值。>>fhnd1=@(x)(x.^2-5*x); %計算匿名函數的最小值>>[x,y1]=fminbnd(fhnd1,0,10)x=2.5000y1=-6.2500練習:求y(x)=-e-x|sin(sin(x))|在x=0附近的最小值。答案:fhnd=@(x)(-exp(-x)*abs(sin(sin(x))))y=fminbnd(fhnd,0,10)5.6.2數值積分一元函數的數值積分,采用變步長自適應的Simpson方法。q=quad(fun,a,b,tol,trace)例:>>fhnd=@(x)(exp(-x.^2));>>q1=quad(fhnd,-1,1,2e-3,1)%數值積分并跟蹤展示迭代過程
9-1.00000000005.43160000e-0010.319871095011-0.45684000009.13680000e-0010.8538774475
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年福建體育單招考生文化提分題庫含答案基礎題占比70%
- 2026年湖北單招醫(yī)藥衛(wèi)生類省卷模擬卷含答案文化技能
- 物業(yè)財務培訓課件
- 2026年湖南單招裝備制造大類高分突破卷含答案
- 2026年湖北單招酒店管理專業(yè)面試經典題含答案含應急處理題
- 2025湖南湘潭市岳塘區(qū)殘疾人聯合會政府購買公益性崗位人員招聘2人考試備考題庫及答案解析
- 2026年新疆單招醫(yī)衛(wèi)大類中職生專業(yè)技能模擬題含答案護理方向
- 2025黑龍江哈爾濱啟航勞務派遣有限公司派遣到哈爾濱工業(yè)大學航天學院航天工程系招聘筆試備考試題及答案解析
- 2025河北唐山市灤州市公立二級醫(yī)院自主招聘衛(wèi)生專業(yè)技術人員30人考試備考題庫及答案解析
- 2026年寧波中職生單招專業(yè)技能對口升學通關卷含答案原專業(yè)精準匹配
- 2025秋湘美版(新教材)小學美術三年級上冊知識點及期末測試卷及答案
- 2025年人力資源部工作總結暨2026年工作計劃
- 2025中原農業(yè)保險股份有限公司招聘67人筆試備考重點題庫及答案解析
- GB/T 27572-2025橡膠密封件110 ℃熱水供應管道的管接口密封圈材料規(guī)范
- 紅日藥業(yè)醫(yī)學事務專員面試流程及題庫含答案
- 建筑工程管理??茖嵺`報告
- 2025年國家統(tǒng)計局齊齊哈爾調查隊公開招聘公益性崗位5人考試筆試備考試題及答案解析
- 2025湖北武漢市公安局蔡甸區(qū)分局第二批招聘警務輔助人員43人考試筆試備考題庫及答案解析
- 文庫發(fā)布:Java數組課件
- 《增值稅法》實施解析及應對指南(2026版)課件
- 傷口護理中的營養(yǎng)支持策略
評論
0/150
提交評論