第三章matlab程序設計_第1頁
第三章matlab程序設計_第2頁
第三章matlab程序設計_第3頁
第三章matlab程序設計_第4頁
第三章matlab程序設計_第5頁
已閱讀5頁,還剩50頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、第三章matlab程序設計 Matlab and Engineering Calculation 第3章 MATLAB 3.1 M 3.2 程序控制結構 3.3 函數及函數文件 3.4 Matlab的文件操作的文件操作 3.5 Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 3.1 M文件文件 3.1.1 M文件概述文件概述 用MATLAB語言編寫的程序,稱為M文件。 M文件可以根據調用方式的不同分為兩類:文件可以根據調用方式的不同分為兩類: 命令文件(Script File) 函數文件(Function F

2、ile) Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 例3-1 分別建立命令文件和函數文件,將華氏溫度f 轉換為攝氏溫度c。 程序1: 首先建立命令文件并以文件名f2c.m存盤。 clear;%清除工作空間中的變量清除工作空間中的變量 f=input(Input Fahrenheit temperature:); c=5*(f-32)/9 然后在MATLAB的命令窗口中輸入f2c,將會執行該 命令文件,執行情況為: Input Fahrenheit temperature:73 c= 22.7778 Xi

3、amen University 第三章matlab程序設計 Matlab and Engineering Calculation 程序2: 首先建立函數文件ftoc.m。 function c=ftoc(f) y=input(Input Fahrenheit temperature:); c=5*(f-32)/9; 然后在MATLAB的命令窗口調用該函數文件。 clear; y=input(Input Fahrenheit temperature:); x=ftoc(y) 輸出情況為: Input Fahrenheit temperature:70 c= 21.1111 x= 21.1111

4、Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 3.1.2 M文件的建立與打開文件的建立與打開 M文件是一個文本文件,它可以用任何編輯程序來建立和文件是一個文本文件,它可以用任何編輯程序來建立和 編輯,而一般常用且最為方便的是使用MATLAB提供的 文本編輯器。 1建立新的建立新的M文件文件 2. 打開已有的M文件 菜單 工具按鈕 下面兩條命令可直接在命令行中輸入 edit/edit open Xiamen University 第三章matlab程序設計 Matlab and Engineering Cal

5、culation 3.2 程序控制結構 3.2.1 順序結構 1數據的鍵盤輸入數據的鍵盤輸入 reply=input(string); reply=input(string,s); 2數據的輸出數據的輸出 disp(expression) %從鍵盤鍵入數值、已存在的變量或表達式,從鍵盤鍵入數值、已存在的變量或表達式, 賦值給變量reply 鍵入的內容作為字符串 顯示表達式的值 4. 格式化輸入和輸出數據 sscanf 和fprintf 函數 textread 函數 5程序的暫停程序的暫停 pause(延遲秒數延遲秒數) pause 程序的終止 Ctrl+C命令命令 Xiamen Univers

6、ity 第三章matlab程序設計 Matlab and Engineering Calculation 例3-2 輸入x,y的值,并將它們的值互換后輸出。 程序如下: str= Input x please.; x=input(str); y=input(Input y please.); z=x; x=y; y=z; disp(x); disp(y); Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 例3-3 求一元二次方程a*x2 +b*x+c=0的根。的根。 程序如下: a=input(a=?); b

7、=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); Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 3.2.2 選擇結構 1if語句語句 在MATLAB中,if語句有3種格式。 (1) 單分支if語句: if 條件 語句組 end (2) 雙分支if語句: if 條件 語句組1 else 語句組2 (3) 多分支if語句: i

8、f 條件1 語句組1 elseif 條件2 語句組2 elseif 條件m 語句組m else 語句組n end end Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 例3-4 計算分段函數的值。 程序如下: x=input(請輸入x的值:); if x=A else disp(c); end Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 2switch語句語句 switch語句根據表達式的取值不同,分別執行不同的語語句

