MATLAB語言程序設(shè)計.ppt_第1頁
MATLAB語言程序設(shè)計.ppt_第2頁
MATLAB語言程序設(shè)計.ppt_第3頁
MATLAB語言程序設(shè)計.ppt_第4頁
MATLAB語言程序設(shè)計.ppt_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、 電子發(fā)燒友 電子技術(shù)論壇,MATLAB程序語言設(shè)計,應(yīng)自爐 五邑大學(xué)信息學(xué)院2007年, , 電子發(fā)燒友 電子技術(shù)論壇,第六講 MATLAB 語言程序設(shè)計,6.1 MATLAB語言的函數(shù)的基本結(jié)構(gòu) 6.2 全局、局部變量、子函數(shù)與私有目錄 6.3 MATLAB 函數(shù)的跟蹤調(diào)試 6.4 MATLAB工具箱編寫技巧 6.5 MATLAB語言的程序流程語句 6.6 MATLAB中新的數(shù)據(jù)結(jié)構(gòu) 6.7 MATLAB 語言編程技巧 6.8 例子與習(xí)題, 電子發(fā)燒友 電子技術(shù)論壇,6.1 MATLAB 語言函數(shù)的基本結(jié)構(gòu),MATLAB語言提供了兩種源程序文件格式,M腳本文件:它實際上是MATLAB命令窗

2、中一系列命令的組合,它沒有輸入輸出參數(shù)傳遞的過程,它直接對工作區(qū)中的變量進行處理操作,M函數(shù):這是MATLAB程序設(shè)計的主流,它可以傳遞參數(shù)及返回結(jié)果,我們主要介紹M函數(shù)的編寫方法與技巧。, 電子發(fā)燒友 電子技術(shù)論壇,6.1 MATLAB 語言函數(shù)的基本結(jié)構(gòu),M函數(shù)是由 function 語句引導(dǎo)的,其基本格式如下,function 返回變量列表函數(shù)名(輸入變量列表) 由該符號引導(dǎo)的注釋語句段,在MATLAB命令窗 中用命令 help 函數(shù)名 所得到的幫助就是這段文字。 輸入、返回變量格式的檢測 函數(shù)體語句,只要進入該函數(shù),MATLAB就自動生成 nargin 和 nargout 兩個變量,分

3、別表示輸入變量和輸出變量的個數(shù)。程序中可以根據(jù)這兩個變量的值來判斷用戶輸入?yún)?shù)的情況。, 電子發(fā)燒友 電子技術(shù)論壇,6.1 MATLAB 語言函數(shù)的基本結(jié)構(gòu),M函數(shù)典型例子,function magout,phase,w = bode(a,b,c,d,iu,w) %BODE Bode frequency response of LTI models. % BODE(SYS) draws the Bode plot of the LTI model SYS (created with % either TF, ZPK, SS, or FRD). The frequency range and n

4、umber of % points are chosen automatically. % See also BODEMAG, NICHOLS, NYQUIST, SIGMA ni = nargin; no = nargout; . % end bode, 電子發(fā)燒友 電子技術(shù)論壇,6.1 MATLAB 語言函數(shù)的基本結(jié)構(gòu),說明,注釋符號引導(dǎo)的內(nèi)容不能含空行,否則,后續(xù)的內(nèi)容不能由 help 命令看到,大部分作者及版權(quán)信息都是空行后的注釋內(nèi)容。,當(dāng)返回變量只有一個時,不用方框號括起來。,函數(shù)名與該函數(shù)存盤用的文件名要一樣,否則MATLAB尋找的是文件名符合的函數(shù),而且老版本的MATLAB不能用

5、超過8個字符的函數(shù)名。, 電子發(fā)燒友 電子技術(shù)論壇,6.1 MATLAB 語言函數(shù)的基本結(jié)構(gòu),說明(續(xù)),可以用 type 函數(shù)名 來看函數(shù)文件的內(nèi)容。,可以用 edit 函數(shù)名 來查看或編輯函數(shù)文件。,為了使得MATLAB認識該函數(shù),要將該函數(shù)所在的目錄用cd 命令設(shè)為當(dāng)前目錄,或用命令addpath添加到MATLAB的路徑中去(也可以用MATLAB菜單下的PATH命令)。, 電子發(fā)燒友 電子技術(shù)論壇,6.2 全局、局部變量、子函數(shù)與私有目錄,MATLAB工作區(qū)中的變量和M函數(shù)內(nèi)部的變量都是局部變量,他們是互不干擾的,但也可以顯性地把變量定義為全局變量,使得他們在整個程序中都起作用。,全局變

