Matlab-第七講:編程基礎II(-函數-)_第1頁
Matlab-第七講:編程基礎II(-函數-)_第2頁
Matlab-第七講:編程基礎II(-函數-)_第3頁
Matlab-第七講:編程基礎II(-函數-)_第4頁
Matlab-第七講:編程基礎II(-函數-)_第5頁
已閱讀5頁,還剩22頁未讀, 繼續免費閱讀

VIP免費下載

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

文檔簡介

數學軟件Matlab——Matlab編程(函數)1第1頁內容提要

函數文件定義遞歸函數函數參數可調性局部變量與全局變量子函數函數句柄、內聯函數、匿名函數2第2頁

M文件依據調用方式不一樣能夠分為兩類

Script:腳本文件,直接輸入文件名即可運行

Function:函數文件Matlab編程供其它M文件調用,通常帶輸入參數和輸出參數3第3頁function

輸出形參列表=函數名(輸入形參列表)%注釋說明部分(可選)函數體語句

第一行為引導行,表示該M文件是函數文件函數名命名規則與變量名相同(必須以字母開頭

)當輸出形參多于一個時,用方括號括起來函數文件函數文件普通格式函數必須是一個單獨M文件函數文件文件名必須與函數名一致4第4頁函數文件(f2cf.m):例:將華氏溫度轉化為攝氏溫度:編程示例clear;f=input('Pleaseinputf:');c=5*(f-32)/9;fprintf('c=%g\n',c)腳本文件(f2cs.m):functionc=f2cf(f)c=5*(f-32)/9;5第5頁函數文件舉例function

[a,b]=myswap(x,y)%swapxandya=y;

b=x;例:交換兩個變量值myswap.m函數能夠有多個輸入參數和多個輸出參數也能夠沒有輸入參數或輸出參數6第6頁function

printyh(n)

%打印楊輝三角形,本函數沒有輸出參數yh=1;disp(yh);ifn==1,return;endyh=[1,1];disp(yh);fork=3:nyh_old=yh;k2=ceil(k/2);fori=2:k2yh(i)=yh_old(i-1)+yh_old(i);endyh(k2+1:k)=yh(k-k2:-1:1);disp(yh);end函數文件舉例例:打印楊輝三角形printyh.m7第7頁函數調用普通格式輸出實參列表=函數名(輸入實參列表)函數調用時,實參次序應與函數定義時形參次序一致

實參與形參之間結合是經過值傳遞實現函數能夠嵌套調用,即一個函數能夠被其它函數調用,

甚至能夠被它本身調用,此時稱為遞歸調用函數所傳遞參數含有可調性,Matlab用兩個永久變量

nargin

和nargout

分別統計調用該函數時輸入實參

和輸出實參個數函數調用8第8頁%

函數文件myfactor.mfunctiony=myfactor(n)ifn<=1y=1;elsey=n*myfactor(n-1);end例:利用函數遞歸調用計算n!遞歸函數舉例9第9頁%main.mclear;s=0;n=10;fori=1:ns=s+myfactor(i);endfprintf('s=%d\n',s)例:計算1!+2!+…+10!遞歸函數舉例10第10頁%

ex4nargin.mfunctiony=ex4nargin(a,b)ifnargin==1y=a;elseifnargin==2y=a*b;end參數可調性舉例例:nargin

和nargout

使用%

ex4nargout.mfunction[p,q]=ex4nargout(a,b)ifnargout==1p=a+b;elseifnargout==2p=a+b;q=a-b;end>>y1=ex4nargin(3)>>y2=ex4nargin(3,4)>>x=ex4nargout(5,3)>>[x,y]=ex4nargin(5,3)11第11頁內容提要

函數文件定義遞歸函數函數參數可調性局部變量與全局變量子函數函數句柄、內聯函數、匿名函數12第12頁局部變量:只能在其被定義M文件中使用全局變量:能夠在多個M文件中使用

Matlab中,變量默認是局部變量局部變量與全局變量局部變量與全局變量局部變量

Matlab中,變量默認是局部變量,即一個M文件中定義變量不能被其它M文件引用當函數調用完成后,該函數文件中所定義全部局部變量都將被釋放,即全部被去除函數經過輸入和輸出參數與其它M文件進行數據傳遞13第13頁程序示例%main.mclear;a=1;b=3;z=mysquaresum(a,b);fprintf('z=%d\n',z);disp(mysum)%ERROR%mysquaresum.mfunctionmysum=mysquaresum(x,y)mysum=x^2+y^2;mysum=a^2+b^2;%ERROR14第14頁局部變量與全局變量全局變量global