9、根據表達式的取值不同,分別執行不同的語 句,其語句格式為: switch switch_expr case case_expr statement,.,statement case case_expr1,case_expr2,case_expr3,. statement,.,statement . otherwise statement,.,statement end (1) switch_expr is a scalar(標量標量) or a string (2) case_expr is a scalar, a string or a cell array Xiamen Universit

10、y 第三章matlab程序設計 Matlab and Engineering Calculation 例3-6 某商場對顧客所購買的商品實行打折銷售, 標準如下(商品價格用price來表示): price100 沒有折扣 100price500 3%折扣折扣 500price1000 5%折扣折扣 1000price2500 8%折扣折扣 2500price 0) sum mean=sum/cnt end Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 3break語句和語句和continue語句語句 與循環

11、結構相關的語句還有break語句和continue 語句。它們一般與if語句配合使用。 break 語句用于終止循環的執行。當在循環體內 執行到該語句時,程序將跳出循環,繼續執行循 環語句的下一語句。 continue 語句控制跳過循環體中的某些語句。當 在循環體內執行到該語句時,程序將跳過循環體 中所有剩下的語句,繼續下一次循環。 Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 例3-12 求100,200之間第一個能被21整除的整數。 程序如下: for n=100:200 if rem(n,21)=0

12、continue end break end n Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 4循環的嵌套循環的嵌套 如果一個循環結構的循環體又包括一個循環結構,就稱為循環的嵌 套,或稱為多重循環結構。 例3-13 若一個數等于它的各個真因子之和,則稱該數為完數,如 6=1+2+3,所以,所以6是完數。求是完數。求1,500之間的全部完數。之間的全部完數。 for m=1:500 s=0; for k=1:m/2 if rem(m,k)=0 s=s+k; end end if m=s disp(m); e

13、nd end Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 錯誤處理 lasterr/lasterror 最后一個錯誤信息 Lastwarn 最后一個警告信息 error 顯示錯誤信息 warning 顯示警告信息 errordlg-Error Dialog warndlg-Warning Dialog Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 3.3 函數文件 函數的類型: built-in functions 內

14、建函數,如sin M- Subfunctions 子函數 inline function object 內聯函數對象 Private Functions 私人函數 Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 3.3.1 函數文件的基本結構 函數文件由function語句引導,其基本結構為: function 輸出形參表=函數名(輸入形參表) 注釋說明部分 函數體語句 其中以function開頭的一行為引導行,表示該M文件是 一個函數文件。函數名的命名規則與變量名相同。輸入形 參為函數的輸入參數,輸出形參為

15、函數的輸出參數。當輸 出形參多于一個時,則應該用方括號括起來。 Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 例3-14 編寫函數文件求半徑為r的圓的面積和周長。 函數文件如下: function s,p=fcircle(r) %FCIRCLE calculate the area and perimeter of a circle of radii r %r %s %p 圓半徑 圓面積 圓周長 %2004年7月30日編 r=input(input the circles radius:); s=pi*r*

16、r p=2*pi*r Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 3.3.2 函數調用 函數調用的一般格式是: 輸出實參表輸出實參表=函數名函數名(輸入實參表輸入實參表) 要注意的是,函數調用時各實參出現的 順序、個數,應與函數定義時形參的順序、 個數一致,否則會出錯。函數調用時,先 將實參傳遞給相應的形參,從而實現參數 傳遞,然后再執行函數的功能。 Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 例3-15 利用函數文

17、件,實現直角坐標(x,y)與極坐標(,) 之間的轉換。 函數文件tran.m: function rho,theta=tran(x,y) %. rho=sqrt(x*x+y*y); theta=atan(y/x); 調用tran.m的命令文件main1.m: x=input(Please input x=:); y=input(Please input y=:); rho,theta=tran(x,y); rho theta Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 在MATLAB中,函數可以嵌套調用,