6、量定義格式為 global a b c d 注意變量之間不能用逗號分開,在MATLAB工作區(qū)和M 函數(shù)內(nèi)部同時要聲明該變量為全局變量。,為保證函數(shù)的獨立性,一般情況下不建議使用全局變量。, 電子發(fā)燒友 電子技術(shù)論壇,6.2 全局、局部變量、子函數(shù)與私有目錄,從MATLAB 5.0 開始引入子函數(shù)。所謂子函數(shù)就是一個函數(shù)文件中不但包含該函數(shù)本身,還包含專門由該函數(shù)調(diào)用的下一級函數(shù),這樣的專門函數(shù)稱為子函數(shù)。子函數(shù)是不能有其他文件中的函數(shù)調(diào)用的。,私有目錄即在當(dāng)前的 MATLAB 目錄下建立一個 private 子目錄,該目錄下的內(nèi)容只能由當(dāng)前目錄下的函數(shù)調(diào)用,而不能有其他函數(shù)調(diào)用。, 電子發(fā)燒友

7、 電子技術(shù)論壇,6.3 MATLAB函數(shù)的跟蹤調(diào)試,用 MATLAB 自帶的編輯器 EDIT編輯所要跟蹤調(diào)試的程序,在希望的語句上設(shè)置斷點,在MATLAB命令窗按正常方式運行命令,程序會自動停留在所設(shè)的斷點處。,調(diào)試狀態(tài)下,MATLAB命令窗的命令提示符變?yōu)?K。這時可輸入任何MATLAB命令,變量為函數(shù)內(nèi)部的局部變量,而不是工作區(qū)中的變量。,調(diào)試狀態(tài)下,鼠標指針指向想查詢的局部變量上將立即能顯示出該變量值。, 電子發(fā)燒友 電子技術(shù)論壇,6.3 MATLAB函數(shù)的跟蹤調(diào)試,跟蹤調(diào)試程序中 Debug 菜單下的子菜單項的功能如下表, 電子發(fā)燒友 電子技術(shù)論壇,6.4 MATLAB工具箱編寫技巧,

8、將為某種專門目的編寫一組 MATLAB 函數(shù)放在一個目錄下,就形成了一個新的工具箱。 為了使得用戶能象MATLAB提供的工具箱一樣使用該工具箱,必須將該工具箱所在的目錄用命令 addpath 添加到MATLAB的搜索路徑中去。 為了能使得命令 help 工具箱名 能列出該工具箱的所有函數(shù)的功能介紹,應(yīng)該按下述格式編寫一個名為 contents.m 的文件。第一行給出工具箱名稱,第二行給出版本信息,由命令 ver 工具箱名 可以獲得該工具箱的版本信息。 一般在該工具箱下還有一文件 readme.m 用來存放有關(guān)該工具箱的版本升級信息,使用命令 whatsnew 工具箱名 查看的就是該文件的信息。

9、, 電子發(fā)燒友 電子技術(shù)論壇,6.4 MATLAB工具箱編寫技巧, type contents.m % Symbolic Math Toolbox. % Version 2.1.2 (R12.1) 11-Sep-2000 % New Features. % Readme - Overview of the new features in/changes made to % the Symbolic and Extended Symbolic Math Toolboxes. % Calculus. % diff - Differentiate. % Linear Algebra. % poly

10、- Characteristic polynomial. % Simplification. % simplify - Simplify. % Solution of Equations. % solve - Symbolic solution of algebraic equations. % Variable Precision Arithmetic. % vpa - Variable precision arithmetic., 電子發(fā)燒友 電子技術(shù)論壇,6.5 MATLAB語言的程序流程語句,MATLAB 提供了循環(huán)語句結(jié)構(gòu)、條件語句結(jié)構(gòu)、開關(guān)語句結(jié)構(gòu)以及試探語句。,for 循環(huán)變量

11、= s1:s2:s3 循環(huán)體語句組 end,循環(huán)語句結(jié)構(gòu),for 循環(huán)變量 = Vector 循環(huán)體語句組 end, 電子發(fā)燒友 電子技術(shù)論壇,6.5 MATLAB語言的程序流程語句,例一、 t=0; for i = 1:1:100; t=t+i; end,循環(huán)語句結(jié)構(gòu),例二、 w= 0.1:0.05:1, 1.5:0.5:10, 15:5:100, 150:50:1000; a=0 1;-1 2; b=0;1; c=1 2; d=0; m=; I=eye(size(A); for i=w, m=m; C*inv(sqrt(-1)*I*I-A)*B+D); end, 電子發(fā)燒友 電子技術(shù)論壇,

