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

下載本文檔

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

文檔簡(jiǎn)介

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

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

3、別表示輸入變量和輸出變量的個(gè)數(shù)。程序中可以根據(jù)這兩個(gè)變量的值來(lái)判斷用戶輸入?yún)?shù)的情況。, 電子發(fā)燒友 電子技術(shù)論壇,6.1 MATLAB 語(yǔ)言函數(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 語(yǔ)言函數(shù)的基本結(jié)構(gòu),說(shuō)明,注釋符號(hào)引導(dǎo)的內(nèi)容不能含空行,否則,后續(xù)的內(nèi)容不能由 help 命令看到,大部分作者及版權(quán)信息都是空行后的注釋內(nèi)容。,當(dāng)返回變量只有一個(gè)時(shí),不用方框號(hào)括起來(lái)。,函數(shù)名與該函數(shù)存盤(pán)用的文件名要一樣,否則MATLAB尋找的是文件名符合的函數(shù),而且老版本的MATLAB不能用

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

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

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

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

9、, 電子發(fā)燒友 電子技術(shù)論壇,6.4 MATLAB工具箱編寫(xiě)技巧, 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語(yǔ)言的程序流程語(yǔ)句,MATLAB 提供了循環(huán)語(yǔ)句結(jié)構(gòu)、條件語(yǔ)句結(jié)構(gòu)、開(kāi)關(guān)語(yǔ)句結(jié)構(gòu)以及試探語(yǔ)句。,for 循環(huán)變量

11、= s1:s2:s3 循環(huán)體語(yǔ)句組 end,循環(huán)語(yǔ)句結(jié)構(gòu),for 循環(huán)變量 = Vector 循環(huán)體語(yǔ)句組 end, 電子發(fā)燒友 電子技術(shù)論壇,6.5 MATLAB語(yǔ)言的程序流程語(yǔ)句,例一、 t=0; for i = 1:1:100; t=t+i; end,循環(huán)語(yǔ)句結(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語(yǔ)言的程序流程語(yǔ)句,條件語(yǔ)句結(jié)構(gòu),if 條件式1 條件塊語(yǔ)句組1 else 條件塊語(yǔ)句組2 end,if 條件式1 條件塊語(yǔ)句組1 elseif 條件式2 條件塊語(yǔ)句組2 else 條件塊語(yǔ)句組n+1 end, 電子發(fā)燒友 電子技術(shù)論壇,6.5 MATLAB語(yǔ)言的程序流程語(yǔ)句,條件語(yǔ)句結(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語(yǔ)言的程序流程語(yǔ)句,開(kāi)關(guān)結(jié)構(gòu),switch 開(kāi)關(guān)表達(dá)式 case 表達(dá)式1 語(yǔ)句段1 case 表

13、達(dá)式2,表達(dá)式3,表達(dá)式m 語(yǔ)句段2 otherwise 語(yǔ)句段n end, 電子發(fā)燒友 電子技術(shù)論壇,6.6 MATLAB中新的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)體 struct,從5.0版本開(kāi)始,MATLAB 提供了幾種新的數(shù)據(jù)結(jié)構(gòu)類(lèi)型,他們是數(shù)據(jù)結(jié)構(gòu)體 struct,類(lèi) class和單元結(jié)構(gòu)cell。,與C語(yǔ)言不同,MATLAB中數(shù)據(jù)結(jié)構(gòu)類(lèi)型的變量不用定義一個(gè)結(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)體類(lèi)型的數(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),類(lèi) class,類(lèi)不但包含成員變量,還包含成員函數(shù),我們通過(guò)一個(gè)例子來(lái)介紹類(lèi)的構(gòu)造,下面建立多項(xiàng)式類(lèi)。,首先選定一個(gè)類(lèi)的名字,如多項(xiàng)式類(lèi)我們選為 polynom。 以這個(gè)名字在當(dāng)前目錄下建立一個(gè)子目錄,而且要加符號(hào),即建立子目錄 polynom。該目錄無(wú)需在MATLAB路徑下再指定。, 電子發(fā)燒友 電子技術(shù)論壇,6.6 MATLAB中新的數(shù)據(jù)結(jié)構(gòu),polynom類(lèi)的數(shù)據(jù)結(jié)構(gòu),多項(xiàng)式類(lèi)只包含一個(gè)數(shù)據(jù)成員即 p.c,它

17、即是多項(xiàng)式系數(shù),冪次從高到底。該成員變量只能被 polynom目錄下的成員函數(shù)訪問(wèn)。,polynom類(lèi)的成員函數(shù),構(gòu)造函數(shù) polynom.m 多項(xiàng)式到雙精度數(shù)的轉(zhuǎn)換函數(shù) 多項(xiàng)式到字符串的轉(zhuǎn)換函數(shù) 顯示函數(shù) A subsref method 重載運(yùn)算符 +, -, 和 * 重載函數(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類(lèi)的構(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類(lèi)的轉(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類(lèi)的顯示函數(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類(lèi)重載運(yùn)算符 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類(lèi)重載*運(yùn)算符 mtimes.m, 電子發(fā)燒友 電子技術(shù)論壇,6.6 MATLAB中新的數(shù)據(jù)結(jié)構(gòu),單元結(jié)構(gòu) cell,單元結(jié)構(gòu)類(lèi)似于

22、數(shù)組,但單元結(jié)構(gòu)中各元素可以是不同屬性的數(shù)據(jù),見(jiàn)下例。,訪問(wèn)單元數(shù)據(jù)要用帶有大括號(hào)下標(biāo)的形式,不能用圓括號(hào)。 可以使用 celldisp 函數(shù)來(lái)直接顯示整個(gè)單元。 刪除第n個(gè)單元元素用下面命令: a(n)=; 注意用圓括號(hào)。, 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 表示輸入變量列表,是一個(gè)單元結(jié)構(gòu)變量 varargout 表示輸出變量列表,是一個(gè)單元結(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語(yǔ)言編程技巧,MATLAB運(yùn)行機(jī)制,MATLAB 語(yǔ)言在函數(shù)調(diào)用中或文件執(zhí)行時(shí),如果遇到了某一個(gè)名字,則按照下面的優(yōu)先級(jí)順序?qū)@個(gè)名字進(jìn)行判定。,判定這個(gè)名字是否為變量名 判定這個(gè)名字是否為本函數(shù)

24、內(nèi)部的子函數(shù) 判定這個(gè)名字是否為本目錄下的私有目錄內(nèi)函數(shù) 判定這個(gè)名字是否為 MATLAB 的內(nèi)在函數(shù)名 判定這個(gè)名字是否為 MATLAB 路徑下的 Mex 型文件 判定這個(gè)名字是否為 MATLAB 路徑下的 M 函數(shù),MATLAB 搜索路徑的順序是按照其路徑設(shè)定文件 pathdef.m 中的先后次序來(lái)進(jìn)行的。, 電子發(fā)燒友 電子技術(shù)論壇,6.7 MATLAB語(yǔ)言編程技巧,MATLAB運(yùn)行機(jī)制,用戶可以用命令 exist 來(lái)查詢當(dāng)前的工作區(qū)下是否存在一個(gè)名字,其調(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論