18、即一個函數可以 調用別的函數,甚至調用它自身。一個函數調用它自身稱 為函數的遞歸調用。 例3-16 利用函數的遞歸調用,求n!。 n!本身就是以遞歸的形式定義的:本身就是以遞歸的形式定義的: 顯然,求n!需要求(n-1)!,這時可采用遞歸調用。遞歸調用函 數文件factor.m如下: function f=factor(n) if n如輸入factor(5) Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 3.3.3 全局變量與局部變量 每個函數都有自己的工作區,它的內部變量對外是不 可見的,它也不能使用外部

19、變量,除非定義全局變量。 全局變量用global命令定義,格式為: global 變量名1 變量名2 例3-18 全局變量應用示例。 先建立函數文件wadd.m,該函數將輸入的參數加權相加。 function f=wadd(x,y) global ALPHA BETA f=ALPHA*x+BETA*y; 在命令窗口中輸入: global ALPHA BETA ALPHA=1; BETA=2; s=wadd(1,2) Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 3.3.4 函數參數的可調性 在調用函數時,M

20、ATLAB用兩個永久 變量nargin和nargout分別記錄調用該函數 時的輸入實參和輸出實參的個數。只要在 函數文件中包含這兩個變量,就可以準確 地知道該函數文件被調用時的輸入輸出參 數個數,從而決定函數如何進行處理。 Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 例3-17 nargin用法示例。用法示例。 函數文件examp.m: function fout=charray(a,b,c) if nargin=1 fout=a; elseif nargin=2 fout=a+b; elseif nar

21、gin=3 fout=(a*b*c)/2; end 命令文件mydemo.m: ? x=1:3; y=1;2;3; examp(x) examp(x,y) examp(x,y,3) see varargin,varargout Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation function x0, y0 = myplot(x, y, npts, angle, subdiv) % MYPLOT Plot a function. % MYPLOT(x, y, npts, angle, subdiv) % The

22、 first two input arguments are % required; the other three have default values. . if nargin 5, subdiv = 20; end if nargin 4, angle = 10; end if nargin 3, npts = 25; end . if nargout = 0 plot(x, y) else x0 = x; y0 = y; end Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 3.3.5 Subfu

23、nctions 建立一個函數newstats求向量的平均值和中心值 function avg,med = newstats(u)% Primary function % NEWSTATS Find mean and median with internal functions. n = length(u); avg = mean(u,n); med = median(u,n); function a = mean(v,n) % Calculate average. a = sum(v)/n; function m = median(v,n) % Calculate median. w = so