12、6.5 MATLAB語言的程序流程語句,條件語句結(jié)構(gòu),if 條件式1 條件塊語句組1 else 條件塊語句組2 end,if 條件式1 條件塊語句組1 elseif 條件式2 條件塊語句組2 else 條件塊語句組n+1 end, 電子發(fā)燒友 電子技術(shù)論壇,6.5 MATLAB語言的程序流程語句,條件語句結(jié)構(gòu),例一 if a=0 a=1; else a=-1; end,例二 if a0 a=1 elseif a0 a=-1 else a=0 end, 電子發(fā)燒友 電子技術(shù)論壇,6.5 MATLAB語言的程序流程語句,開關(guān)結(jié)構(gòu),switch 開關(guān)表達式 case 表達式1 語句段1 case 表

13、達式2,表達式3,表達式m 語句段2 otherwise 語句段n end, 電子發(fā)燒友 電子技術(shù)論壇,6.6 MATLAB中新的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)體 struct,從5.0版本開始,MATLAB 提供了幾種新的數(shù)據(jù)結(jié)構(gòu)類型,他們是數(shù)據(jù)結(jié)構(gòu)體 struct,類 class和單元結(jié)構(gòu)cell。,與C語言不同,MATLAB中數(shù)據(jù)結(jié)構(gòu)類型的變量不用定義一個結(jié)構(gòu)體先,直接用就可以,如下例。, student_rec.number=1; student_=Ying; student_rec.height=165; student_rec.test=100,80,75;77,60,92;6

14、7,28,80;100,89,78; student_rec student_rec = number: 1 name: Ying height: 165 test: 4x3 double, 電子發(fā)燒友 電子技術(shù)論壇,6.6 MATLAB中新的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)體 struct,引用成員變量, student_rec.test ans = 100 80 75 77 60 92 67 28 80 100 89 78,建立結(jié)構(gòu)體類型的數(shù)組, b(50,2)=struct(student_rec) b = 50 x2 struct array with fields: number name hei

15、ght test, 電子發(fā)燒友 電子技術(shù)論壇,6.6 MATLAB中新的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)體 struct,修改結(jié)構(gòu)數(shù)值元素的取值,增加結(jié)構(gòu)體成員, b(43,2).number=50+43; b(43,2).name=Gan; b(43,2).height=156; b(43,2).test=83,80,78;97,80,62;90,20,30;30,20,80;, b(1,1).weight=90 b = 50 x2 struct array with fields: number name height test weight,刪除結(jié)構(gòu)體成員, b=rmfield(b,weight) b

16、 = 50 x2 struct array with fields: number name height test, 電子發(fā)燒友 電子技術(shù)論壇,6.6 MATLAB中新的數(shù)據(jù)結(jié)構(gòu),類 class,類不但包含成員變量,還包含成員函數(shù),我們通過一個例子來介紹類的構(gòu)造,下面建立多項式類。,首先選定一個類的名字,如多項式類我們選為 polynom。 以這個名字在當(dāng)前目錄下建立一個子目錄,而且要加符號,即建立子目錄 polynom。該目錄無需在MATLAB路徑下再指定。, 電子發(fā)燒友 電子技術(shù)論壇,6.6 MATLAB中新的數(shù)據(jù)結(jié)構(gòu),polynom類的數(shù)據(jù)結(jié)構(gòu),多項式類只包含一個數(shù)據(jù)成員即 p.c,它

17、即是多項式系數(shù),冪次從高到底。該成員變量只能被 polynom目錄下的成員函數(shù)訪問。,polynom類的成員函數(shù),構(gòu)造函數(shù) polynom.m 多項式到雙精度數(shù)的轉(zhuǎn)換函數(shù) 多項式到字符串的轉(zhuǎn)換函數(shù) 顯示函數(shù) A subsref method 重載運算符 +, -, 和 * 重載函數(shù) roots, polyval, plot, 和 diff, 電子發(fā)燒友 電子技術(shù)論壇,function p = polynom(a) %POLYNOM Polynomial class constructor. % p = POLYNOM(v) creates a polynomial object from th

