Matlab編程二函數(shù)PPT課件_第1頁
Matlab編程二函數(shù)PPT課件_第2頁
Matlab編程二函數(shù)PPT課件_第3頁
Matlab編程二函數(shù)PPT課件_第4頁
Matlab編程二函數(shù)PPT課件_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1本講主要內容n 什么是函數(shù)文件n 如何編寫函數(shù)文件n 遞歸函數(shù)n 函數(shù)參數(shù)的可調性n 全局與局部變量n 子函數(shù)第1頁/共28頁2q M 文件根據(jù)調用方式的不同可以分為兩類:l Script:腳本文件/命令文件 l Function:函數(shù)文件 Matlab 編程l 直接輸入文件名即可運行l(wèi) 供其它M文件調用,通常帶輸入?yún)?shù)和輸出參數(shù)第2頁/共28頁3function 輸出形參列表=函數(shù)名(輸入形參列表)% 注釋說明部分(可選)函數(shù)體語句(必須)l 第一行為引導行,表示該 M文件是函數(shù)文件l 函數(shù)名的命名規(guī)則與變量名相同 ( 必須以字母開頭 )l 當輸出形參多于一個時,用方括號括起來l 以百分號

2、開始的語句為注釋語句函數(shù)文件q 函數(shù)文件由函數(shù)文件由 function 語句引導語句引導l 函數(shù)文件名必須與函數(shù)名一致l 函數(shù)必須是一個單獨的 M文件第3頁/共28頁4l 函數(shù)文件():5(32)9cf例:將華氏溫度轉化為攝氏溫度:編程示例clear; f=input(Please input f:);c=5*(f-32)/9;fprintf(c = %gn,c);l 腳本文件 ():function c = f2cf(f)c=5*(f-32)/9;fprintf(c = %gn,c);第4頁/共28頁5函數(shù)文件舉例function a,b = myswap(x,y)% swap x and

3、y a = y; b = x;例:交換兩個變量的值 l 有兩個輸入?yún)?shù)和兩個輸出參數(shù)第5頁/共28頁6function printyh(n)% 打印楊輝三角形, 本函數(shù)沒有輸出參數(shù)yh=1; disp(yh); if n=1, return; endyh=1,1; disp(yh);for k=3:n yh_old=yh; k2=ceil(k/2); for l=2:k2 yh(l)=yh_old(l-1)+yh_old(l); end yh(k2+1:k)=yh(k-k2:-1:1); disp(yh);end函數(shù)文件舉例例:打印楊輝三角形 l 沒有輸入?yún)?shù)和輸出參數(shù)第6頁/共28頁7q 函

4、數(shù)調用的一般格式輸出實參列表=函數(shù)名(輸入實參列表)l 函數(shù)調用時,實參的順序應與函數(shù)定義時形參的順序一致l 實參與形參之間的結合是通過值傳遞實現(xiàn)的l 函數(shù)可以嵌套調用,即一個函數(shù)可以被其它函數(shù)調用, 甚至可以被它自身調用,此時稱為遞歸調用l 函數(shù)所傳遞的參數(shù)具有可調性,Matlab 用兩個永久變量 nargin 和 nargout 分別記錄調用該函數(shù)時的輸入實參 和輸出實參的個數(shù)函數(shù)調用第7頁/共28頁81,1!(1)!,1nnnnn % 函數(shù)文件 function y=myfactor(n)if (n=1) y=1;else y=n*myfactor(n-1);end例:例:利用函數(shù)的遞歸