24、rt(v); if rem(n,2) = 1 m = w(n+1)/2); else m = (w(n/2)+w(n/2+1)/2; end % Subfunction % Subfunction Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 3.3.6 Inline function objects f = inline(expr) f = inline(expr,arg1,arg2,.) f = inline(expr,n) 調用 y=f(arg1,arg2,) 其它 argnames(f) formu

25、la(f)/char(f) Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 3.3.7 Private functions 在某目錄下建立一個private子目錄,則private目錄 下的函數為私有函數,它只對private目錄的上一 級目錄下的函數可見。 Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 3.3.8 function_handle () handle = functionname A function ha

26、ndle captures all the information about a function that MATLAB needs to execute that function. Typically, a function handle is passed in an argument list(參數列) to other functions. f = functions(funhandle) fhandle = str2func(str) s = func2str(fhandle) 返回函數信息 串到函數句柄 函數句柄到串 Xiamen University 第三章matlab程序

27、設計 Matlab and Engineering Calculation Anonymous Function fhandle = (arglist) expr sqr = (x) x.2; sumAxBy = (x, y) (A*x + B*y); t = () datestr(now); Arrays of Anonymous Functions A = (x)x.2, (y)y+10, (x,y)x.2+y+10 Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 3.3.9 Evaluate a fun

28、ction 直接調用 y1,y2,. = functionname(x1,.,xn) yinlinefunctionobject(x1,.,xn) 使用feval函數 y1,y2,. = feval(fhandle,x1,.,xn) y1,y2,. = feval(functionname,x1,.,xn) y = feval(inline, x1,.,xn) Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 符號對象(函數) f=sym(expression) y=subs(f,var,expression)

29、 Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 3.3.10 函數極值和零點 fminbnd 非線性函數在某區間中極小值 x = fminbnd(fun,x1,x2) x,fval = fminbnd(fun,x1,x2) fzero 單變量函數的零點 x = fzero(fun,x0) x,fval = fzero(fun,x0) fminsearch 求多元函數極值點 x = fminsearch(fun,x0) x,fval = fminsearch(fun,x0) 以上求極值和零點的調用格式是怎樣的

30、? Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 3.4 Matlab的文件操作的文件操作 save load 3.4.1 文件的打開 fopen函數的調用格式為:函數的調用格式為: fid= fopen(文件名,打開方式文件名,打開方式) 其中文件名用字符串形式,表示待打開的數據文件。 常見的打開方式有: r表示對打開的文件讀數據,表示對打開的文件讀數據, w表示對打開的文件寫數據,表示對打開的文件寫數據, a表示在打開的文件末尾添加數據。表示在打開的文件末尾添加數據。 fid為文件標識為文件標識( .

31、),用來標識該數據文,用來標識該數據文 件,其他函數可以利用它對該數據文件進行操作。 Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 3.4.2 文件的關閉 文件在進行完讀、寫等操作后,應及時關閉。關閉文件用 fclose函數,調用格式為:函數,調用格式為: sta=fclose(fid) 該函數關閉fid所表示的文件。sta表示關閉文件操作的返 回代碼,若關閉成功,返回0,否則返回1。 Xiamen University 第三章matlab程序設計 Matlab and Engineering Calcul

32、ation 3.4.3 二進制文件的讀寫操作 1讀二進制文件讀二進制文件 fread 函數可以讀取二進制文件的數據,并將數據存入矩陣。 其調用格式為: A,COUNT=fread(fid,size, precision) 其中A用于存放讀取的數據,COUNT返回所讀取的數據元素 個數,fid為文件句柄,size為可選項,若不選用則讀取整個文 件內容,若選用則它的值可以是下列值: (1) N表示讀取表示讀取 N個元素到一個列向量。個元素到一個列向量。 (2) Inf表示讀取整個文件。表示讀取整個文件。 (3) M,N表示讀數據到表示讀數據到MN的矩陣中,數據按列存放。的矩陣中,數據按列存放。 p

33、recision代表讀寫數據的類型代表讀寫數據的類型 Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 2寫二進制文件寫二進制文件 fwrite 函數按照指定的數據類型將矩陣中的元素寫入到文 件中。其調用格式為: COUNT=fwrite (fid, A, precision) 其中COUNT返回所寫的數據元素個數,fid為文件句柄, A用來存放寫入文件的數據,用來存放寫入文件的數據,precision用于控制所寫數據用于控制所寫數據 的類型,其形式與fread函數相同。 Xiamen University 第

34、三章matlab程序設計 Matlab and Engineering Calculation 例4-1 建立一數據文件magic5.dat,用于存放5階魔方陣。 程序如下: fid=fopen(magic5.dat,w); cnt=fwrite(fid,magic(5),int32); fclose(fid); Xiamen University 第三章matlab程序設計 Matlab and Engineering Calculation 3.4.3 文本文件的讀寫操作 1讀文本文件讀文本文件 fscanf 函數的調用格式為: A,COUNT= fscanf (fid, format, size) 其中A用以存放讀取的數據,COUNT返回所讀取的數據 元素個數。fid為文件句柄。format用以控制讀取的數據格 式,由%加上格式符組成,常見的格式符有d,f,c,s。 size

溫馨提示

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

評論

0/150

提交評論