18、e vector v, % containing the coefficients of descending powers of x. if nargin = 0 p.c = ; p = class(p,polynom); elseif isa(a,polynom) p = a; else p.c = a(:).; p = class(p,polynom); end,6.6 MATLAB中新的數(shù)據(jù)結(jié)構(gòu),polynom類的構(gòu)造函數(shù) polynom.m, p = polynom(1 0 -2 -5) p = polynom object: 1-by-1, 電子發(fā)燒友 電子技術(shù)論壇,6.6 MAT

19、LAB中新的數(shù)據(jù)結(jié)構(gòu),function c = double(p) % POLYNOM/DOUBLE Convert polynom object to coefficient vector. % c = DOUBLE(p) converts a polynomial object to the vector c % containing the coefficients of descending powers of x. c = p.c;,polynom類的轉(zhuǎn)換函數(shù) double.m,function display(p) % POLYNOM/DISPLAY Command window

20、display of a polynom disp( ); disp(inputname(1), = ) disp( ); disp( char(p) disp( );,polynom類的顯示函數(shù) display.m, double(p) ans = 1 0 -2 -5, display(p) p = x3 - 2*x - 5, 電子發(fā)燒友 電子技術(shù)論壇,6.6 MATLAB中新的數(shù)據(jù)結(jié)構(gòu),function r = plus(p,q) % POLYNOM/PLUS Implement p + q for polynoms. p = polynom(p); q = polynom(q); k =

21、 length(q.c) - length(p.c); r = polynom(zeros(1,k) p.c + zeros(1,-k) q.c);,polynom類重載運算符 plus.m,function r = mtimes(p,q) % POLYNOM/MTIMES Implement p * q for polynoms. p = polynom(p); q = polynom(q); r = polynom(conv(p.c,q.c);,polynom類重載*運算符 mtimes.m, 電子發(fā)燒友 電子技術(shù)論壇,6.6 MATLAB中新的數(shù)據(jù)結(jié)構(gòu),單元結(jié)構(gòu) cell,單元結(jié)構(gòu)類似于

22、數(shù)組,但單元結(jié)構(gòu)中各元素可以是不同屬性的數(shù)據(jù),見下例。,訪問單元數(shù)據(jù)要用帶有大括號下標的形式,不能用圓括號。 可以使用 celldisp 函數(shù)來直接顯示整個單元。 刪除第n個單元元素用下面命令: a(n)=; 注意用圓括號。, a=1,Ying,180,magic(3) a = 1 Ying 180 3x3 double a4 ans = 8 1 6 3 5 7 4 9 2, 電子發(fā)燒友 電子技術(shù)論壇,6.6 MATLAB中新的數(shù)據(jù)結(jié)構(gòu),單元結(jié)構(gòu) cell應(yīng)用,varargin 表示輸入變量列表,是一個單元結(jié)構(gòu)變量 varargout 表示輸出變量列表,是一個單元結(jié)構(gòu)變量,function a

23、=convs(varargin) a=varargin1; for i=2:length(varargin) a=conv(a,varargini); end, p=1 2 4 0 5;q=1 2;f=1 2 3; g=convs(p,q,f,1 1,1 3,1 4); g= 1 11 56 176 376 578 678 648 527 315 90, 電子發(fā)燒友 電子技術(shù)論壇,6.7 MATLAB語言編程技巧,MATLAB運行機制,MATLAB 語言在函數(shù)調(diào)用中或文件執(zhí)行時,如果遇到了某一個名字,則按照下面的優(yōu)先級順序?qū)@個名字進行判定。,判定這個名字是否為變量名 判定這個名字是否為本函數(shù)

24、內(nèi)部的子函數(shù) 判定這個名字是否為本目錄下的私有目錄內(nèi)函數(shù) 判定這個名字是否為 MATLAB 的內(nèi)在函數(shù)名 判定這個名字是否為 MATLAB 路徑下的 Mex 型文件 判定這個名字是否為 MATLAB 路徑下的 M 函數(shù),MATLAB 搜索路徑的順序是按照其路徑設(shè)定文件 pathdef.m 中的先后次序來進行的。, 電子發(fā)燒友 電子技術(shù)論壇,6.7 MATLAB語言編程技巧,MATLAB運行機制,用戶可以用命令 exist 來查詢當(dāng)前的工作區(qū)下是否存在一個名字,其調(diào)用格式為: i=exist(字符串),例如 i=exist(A);,i=1,則表示當(dāng)前工作區(qū)下存在變量 A i=2,則表示MALTAB工作路徑下存在文件 A.m i=3,則表示MATLAB工作路徑下存在文件 A.dll i=4,則表示表示存在 Simulink

溫馨提示

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

評論

0/150

提交評論