5、調用計算利用函數(shù)的遞歸調用計算 n!遞歸函數(shù)舉例第8頁/共28頁9% %clear;s = 0;n = 10;for i = 1 : n s = s + myfactor(i);endfprintf( s=%g n,s)例:例:計算計算 1! + 2! + + 10!遞歸函數(shù)舉例第9頁/共28頁10% function y = ex4nargin(a,b)if (nargin=1) y = a;elseif (nargin=2) y = a*b;end參數(shù)的可調性舉例例:例:nargin 和和 nargout 的使用的使用% function p,q=ex4nargout(a,b)if (na

6、rgout=1) p = a + b;elseif (nargout=2) p = a + b; q = a - b;end第10頁/共28頁11q 函數(shù)通過函數(shù)通過輸入和輸出參數(shù)輸入和輸出參數(shù)與其它與其它 M 文件進行數(shù)據(jù)傳遞文件進行數(shù)據(jù)傳遞q 當函數(shù)調用完畢后,該函數(shù)文件中定義的所有局部變量當函數(shù)調用完畢后,該函數(shù)文件中定義的所有局部變量都將被釋放,即都將被釋放,即全部被清除全部被清除q 如果在若干個如果在若干個 M文件中,文件中,都把某個變量定義為全局變都把某個變量定義為全局變量量,則這些函數(shù)將公共使用這一變量,則這些函數(shù)將公共使用這一變量。所有函數(shù)都可以對所有函數(shù)都可以對它進行存取和修

7、改操作它進行存取和修改操作q 函數(shù)文件中的變量都是局部的,即一個函數(shù)文件中定義的變量不能被另一個函數(shù)文件或其它 M 文件使用全局變量與局部變量q 定義全局變量是 M文件間傳遞信息的一種手段第11頁/共28頁12l 變量名列表中的各個變量變量名列表中的各個變量用空格隔開用空格隔開,不能用逗號!,不能用逗號!l 在使用全局變量的所有在使用全局變量的所有M文件中,都要對其所使用的全文件中,都要對其所使用的全局變量進行定義局變量進行定義全局變量給函數(shù)間的數(shù)據(jù)傳遞帶來了方便,但卻破壞全局變量給函數(shù)間的數(shù)據(jù)傳遞帶來了方便,但卻破壞了函數(shù)對變量的封裝,降低了程序的可讀性,因而了函數(shù)對變量的封裝,降低了程序的

8、可讀性,因而在在結構化程序設計中,全局變量是不受歡迎的結構化程序設計中,全局變量是不受歡迎的。特別是。特別是當程序較大,子程序較多時,全局變量將個程序調試當程序較大,子程序較多時,全局變量將個程序調試和維護帶來不便,故不提倡使用全局變量。和維護帶來不便,故不提倡使用全局變量。global 變量名列表全局變量的定義第12頁/共28頁13程序示例clear; global a ba=1; b=3;y=mysquaresum(a,b);fprintf( a=%g, b=%g n,a,b);z=myproduct(a,b);fprintf( a=%g, b=%gn,a,b);% function sq

9、uare_sum=mysquaresum(x,y)square_sum=x2 + y2; a=x+y;% function product=myproduct(x,y)global aproduct=x*y; a=x+y;第13頁/共28頁14子函數(shù)l 一個函數(shù)文件中可以含有一個或多個函數(shù), 其中第一個稱為主函數(shù),其它函數(shù)稱為子函數(shù)l 子函數(shù)由 function 語句引導l 除了用 global 定義的全局變量外,所有函數(shù)中的變量都是局部變量,函數(shù)之間通過輸入、輸出參數(shù)進行數(shù)據(jù)傳遞調用一個函數(shù)時,Matlab 會首先檢查該函數(shù)是否為一個子函數(shù)l 主函數(shù)必須位于最前面,子函數(shù)出現(xiàn)的次序任意l 子