變量名列表全局變量定義或申明變量名列表中各個變量用空格隔開,不能用逗號!在需要使用全局變量全部M文件中,都要進行申明定義全局變量是M文件間傳遞信息一個伎倆15第15頁程序示例%main.mclear;globalab;%

申明ab是全局變量a=1;b=3;z=mysquaresum();fprintf('z=%d\n',z);disp(mysum);%ERROR,mysum不是全局變量%mysquaresum.mfunctionmysum=mysquaresum()globalab;%這里也必須申明ab是全局變量globalmysum;mysum=a^2+b^2;%OK16第16頁全局變量給函數間數據傳遞帶來了方便,但卻破壞了函數對變量封裝,降低了程序可讀性,因而在結構化程序設計中,全局變量是不受歡迎。尤其是當程序較大,子程序較多時,全局變量將給程序調試和維護帶來不便,故普通不提倡使用全局變量。全局變量17第17頁程序示例%ex4global.mclear;globalab;a=1;b=3;z=mysquaresum(a,b);fprintf('a=%d,b=%d\n',a,b);z=myproduct(a,b);fprintf('a=%d,b=%d\n',a,b);%mysquaresum.mfunctionmysum=mysquaresum(x,y)mysum=x^2+y^2;a=x+y;%myproduct.mfunctionmyprod=myproduct(x,y)globalamyprod=x*y;a=x+y;18第18頁內容提要

函數文件定義遞歸函數函數參數可調性局部變量與全局變量子函數函數句柄、內聯函數、匿名函數19第19頁子函數一個函數文件中能夠包含一個或多個函數,

其中第一個稱為主函數,其它函數稱為子函數除全局變量外,全部函數(主函數、子函數)中變量都是局部變量,函數之間經過輸入、輸出參數進行數據傳遞主函數必須位于最前面,子函數出現次序任意子函數只能被主函數和位于同一個M文件中其它子函數調用外部M文件只能調用主函數子函數20第20頁子函數舉例%ex4subfun.mfunction[avg,med]=ex4subfun(x)%主函數

n=length(x);avg=mymean(x,n);med=mymedian(x,n);functiony=mymean(x,n)%子函數,計算平均值y=sum(x)/n;functiony=mymedian(x,n)%子函數,計算中值x=sort(x);ifrem(n,2)==1y=x((n+1)/2);elsey=(x(n/2)+x(n/2+1))/2;end>>x=rand(6,1)>>[y1,y2]=ex4subfun(x)21第21頁函數句柄函數句柄定義fhandle=@

函數名

函數句柄:能夠了解成一個函數代號或別名,調用函數句柄就等價于調用該函數。

@

作用就是將一個函數函數句柄賦值給左邊變量例:f=@sin;y=f(pi/3)22第22頁內聯函數內聯函數定義函數名=inline('函數表示式','變量1','變量2',...)MATLAB中內聯函數借鑒了C語言中內聯函數,使用內聯函數能夠降低調用時間和空間開銷。因為內聯函數是儲存于內存中而不是在M文件中,省去了文件訪問時間,加緊了程序運行效率。但內聯函數只能定義一些簡單函數表示式。若調用函數時包括數組運算,則定義函數時也要用數組運算!例:f=inline('x^2+y^2','x','y');y=f(2,3)23第23頁匿名函數匿名函數定義fhandle=@

(輸入參數列表)運算表示式例:f=@(x,y)x^2+y^2;y=f(2,3)匿名函數是Matlab7.0版提出一個全新函數描述形式,和內聯函數類似,能夠讓用戶編寫簡單函數而不需要創建M文件;它含有內聯函數全部優點,而且效率比內聯函數高。24第24頁匿名函數p=3;q=5;f=@(x,y)x^p+y^q;y=f(2,3)p=2;q=4;f=@(x,y)x^p+y^q;%

當參數發生改變時,函數必須重新定義y=f(2,3)若調用函數時包括數組運算,則定義函數時也需要使用數組運算匿名函數支持變量替換f=@(x)x.^2+1;x=1:5;y=f(x)25第25頁上機作業1、兔子繁殖問題:(Fibonaccinumber)假設每對大兔每個月生出一對小兔,且新生小兔滿二個月后長成大兔就能生育,那么從剛出生一對小兔算起,12個月總共有多少對兔子?三年年底呢?試編寫一個函數計算該題,其中輸入為月數,輸出為兔子對數。(函數名取為

m71)(只需交函數文件)2、編

溫馨提示

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

評論

0/150

提交評論