資源描述:
《matlab編程2之函數(shù)的編寫》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、數(shù)學實驗第四講Matlab編程(二)——函數(shù)文件1用Matlab語言編寫的程序稱為M文件M文件根據(jù)調用方式的不同可以分為兩類:Script:腳本文件/命令文件Function:函數(shù)文件M文件以.m為擴展名Matlab編程直接輸入文件名即可運行供其它M文件調用,通常帶輸入?yún)?shù)和輸出參數(shù)2Matlab編程復習關系運算邏輯運算<、<=、>、>=、==、~=&、
2、、~、xor(x,y)、any(x)、all(x)輸入輸出input、disp、fprintf控制語句if、switch、for、whilepause、bre
3、ak、continue、return3function輸出形參列表=函數(shù)名(輸入形參列表)%注釋說明部分(可選)函數(shù)體語句(必須)第一行為引導行,表示該M文件是函數(shù)文件函數(shù)名的命名規(guī)則與變量名相同(必須以字母開頭)當輸出形參多于一個時,用方括號括起來以百分號開始的語句為注釋語句函數(shù)文件函數(shù)文件由function語句引導函數(shù)文件名必須與函數(shù)名一致函數(shù)必須是一個單獨的M文件4functiony=myfliplr(x)%returnsXwithrowpreservedandcolumns%flippedinthele
4、ft/rightdirection%y=x(:,end:-1:1);函數(shù)文件舉例例:myfliplr.mfunction[a,b]=myswap(x,y)%swapxandya=y;b=x;例:myswap.m5functionprintyh(n)%打印楊輝三角形,本函數(shù)沒有輸出參數(shù)yh=1;disp(yh);ifn==1,return;endyh=[1,1];disp(yh);fork=3:nyh_old=yh;k2=ceil(k/2);forl=2:k2yh(l)=yh_old(l-1)+yh_old(l)
5、;endyh(k2+1:k)=yh(k-k2:-1:1);disp(yh);end函數(shù)文件舉例例:printyh.m6函數(shù)調用的一般格式輸出實參列表=函數(shù)名(輸入實參列表)函數(shù)調用時,實參的順序應與函數(shù)定義時形參的順序一致實參與形參之間的結合是通過值傳遞實現(xiàn)的函數(shù)可以嵌套調用,即一個函數(shù)可以被其它函數(shù)調用,甚至可以被它自身調用,此時稱為遞歸調用函數(shù)所傳遞的參數(shù)具有可調性,Matlab用兩個永久變量nargin和nargout分別記錄調用該函數(shù)時的輸入實參和輸出實參的個數(shù)函數(shù)調用7%函數(shù)文件myfactor.
6、mfunctiony=myfactor(n)if(n<=1)y=1;elsey=n*myfactor(n-1);end例:利用函數(shù)的遞歸調用計算n!遞歸函數(shù)舉例8%main.m%clear;s=0;n=10;fori=1:ns=s+myfactor(i);endfprintf('s=%g',s)例:計算1!+2!+…+10!遞歸函數(shù)舉例9%ex4nargin.mfunctiony=ex4nargin(a,b)if(nargin==1)y=a;elseif(nargin==2)y=a*b;end參數(shù)的可調性舉
7、例例:nargin和nargout的使用10參數(shù)的可調性舉例%ex4nargout.mfunction[p,q]=ex4nargout(a,b)if(nargout==1)p=a+b;elseif(nargout==2)p=a+b;q=a-b;end11函數(shù)通過輸入和輸出參數(shù)與其它M文件進行數(shù)據(jù)傳遞當函數(shù)調用完畢后,該函數(shù)文件中定義的所有局部變量都將被釋放,即全部被清除如果在若干個M文件中,都把某個變量定義為全局變量,則這些函數(shù)將公共使用這一變量。所有函數(shù)都可以對它進行存取和修改操作函數(shù)文件中的變量都是局部的,
8、即一個函數(shù)文件中定義的變量不能被另一個函數(shù)文件或其它M文件使用全局變量與局部變量定義全局變量是M文件間傳遞信息的一種手段12變量名列表中的各個變量用空格隔開,不能用逗號!在使用全局變量的所有M文件中,都要對其所使用的全局變量進行定義全局變量給函數(shù)間的數(shù)據(jù)傳遞帶來了方便,但卻破壞了函數(shù)對變量的封裝,降低了程序的可讀性,因而在結構化程序設計中,全局變量是不受歡迎的。特別是當程序較大,子程序較多時,全局變量將給程序調試和維護帶來不便,故不提倡使用全局變量。global變量名列表全局變量的定義13程序示例%ex4glo
9、bal.mclear;globalaba=1;b=3;y=mysquaresum(a,b);fprintf('a=%g,b=%g',a,b);z=myproduct(a,b);fprintf('a=%g,b=%g',a,b);%mysquaresum.mfunctionsquare_sum=mysquaresum(x,y)square_sum=x^2+y^2;a=x+y;%my