10、函數(shù)只能被主函數(shù)和位于同一個函數(shù)文件中的其它子函數(shù)調用第14頁/共28頁15子函數(shù)舉例function avg, med = ex4subfun(x) % 主函數(shù) n = length(x);avg = mean(x, n);med = median(x, n);function a = mean(x, n) % 子函數(shù),計算平均值a = sum(x)/n;function m = median(x, n) % 子函數(shù),計算中值x = sort(x);if rem(n, 2) = 1 m = x(n+1)/2);else m = (x(n/2)+x(n/2+1)/2;end第15頁/共28頁1

11、6Matlab 自定義函數(shù)第16頁/共28頁17q Matlab 自定義函數(shù)的五種方式u 命令文件/函數(shù)文件+ 函數(shù)文件 :多個 M 文件自定義函數(shù)的五種方式u 函數(shù)文件 + 子函數(shù) : 一個 M 文件u inline : 無需 M 文件u 符號表達式 + subs 方式 : 無需 M 文件u 字符串 + subs 方式 : 無需 M 文件第17頁/共28頁18%命令/函數(shù)文件:clearfor t=1:10; y=mylfg(t); fprintf(%4d(1/3) = %6.4fn,t,y);end%函數(shù)文件:function y = mylfg(x)y=x(1/3);函數(shù)必須單獨寫一個文

12、件!不能與命令文件寫在同一個文件中!函數(shù)名與文件名必須一致!調用函數(shù)時要注意實參與形參的匹配!自定義函數(shù)方式(一)q 方式一方式一:命令文件命令文件/函數(shù)文件函數(shù)文件 + 函數(shù)文件函數(shù)文件第18頁/共28頁19自定義函數(shù)方式(二)%函數(shù)文件:funtry2.m function =funtry2()for t=1:10 y=lfg2(t); fprintf(%4d(1/3) = %6.4fn,t,y);endfunction y=lfg2(x) %子函數(shù)y=x(1/3);函數(shù)文件中可以定義一個或多個子函數(shù),此時我們稱該函數(shù)為主函數(shù),子函數(shù)只能被主函數(shù)或同一個函數(shù)文件中的其它子函數(shù)調用!q 方式

13、二方式二:函數(shù)文件函數(shù)文件 + 子函數(shù)子函數(shù)第19頁/共28頁20f=inline(函數(shù)表達式,變量1,變量2,.)y=f(數(shù)值列表)代入的數(shù)值列表順序應與定義時的變量名順序一致例:自定義函數(shù)方式(三)q 方式三方式三:inline + 命令命令/函數(shù)文件函數(shù)文件l inline 命令可以用來定義一個內聯(lián)函數(shù)l 調用方式:第20頁/共28頁21u 這種函數(shù)定義方式是將 f 作為一個內部函數(shù)調用。其特點是:調用方式最接近于我們平時對函數(shù)的定義,使程序更具可讀性。同時由于它是基于 Matlab 的數(shù)值計算內核的,所以它的運算速度較快,程序更有效率。u 這種定義方式的缺點:l 定義一個內聯(lián)函數(shù)用去的

14、內存空間比相同條件下其他的方法要大得多。l 該方法只能對數(shù)值進行代入,不支持符號代入,并且對于定義后的函數(shù)不能進行求導等符號運算。自定義函數(shù)方式(三)第21頁/共28頁22自定義函數(shù)方式(三)第22頁/共28頁23%函數(shù)文件:function =funtry3()lfg=inline(x.(1/3); %表達式兩端的單引號不可缺少fid=fopen(myfile3.txt,w);for t=1:50; y=lfg(t); fprintf(fid,%4d(1/3) = %6.4fn,t,y);endfclose(fid);ezplot(lfg,0,50)diff(lfg,x)自定義函數(shù)方式(三)

15、X第23頁/共28頁24注:對于在 syms 中已經(jīng)定義過符號變量,在 subs 中進行替代時,單引號可以省略。但如果在 syms 后又被重新定義為其它類型,則必須加單引號,否則不可替換。l syms 定義一個符號表達式,用 subs 命令調用syms f x %定義符號f=1/(1+x2); %定義符號表達式subs(f,x,代替 x 的數(shù)值或符號)自定義函數(shù)方式(四)q 方式四方式四: syms + subs第24頁/共28頁25u 這種函數(shù)定義方法的一個特點是可以用符號進行替換u 該方法的缺點也是明顯的:由于使用符號運算內核,運算速度會大大降低。自定義函數(shù)方式(四)第25頁/共28頁26注:此處 x 的單引號不可省略。本函數(shù)方式可以代入字符,但字符不能參與運算,否則將自行轉化成該字符的 ASCII 碼運算,這與我們想要的結果可能會大相徑庭。l 直接定義一個字符串,用

溫馨提示

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

評論

0/150

提交評論