MATLAB及在電子信息課程中的應(yīng)用.ppt_第1頁
MATLAB及在電子信息課程中的應(yīng)用.ppt_第2頁
MATLAB及在電子信息課程中的應(yīng)用.ppt_第3頁
MATLAB及在電子信息課程中的應(yīng)用.ppt_第4頁
MATLAB及在電子信息課程中的應(yīng)用.ppt_第5頁
已閱讀5頁,還剩302頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2020/8/7,1,MATLAB及在電子信息課程中的應(yīng)用,朱軍 ,2020/8/7,2,第一篇 語言篇,第1章 MATLAB 語言概述 第2章 基本語法 第3章 MATLAB 的開發(fā)環(huán)境和工具 第4章 MATLAB 的其他函數(shù)庫,2020/8/7,3,第二篇 應(yīng)用篇,第5章 MATLAB在電路中的應(yīng)用 第6章 MATLAB在信號與系統(tǒng)中的應(yīng)用 第7章 MATLAB在數(shù)字信號處理中應(yīng)用 第8章 MATLAB在自動控制原理中應(yīng)用 第9章 MATLAB工具箱簡介 附錄A、B、C、D,2020/8/7,4,第1章 MATLAB語言概述,1.1 MATLAB語言的發(fā)展 1.2 MATLAB語言的特點

2、1.3 MATLAB的工作環(huán)境 1.3.1 命令窗 1.3.2 圖形窗 1.3.3 文本編輯窗 1.4 演示程序 1.5 網(wǎng)絡(luò)資源,2020/8/7,5,1.1 MATLAB語言的發(fā)展,1.1.1 MATLAB 概述 MATLAB是集數(shù)值計算、符號運算及圖形處理等強大功能于一體的科學(xué)計算語言,是一種交互式的以矩陣為基礎(chǔ)的系統(tǒng)計算平臺,它用于科學(xué)和工程的計算與可視化。它的優(yōu)點在于快速開發(fā)計算方法,而不在于計算速度。 MATLAB已成為一門高校必修的課程,也是最為普遍的計算工具之一。,2020/8/7,6,1.1 MATLAB語言的發(fā)展(續(xù)),1.1.2 Matlab的發(fā)展 MATLAB名字由MA

3、Trix和 LABoratory 兩詞的前三個字母組合而成。那是20世紀(jì)七十年代,時任美國新墨西哥大學(xué)計算機科學(xué)系主任的Cleve Moler出于減輕學(xué)生編程負(fù)擔(dān)的動機,為學(xué)生設(shè)計了一組調(diào)用LINPACK和EISPACK矩陣軟件工具包庫程序的的“通俗易用”的接口,此即用FORTRAN編寫的萌芽狀態(tài)的MATLAB。 1984年由Little、Moler、Steve Bangert合作成立MathWorks公司,并把MATLAB正式推向市場。從這時起,MATLAB的內(nèi)核采用C語言編寫,而且除原有的數(shù)值計算能力外,還新增了數(shù)據(jù)圖視功能。,2020/8/7,7,1997年仲春,MATLAB5.0版問世

4、,緊接著是5.1、5.2,以及和1999年春的5.3版?,F(xiàn)今的MATLAB擁有更豐富的數(shù)據(jù)類型和結(jié)構(gòu)、更友善的面向?qū)ο蟆⒏涌焖倬嫉膱D形可視、更廣博的數(shù)學(xué)和數(shù)據(jù)分析資源、更多的應(yīng)用開發(fā)工具。 2000年末又推出6.0版本。無論在界面的設(shè)計上還是在內(nèi)容上較以前版本都有很大的進展。 2004年又推出了7.0版本,2020/8/7,8,1.1 MATLAB語言的發(fā)展(續(xù)),1.1.3 Matlab的版本演化 Matlab 1.0 Pc matlab-matlab 386 Matlab3.5+simulink Matlab 4.0:simlink內(nèi)嵌(1992) Matlab 5.0 :全面的面向?qū)?/p>

5、象 Matlab 5.15.3 (1999) Matlab 6.0 (2000) Matlab 6.5:購并了MATRIXx Matlab 7.0: (2004),2020/8/7,9,1.2 MATLAB語言的特點,友好的工作平臺和編程環(huán)境 簡單易用的程序語言 強大的科學(xué)計算及數(shù)據(jù)處理能力 出色的圖形處理功能 應(yīng)用廣泛的模塊集和工具箱 實用的程序接口和發(fā)布平臺 模塊化的設(shè)計和系統(tǒng)級的仿真,2020/8/7,10,1.3 MATLAB的工作環(huán)境,1.3.1 命令窗(Command Window) 單行命令執(zhí)行方式 執(zhí)行結(jié)果直接顯示 1.3.2 圖形窗(Figure Window) 用圖形方式表

6、示計算結(jié)果 1.3.3 文本編輯窗(File Editor) 多行命令組成語言組,可以文件方式存盤,下面就具體看一下MATLAB 的工作環(huán)境演示。,2020/8/7,11,1.4 演示程序,在MATLAB的命令窗中鍵入 demo或demos,%pend.m plot(-0.2,0.2,0;0,color,y,linestyle,-,linewidth,10); g=0.98;l=1; theta0=pi/6;x0=l*sin(theta0); y0=-l*cos(theta0); axis(-0.75,0.75,-1.25,0); axis(off); head=line(x0,y0,colo

7、r,r,linestyle,.,erasemode,xor,markersize,40); body=line(0;x0,0,y0,color,b,linestyle,-,erasemode,xor); t=0;dt=0.01; while t=50 t=t+dt; theta=theta0*cos(sqrt(g/l)*t); x=l*sin(theta);y=-l*cos(theta); set(head,xdata,x,ydata,y); set(body,xdata,0;x,ydata,0;y); drawnow; end,2020/8/7,13,部分命令的演示,例1.求 的算術(shù)運算結(jié)果

8、。 (12+2*(7-4)/32 ans = 2 例2.簡單矩陣 的輸入步驟。 A = 1,2,3; 4,5,6; 7,8,9 A = 1 2 3 4 5 6 7 8 9,例3. 矩陣的分行輸入。 A=1,2,3 4,5,6 7,8,9 A = 1 2 3 4 5 6 7 8 9 例4. 指令的續(xù)行輸入 S=11/2+1/31/4+1/51/6+1/7 -1/8 S = 0.6345,例5. 復(fù)數(shù) 表達,及計算 。 (1)z1= 3 + 4i z1 = 3.0000 + 4.0000i (2)z2 = 1 + 2 * i z3=2*exp(i*pi/6) z=z1*z2/z3 z2 = 1.0

9、000 + 2.0000i z3 = 1.7321 + 1.0000i z = 0.3349 + 5.5801i,例6. 復(fù)數(shù)矩陣的生成及運算 A=1,3;2,4-5,8;6,9*i B=1+5i,2+6i;3+8*i,4+9*i C=A*B A =1.0000 - 5.0000i 3.0000 - 8.0000i 2.0000 - 6.0000i 4.0000 - 9.0000i B = 1.0000 + 5.0000i 2.0000 + 6.0000i 3.0000 + 8.0000i 4.0000 + 9.0000i C = 1.0e+002 * 0.9900 1.1600 - 0.09

10、00i 1.1600 + 0.0900i 1.3700,例7 . 求上例復(fù)數(shù)矩陣C的實部、虛部、模和相角。 C_real=real(C) C_imag=imag(C) C_magnitude=abs(C) C_phase=angle(C)*180/pi C_real = 99 116 116 137 C_imag = 0 -9 9 0 C_magnitude = 99.0000 116.3486 116.3486 137.0000 C_phase = 0 -4.4365 4.4365 0,例8. 用MATLAB計算 能得到 2 嗎? (1)a=-8; r=a(1/3) r = 1.0000 +

11、 1.7321i (2)全部方根計算如下 m=0,1,2; R=abs(a)(1/3); Theta=(angle(a)+2*pi*m)/3; rrr=R*exp(i*Theta) rrr = 1.0000 + 1.7321i -2.0000 + 0.0000i 1.0000 - 1.7321i,(3)圖形表示 t=0:pi/20:2*pi;x=R*sin(t);y=R*cos(t); plot(x,y,b:),grid hold on plot(rrr(1),.,MarkerSize,30,Color,r) plot(rrr(2,3),o,MarkerSize,15,Color,b) axi

12、s(-3,3,-3,3),axis square hold off,例9. 畫出衰減振蕩曲線 及其它的包絡(luò)線 。t的取值范圍是 t=0:pi/50:4*pi; y0=exp(-t/3); y=exp(-t/3).*sin(3*t); plot(t,y,-r,t,y0,:b,t,-y0,:b),例10.畫出 所表示的三維曲面。 的取值范圍是-8,8. clear; x=-8:0.5:8; y=x; X=ones(size(y)*x; Y=y*ones(size(x); R=sqrt(X.2+Y.2)+eps; Z=sin(R)./R; mesh(X,Y,Z);colormap(hot) xlab

13、el(x),ylabel(y),zlabel(z),2020/8/7,22,1.5 網(wǎng)絡(luò)資源,USENET新聞組 MATLAB的新聞組是comp.soft-sys.MATLAB。瀏覽器指向 網(wǎng)絡(luò)上的工具箱 ,2020/8/7,23,1.5 網(wǎng)絡(luò)資源(續(xù)),BBS 哈爾濱工業(yè)大學(xué)bbs: telnet:/ 上海交通大學(xué)bbs: telnet:/ 清華大學(xué)bbs mathtools www服務(wù) Matlab 大觀園: http:/www.matlab-,2020/8/7,24,第2章 基本語法,2.1 變量及其賦值 2.2 矩陣的初等運算 2.3 元素群運算 2.4 邏輯判斷及流程控制 2.5 基

14、本繪圖方法 2.6 M文件及程序調(diào)試,2020/8/7,25,2.1 變量及其賦值,2.1.1 標(biāo)識符與數(shù) 標(biāo)識符是標(biāo)識變量名、常量名、函數(shù)名、文件名的字符串的總稱。 1、表示符第1個字符必須是字母。 2、長度不超過31個。 3、區(qū)分大小寫。 4、變量中不能含有標(biāo)點符號。 5、變量可直接參與計算。 6、變量一般無需事先定義,2020/8/7,26,2.1.1 標(biāo)識符與數(shù)(續(xù)),7、特殊變量,2020/8/7,27,2.1.1 標(biāo)識符與數(shù)(續(xù)),8、數(shù)值顯示格式 MATLAB中所有的量為雙字長浮點數(shù),顯示按下面顯示規(guī)則: 在缺省情況下,當(dāng)結(jié)果為整數(shù),作為整數(shù)顯示;當(dāng)結(jié)果為實數(shù),以小數(shù)后4位的精度

15、近似顯示。 如果結(jié)果中的有效數(shù)字超出了這一范圍,以科學(xué)計數(shù)法顯示結(jié)果。 format命令改變顯示格式,常用的的格式有 long (16位) bank(2個十進制位) hex(十六進制) short(缺省) short e(5位加指數(shù)) +(符號) long e(16位加指數(shù)) rat(有理數(shù)近似),2020/8/7,28,2.1.2 矩陣及其元素的賦值,矩陣獲取格式:變量=表達式(或數(shù)) 1、直接輸入:A=1 2 3;4 5 6;7,8,9 *矩陣用中括號括起。 *元素間用空格隔開,或用逗號隔開。 *每行用分號;號表示回車。 2、行向量 B=1 2 3 4 5 3、列向量 C=1;2;3;4;

16、5; 每行命令后面的分號;表示結(jié)果不顯示。,2020/8/7,29,2.1.2 矩陣及其元素的賦值(續(xù)),4、元素可用表達式表示 D=-1.3 sqrt(3) (1+2+3)/5+1 5、用語句生成 行向量 E=from:step:to 即E=開始數(shù):步長:結(jié)束數(shù) E=1:2:10 得E=1 3 5 7 9 6、矩陣連接 B=a b V=a;b,2020/8/7,30,2.1.2 矩陣及其元素的賦值(續(xù)),7、用函數(shù)創(chuàng)建 如: zeros(m,n) ones(m,n) eye(m,n) zeros(3); zeros(3,3); zeros(2,3); zeros(3,2); ones(3);

17、 ones(3,3); ones(2,3); ones(3,2); eye(3); eye(3,3); eye(3,4); eye(4,3);,2020/8/7,31,2.1.2 矩陣及其元素的賦值(續(xù)),8、rand(m,n) %產(chǎn)生均勻分布隨機數(shù)(0,1) 9、rand(state,0) %把均勻分布偽隨機發(fā)生器置為0狀態(tài) 10、randn(m,n) %產(chǎn)生正態(tài)分布隨機數(shù) 11、magic(m) %產(chǎn)生魔方數(shù)組(對高維不適用) %即每行、每列及對角元素之和為(n3+n)/2 12、linspace(a,b,n) %在a和b之間均勻產(chǎn)生n個點的值 如:f=linspace(0,1,5) 則

18、f=0 0.25 0.5 0.75 1.0 13、logspace(a,b,n) %在a和b之間對數(shù)分布產(chǎn)生n個點的值 如:f=logspace(0,1,5) 則 f=1.0000 1.7783 3.1623 5.6234 10.0000,2020/8/7,32,2.1.2 矩陣及其元素的賦值(續(xù)),矩陣中的元素(用圓括號中數(shù)字來注明) 1. A( i, j ) 表示第i 行,第j列元素。 2. A( i ) 表示第i個元素。 矩陣中元素的排序如右所示 3. A( i, j)=常量,表示給A中元素賦值。 當(dāng)下標(biāo)超出原矩陣的尺寸,則自動擴展行列并補零。,2020/8/7,33,2.1.2 矩陣及

19、其元素的賦值(續(xù)),4. A( : , j ) 表示A陣中第j 列所有元素。 5. A( i , : ) 表示A陣中第i 行所有元素。 6. A(2:3,4:6) 表示第2行到第3行,第4列到第6列的子矩陣。 7. A(3:7) 指A陣中第3個到第7個元素(列優(yōu)先)矩陣的序號編址:按列計數(shù)。 8. A(2)= 表示去除矩陣中元素。此時矩陣變?yōu)樾芯仃嚒?9. A( : ) 指A陣中所有元素組成列向量。,2020/8/7,34,2.1.3 復(fù)數(shù),1、復(fù)數(shù)的虛部部分用i 或j表示。 如:2+3i ,3-4j 2、復(fù)數(shù)可直接計算。 如:z=2+3i;3-4j 或 f=z+2+j;3; 3、復(fù)數(shù)的實部和

20、虛部可分別賦值。但 i和j需先清除。 如:clear i j f=1,3;5,7+2,4;6,8*j,2020/8/7,35,2.1.3 復(fù)數(shù),4、B=Z 表示共軛轉(zhuǎn)置。 5、B=conj(Z)表示共軛。 如: Z=1+2i,3-4j 則: B=Z 有 B= 1-2i 3+4j B=conj(Z) 有 B= 1-2i,3+4j,2020/8/7,36,2.1.3 復(fù)數(shù),6、B=conj(Z)表示轉(zhuǎn)置。 7、B=Z. 表示非共軛復(fù)數(shù)轉(zhuǎn)置。 如: Z=1+2i,3-4j 則: B=conj(Z) 有 B= 1+2i 3-4j B= Z. 有 B= 1+2i 3-4j,2020/8/7,37,2.1

21、.4 變量的查詢,存儲,提取,1、變量的查詢 who 或 whos 2、變量的存儲 save 文件名.mat 變量列表 如:save sar a b c 變量中間用空格隔開,不能加逗號。 3、變量的提取 load 文件名 4、變量的清除 clear 變量列表 5、清除所有變量 clear all,2020/8/7,38,2.1.5 基本賦值矩陣,為了方便給大量元素賦值,MATLAB提供了一些基本矩陣。見書中表2.1 如:A=zeros(m,n) 全0矩陣 B=ones(m,n) 全1矩陣 C=eye(m,n) 單位矩陣 D= rand(m,n) 01之間隨機數(shù)均勻分布 randn(state,

22、0); %把隨機數(shù)發(fā)生器置0 E=randn(m,n) 均值為0的,單位方差正態(tài)分布隨機矩陣 F= magic(m) 魔方矩陣,2020/8/7,39,G= linspace(a,b,n) 線性分隔,a,b之間均勻產(chǎn)生n個數(shù) H= logspace(a,b,n) 對數(shù)分隔, a,b之間產(chǎn)生n個數(shù) K=diag(A); 取A中對角線元素得到列向量。 P=diag(diag(A) 產(chǎn)生對角陣 a=1 2 3 4; b=diag(a) 產(chǎn)生對角陣 如 A=1 2 3;4 5 6;7 8 9 B=diag(A) 則: B=1;5;9;,2020/8/7,40,2.2 矩陣的初等運算,2.2.1 矩陣的

23、加減乘除 1、+,-,*,/, 2、點乘:.* 右除:./ 左除:. 1、C=A+B; C=A-B C=A*B 注意:矩陣 必須相匹配 2、X=AB 表示AX=B X=A-1B 即 X=inv(A)*B 3、 X=A/B 表示XB=A X=AB-1 即 X=A*inv(B) 4、m,n=size(A) 計算矩陣A的行列大小 5、K=length(A) 計算矩陣A的行列大小中最大的數(shù),2020/8/7,41,2.2.1 矩陣的加減乘除,點乘、點除 6、C=A.*B 對應(yīng)元素間相乘。,2020/8/7,42,7、C=A./B 對應(yīng)元素間相除。 8、C=A.B,2020/8/7,43,2.2.2 矩

24、陣除法及線性方程組的解,1、方陣的行列式 B=det(A) 即B=|A| 2、方陣的求逆 B=inv(A) 即B= A-1 條件|A|0 3、方陣的偽逆矩陣 B=pinv(A) 條件|A|=0 4、方陣的伴隨矩陣 B=inv(A)*det(A) 即B= A-1 |A|,2020/8/7,44,2.2.3 矩陣的乘方和冪次函數(shù),1、矩陣乘方 2、.元素對元素的乘方 C=An 表示A陣自乘n次。 C=A(-n) 表示A陣的逆矩陣自乘n次。 C=A.n 表示A陣中每個元素自乘n次。 C=A.(-n) 表示A陣中每個元素自乘n次后的逆陣,即每個元素為1/(An)。,如 C=A2 C=A .2 C=A

25、(-2)=inv(A)2 C=A .(-2),2020/8/7,46,2.2.4 矩陣結(jié)構(gòu)形式的提取與變換,B=fliplr(A) %將A矩陣左右翻轉(zhuǎn) B=flipud(A) %將A矩陣上下翻轉(zhuǎn) B=reshape(A,m,n) %將A陣重組為mxn矩陣 B=rot90(A) %將A矩陣逆時針翻轉(zhuǎn)90度 B=diag(A) %提取A矩陣的對角組成列向量 B=tril(A) %提取A矩陣的左下三角部分 B=triu(A) %提取A矩陣的右上三角部分,如: B=fliplr(A) B=flipud(A) B=rot90(A) B=tril(A),2020/8/7,48,2.3 元素群運算,2.3.

26、1 數(shù)組及其賦值 1、t=初值:步長:終值; 如t=0:0.1:1 tt=10:-1:1 2、t=linspace(初值,終值,點數(shù)) 如:tr=linspace(0, 2*pi, 9) 3、t=logspace(初值,終值,點數(shù)) 如:tp=logspace(0, 1, 11),2020/8/7,49,2.3.2 元素群的四則運算,表示對矩陣中每個元素進行運算 如 X=1 2 3; Y=4 5 6 Z=X.*Y Z=4 10 18 Z=X.Y Z=4 2.5 2 Z=X.Y Z=1 32 729 Z=X.N N=2 Z=1 4 9 Z=2.X Y Z=2 4 8 16 32 64,2020/

27、8/7,50,2.3.3 元素群的函數(shù),等命令可以直接MATLAB中exp、sprt、sin、cos使用在矩陣上,這種運算只是定義在矩陣的單個元素上,即分別對矩陣的每個元素進行運算。MATLAB中也提供了基本的三角函數(shù)。 注意其中的取整,2020/8/7,51,2.3.3 元素群的函數(shù),2020/8/7,52,2.4 邏輯判斷及流程控制,2.4.1 關(guān)系操作符 MATLAB常用的關(guān)系操作符有:(大于)、=(大于或等于)、 = =(等于)、 =(不等于)。 MATLAB的關(guān)系操作符可以用來比較兩個大小相同的數(shù)組,或者比較一個數(shù)組和一個標(biāo)量。在與標(biāo)量比較時,結(jié)果和數(shù)組大小一樣。 a=1:9; b=

28、a4 b = 0 0 0 0 1 1 1 1 1 c=a(a4) c = 5 6 7 8 9,2020/8/7,53,2.4.1 關(guān)系操作符,矩陣查找和排序 子矩陣的查找使用find命令完成,它返回關(guān)系表達式為真的下標(biāo)。例如: a=10:20; find(a15) ans = 7 8 9 10 11 矩陣的排序使用sort函數(shù),它將矩陣按照升序排列。,2020/8/7,54,2.4.2 邏輯運算,邏輯操作符定義了一種與或非的關(guān)系表達式。MATLAB的邏輯操作符有%利用find獲得符合關(guān)系等式條件的元素雙下標(biāo) disp(ii),disp(jj),【例】關(guān)系運算運用之一:求近似極限,修補圖形缺口。

29、 t=-2*pi:pi/10:2*pi; y=sin(t)./t; subplot(1,2,1),plot(t,y),axis(-7,7,-0.5,1.2), xlabel(t),ylabel(y),title(殘缺圖形) tt=t+(t=0)*eps; yy=sin(tt)./tt; subplot(1,2,2),plot(tt,yy),axis(-7,7,-0.5,1.2) xlabel(t),ylabel(yy),title(正確圖形) Warning: Divide by zero.,2020/8/7,59,【例】邏輯操作應(yīng)用之一:逐段解析函數(shù)的計算和表現(xiàn)。本例演示削頂整流正弦半波的計

30、算和圖形繪制。,t=linspace(0,3*pi,500);y=sin(t); z1=(t2*pi).*y; w=(tpi/3 subplot(1,3,1),plot(t,y,:r),ylabel(y) subplot(1,3,2),plot(t,z1,:r),axis(0 10 -1 1) subplot(1,3,3),plot(t,z2,-b),axis(0 10 -1 1),2020/8/7,61,【例】寫出生成下圖所示波形的MATLAB腳本文件M文件。圖中虛線為正弦波,要求它的負(fù)半波被置零,且在 處被削頂。,t=linspace(0,3*pi,500); y=sin(t); z1=(

31、t2*pi).*y; w=(tpi/3,2020/8/7,63,2.4.4 流程控制語句,腳本 對于簡單問題,使用直接輸入命令簡單有效;對稍復(fù)雜和多次重復(fù)的應(yīng)用,直接輸入命令比較麻煩。MATLAB提供了邏輯解決方案,它允許用戶把多個命令放在一個簡單的文本文件中,如同在MATLAB中鍵入命令一般,這種文件稱為腳本文件,由于腳本文件以m為擴展名,它常稱為M文件。腳本文件為文本形式的,對跨平臺處理十分有利。 使用腳本文件,可以把命令保存在磁盤上,便于以后的訪問;同時對使用大的數(shù)組也帶來的方便;增加注釋可以為腳本中的命令作文擋以免以后忘記。,2020/8/7,64,2.4.4 流程控制語句,為了便于應(yīng)

32、用,MATLAB提供了一些流程控制的命令。這些命令對腳本編寫帶來了一些方便,但是需要注意的是,盡量不要使用這些流程控制命令,尤其是循環(huán)控制命令。 If 語句 很多情況下,命令的序列必須根據(jù)關(guān)系的檢驗有條件的執(zhí)行,它由if-else-end結(jié)構(gòu)提供。它的結(jié)構(gòu)如下: if expression1 commands1 elseif expression2 commands2 elseif else commands end,2020/8/7,65,2.4.4 流程控制語句,在執(zhí)行過程中,MATLAB依次檢查各個表達式,只執(zhí)行第一個表達式為真的命令串,接下來的關(guān)系表達式不檢驗,跳過其余的if-else

33、-end結(jié)構(gòu),而且,最后的else命令可有可無。,2020/8/7,66,求,2020/8/7,67,2.4.4 流程控制語句,for循環(huán) for循環(huán)允許一組命令以固定的次數(shù)重復(fù),它的一般形式是 for x=array command end for 和end之間的命令串按數(shù)組array的每一列執(zhí)行一次,直到n次后終止。 如:for j=1:2:10 y=j+j.2; end,2020/8/7,68,2.4.4 流程控制語句,for循環(huán)不能使用內(nèi)部重新賦值循環(huán)變量而終止; for循環(huán)內(nèi)部接受任何有效的MATLAB數(shù)組; for循環(huán)可以嵌套; 只要有矩陣形式可以解決的問題,不要使用for循環(huán)。使

34、用for循環(huán)的算法執(zhí)行很慢,一個好的MATLAB算法不應(yīng)當(dāng)出現(xiàn)循環(huán)語句。Tic/toc 循環(huán)可以使用break跳出,但只跳出所在的循環(huán),不跳出整個嵌套結(jié)構(gòu)。,2020/8/7,69,2.4.4 流程控制語句,while循環(huán) 與for循環(huán)以固定的次數(shù)求一組指令相反,while循環(huán)以不定的次數(shù)求一組語句的值。While循環(huán)的一般形式為: while expression commonds end 只要表達式expression里的所有元素為真,就執(zhí)行命令串commands。通常表達式求值給一個標(biāo)量值,單數(shù)組值也同樣有效。,2020/8/7,70,求,2020/8/7,71,【例】Fibonacci

35、數(shù)組的元素滿足Fibonacci 規(guī)則: , ;且 ?,F(xiàn)要求該數(shù)組中第一個大于10000的元素,a(1)=1; a(2)=1; i=2; while a(i)=10000 a(i+1)=a(i-1)+a(i); i=i+1; end; i a(i) i = 21 ans = 10946,2020/8/7,72,用for循環(huán)指令來尋求Fibonacc數(shù)組中第一個大于10000的元素。,n=100;a=ones(1,n); for i=3:n a(i)=a(i-1)+a(i-2); if a(i)=10000 a(i) break; end; End i 結(jié)果: ans = 10946 i = 2

36、1,2020/8/7,73,2.4.4 流程控制語句,Switch 語句 是一種均衡實現(xiàn)的多分支語句。 Switch expression Case 值1 commands1 Case 值2 commands2 Otherwise commandsN end,2020/8/7,74,學(xué)生的成績管理,用來演示switch結(jié)構(gòu)的應(yīng)用。,clear; for i=1:10 ai=89+i;bi=79+i;ci=69+i;di=59+i; end; c=d,c; Name= Jack,Marry,Peter, Rose, Tom; Mark=72,83,56,94,100; Rank=cell(1,5

37、); S=struct(Name,Name,Marks,Mark,Rank,Rank);,for i=1:5 switch S(i).Marks case 100 S(i).Rank=滿分; case a S(i).Rank= 優(yōu)秀; case b S(i).Rank= 良好; case c S(i).Rank= 及格; otherwise S(i).Rank=不及格; end end disp(學(xué)生姓名 , 得分 , 等級); disp( ) for i=1:5; disp(S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank

38、); end;,2020/8/7,76,2.5 基本繪圖方法,2.5.1 直角坐標(biāo)中的兩維曲線 plot(y) 以y的下標(biāo)作為x坐標(biāo),以y值作為y坐標(biāo)。 plot(x,y) 數(shù)組x和y的長度應(yīng)匹配。 每次繪制將清除以前的圖形。,2020/8/7,77,2.5.1 直角坐標(biāo)中的兩維曲線,圖形的標(biāo)注和圖例 1、title(text) %給圖形加上標(biāo)題 2、xlabel(text) %給X軸加上說明 3、ylabel(text) %給Y軸加上說明 4、zlabel(text) %給Z軸加上說明 5、text(x,y,string) %在圖形指定位置加上說明 6、gtext(string) %利用鼠標(biāo)

39、在圖形加上說明 7、legend(string1,string2,.) %給圖形加圖例 8、legend off %關(guān)閉圖例,如:作y=sin(t)的二維圖形 t=linspace(0,3*pi,200); y=sin(t); plot(t,y); title(y=sin(t); xlabel(t/s); ylabel(y=sin(t); text(3,0.4,y=sin(t); legend(y=sin(t); gtext(y=sin(t),2020/8/7,79,2.5.2 線型、點型和顏色,plot(x,y,r:) 后面是顏色和線型,2020/8/7,80,2.5.3 多條曲線的繪制,1

40、、plot(x1,y1,x2,y2); 2、plot(x1,y1,r,x2,y2); 3、plot(x1,y1) hold 是乒乓切換 hold on %圖形保持 plot(x2,y2,r) hold off %解除保持 4、plot(t,y1,y2,y3) %自動給顏色和線型。 5、plotyy(x1,y1,x2,y2) %可畫2個不同縱坐標(biāo)的圖,t=0:0.1:3*pi; y1=sin(t); y2=cos(t); plot(t,y1,r-.,t,y2,k); xlabel(t/s); ylabel(y1=sin(t), y2=cos(t); title(y1=sin(t), y2=cos

41、(t); text(3,0.4,y1=sin(t); text(2,0,y2=cos(t); legend(y1=sin(t),y2=cos(t);,2020/8/7,82,2.5.4 屏幕控制與其他2維繪圖,1. figure %打開圖形窗口 2. figure(n) %打開指定圖形窗口 3. close %關(guān)閉當(dāng)前圖形窗口 4. close all %關(guān)閉所有圖形窗口 5. close(n) %關(guān)閉指定圖形窗口 6. clf %清除窗口內(nèi)所有內(nèi)容,2020/8/7,83,2.5.4 屏幕控制與其他2維繪圖(續(xù)),subplot(m,n,p) %圖形分為m x n個子圖,并指定第p個。排號從

42、左到右,從上到下。 stem(t,y) %繪脈沖圖 stairs(t,y) %繪階梯圖 bar(t,y) %繪條形圖 errorbar(t,y) %繪誤差條形圖 hist(y) %繪直方圖 fill(t,y,r) %繪填充圖,如y=exp(-0.1t)*sin(t) t=0:0.3:4*pi; y=exp(-0.1*t).*sin(t); figure(3) plot(t,y,k*); figure(4) subplot(2,2,1);stem(t,y,k.);title(stem(t,y); subplot(2,2,2);stairs(t,y,b);title(stairs(t,y); su

43、bplot(2,2,3);bar(t,y,g);title(bar(t,y); subplot(2,2,4);fill(t,y,r);title(fill(t,y,r);,hist(y) t=0:0.1:4*pi; y=exp(-0.1*t).*sin(t); y1=5.*y.*sin(t); plotyy(t,y,t,y1);,2020/8/7,86,2.5.4 屏幕控制與其他2維繪圖(續(xù)),pause %暫停 grid on %增加網(wǎng)格 grid off %取消網(wǎng)格 grid %乒乓增加和取消網(wǎng)格 loglog %雙對數(shù)坐標(biāo)log10 similogx %半對數(shù)坐標(biāo),x軸半對數(shù) simil

44、ogy %半對數(shù)坐標(biāo),y軸半對數(shù) polar(theta,rho) %極坐標(biāo)圖,2020/8/7,87,2.5.4 屏幕控制與其他2維繪圖(續(xù)),23、虛數(shù)的繪圖- Z為虛數(shù) plot(Z) %實部為x坐標(biāo),虛部為y軸 plot(t,Z) %虛部丟失 axis(xmin,xmax,ymin,ymax) %定義坐標(biāo) axis square %兩軸坐標(biāo)長度相等 axis equal %兩軸坐標(biāo)刻度相同 axis tight %坐標(biāo)區(qū)域和圖形吻合 set(gca,xtick,-1,3,7,11) %在x軸指定處標(biāo)記刻度,clear,clf t=0:2*pi/99:2*pi; x=1.15*cos(t

45、);y=3.25*sin(t);%y為長軸,x為短軸 subplot(2,3,1);plot(x,y),axis normal,grid on, title(Normal and Grid on) subplot(2,3,2);plot(x,y),axis equal,grid on,title(Equal) subplot(2,3,3);plot(x,y),axis square,grid on,title(Square) subplot(2,3,4);plot(x,y),axis image,box off,title(Image and Box off) subplot(2,3,5);p

46、lot(x,y),axis image fill,box off title(Image and Fill) subplot(2,3,6);plot(x,y),axis tight,box off,title(Tight),2020/8/7,90,2.5.5 三維曲線和曲面,plot3(x,y,z,r); %畫三維曲線Plot3(x1,y1,z1,r,x2,y2,z2,b) t=0:0.02*pi:2*pi; x=sin(t); y=cos(t); z=cos(2*t); plot3(x,y,z,b-,x,y,z,bd); view(-82,58); box on legend(鏈,寶石);,

47、2020/8/7,91,2.5.5 三維曲線和曲面(續(xù)),2. mesh(z) %畫三維網(wǎng)格曲線,z為x,y的函數(shù) mesh(x,y,z) %常用畫三維網(wǎng)格曲線 mesh(x,y,z,r) %帶顏色的三維圖 x=-8:0.5:8; y=x; X=ones(size(y)*x; Y=y*ones(size(x); R=sqrt(X.*X+Y.*Y); Z=sin(R )./R; mesh(Z);,2020/8/7,92,2.5.5 三維曲線和曲面(續(xù)),3. surf(Z) %由多個小面組成表面視圖 surf(x,y,z) surf(x,y,z,r) x=-8:0.5:8; y=x; X=one

48、s(size(y)*x; Y=y*ones(size(x); R=abs(X)+abs(Y)+eps; Z=sin(R )./R; surf(Z);,2020/8/7,93,2.5.5 三維曲線和曲面(續(xù)),4. Meshgrid(x,y) %生成網(wǎng)格點坐標(biāo)函數(shù) x=-4:4; y=x; X,Y=meshgrid(x,y); Z=X.2+Y.2; surf(X,Y,Z); colormap(hot) %Black-red-yellow-white顏色 hold on stem3(X,Y,Z,bo);,2020/8/7,94,2.5.5 三維曲線和曲面(續(xù)),5. view(方位角,俯仰角) %

49、改變視角 6. shading flat %把曲面上的小格平滑掉 shading interp %更平滑 7. rotate3d %旋轉(zhuǎn) 8. contour3(Z) %畫等高線 9. meshc, surfc %帶等高線的三維作圖 10.colormap(hot) %hot,cool,gray,copper,pink,jet,prism 11. colorbar %畫彩色條 12. hidden off %透視被疊壓的圖形 hidden on %消隱被疊壓的圖形,2020/8/7,95,2.5.5 三維曲線和曲面(續(xù)),clear,clf X0,Y0,Z0=sphere(30); %產(chǎn)生單位

50、球面的三維坐標(biāo) X=2*X0;Y=2*Y0;Z=2*Z0;%產(chǎn)生半徑為2的球面的三維坐標(biāo) surf(X0,Y0,Z0);%畫單位球面 shading interp%采用插補明暗處理 hold on; mesh(X,Y,Z); colormap(hot); hold off %采用hot色圖 hidden off%產(chǎn)生透視效果 axis equal,axis off%不顯示坐標(biāo)軸,2020/8/7,96,2.5.5 三維曲線和曲面(續(xù)),13. Moviein , getframe, movie %動畫 axis equal M=moviein(16); for j=1:16 plot(fft(

51、eye(j+16); M(:,j)=getframe; end movie(M,30); 14. alpha(v) %透明度控制 v0,1,clear; clf; shg, x=3*pi*(-1:0.05:1); y=x; X,Y=meshgrid(x,y); R=sqrt(X.2+Y.2)+eps; Z=sin(R)./R; h=surf(X,Y,Z); colormap(jet); axis off n=12; mmm=moviein(n); %預(yù)設(shè)畫面矩陣。 for i=1:n rotate(h,0 0 1,25);%使圖形繞z軸旋轉(zhuǎn)25度/每次 mmm(:,i)=getframe;%捕

52、獲畫面。 end movie(mmm,5,10)%以每秒10幀速度,重復(fù)播放5次。,2020/8/7,98,2.6 M文件及程序調(diào)試,M文件可以分為兩種:一種是主程序,一種是子程序即函數(shù)文件。一個較復(fù)雜的程序往往是由這兩種程序混合組成。 2.6.1 主程序文件 主程序一般用clear,close all開頭 程序主體 程序存盤的文件名,2020/8/7,99,2.6.2 函數(shù)文件,把一個比較大的任務(wù)分解為多個比較小的任務(wù),它們之間通過調(diào)用實現(xiàn)參數(shù)傳遞,小任務(wù)可以是函數(shù)。 格式: function out1,out2,=函數(shù)名(in1,in2,) 1、函數(shù)調(diào)用 常見的函數(shù)調(diào)用形式為: out1,

53、out2,=function(in1,in2,) 一個函數(shù)可以嵌套,也可以調(diào)用其它的函數(shù),甚至調(diào)用自己(也就是遞歸調(diào)用)。 函數(shù)文件,函數(shù)名稱和文件名一般相同。,2020/8/7,100,2.6.2 函數(shù)文件,與腳本文件不同 ,函數(shù)文件猶如一個“黑箱”,把一些數(shù)據(jù)送進并經(jīng)加工處理,再把結(jié)果送出來。 MATLAB提供的函數(shù)指令大部分都是由函數(shù)文件定義的。 M函數(shù)文件的特點是: 從形式上看 ,與腳本文件不同 ,函數(shù)文件的笫一行總是以 “function”引導(dǎo)的“函數(shù)申明行”。,2020/8/7,101,2.6.2 函數(shù)文件,從運行上看 ,與腳本文件運行不同 ,每當(dāng)函數(shù)文件運行, MATLAB就會專

54、門為它開辟一個臨時工作空間,稱為函數(shù)工作空間( Function workspace) 。當(dāng)執(zhí)行文件最后一條指令時 ,就結(jié)束該函數(shù)文件的運行,同時該臨時函數(shù)空間及其所有的中間變量就立即被清除。 MATLAB允許使用比 “標(biāo)稱數(shù)目 ”較少的輸入輸出宗量,實現(xiàn)對函數(shù)的調(diào)用 。,2020/8/7,102,2.6.2 函數(shù)文件,由于從結(jié)構(gòu)上看 ,腳本文件只是比函數(shù)文件少一個“函數(shù)申明行”,所以只須描述清楚函數(shù)文件的結(jié)構(gòu) 。 典型 M函數(shù)文件的結(jié)構(gòu)如下 : 函數(shù)申明行:位于函數(shù)文件的首行,以關(guān)鍵字 functio 開頭,函數(shù)名以及函數(shù)的輸入輸出宗量都在這一行被定義。 笫一注釋行:緊隨函數(shù)申明行之后以%開

55、頭笫一注釋行。該行供lookfor關(guān)鍵詞查詢和 help在線幫助使用 。,2020/8/7,103,2.6.2 函數(shù)文件,在線幫助文本區(qū) :笫一注釋行及其之后的連續(xù)以%開頭的所有注釋行構(gòu)成整個在線幫助文本。 編寫和修改記錄:與在線幫助文本區(qū)相隔一個“空”行,也以%開頭,標(biāo)志編寫及修改該M文件的作者和日期等 。 函數(shù)體:為清晰起見,它與前面的注釋以“空”行相隔。,2020/8/7,104,2.6.2 函數(shù)文件,需要注意函數(shù)文件的放置位置,一般自己的函數(shù)文件放在當(dāng)前目錄;如果對一個專題有了足夠多的函數(shù),可以生成一個工具箱,放在一個固定的目錄下,并在MATLAB中加入這個目錄路徑即可。 使用函數(shù)可以

56、加快計算速度。MATLAB首次執(zhí)行一個函數(shù)時,它將打開的文件編譯為存儲器內(nèi)部形式,加速了執(zhí)行速度。普通的m文件不被編譯,在每次編譯時,文件將逐行解釋執(zhí)行。 函數(shù)的前一部分注釋為幫助行,在使用help命令是看到的為這些注釋行。,2020/8/7,105,2.6.2 函數(shù)文件,2、參數(shù)傳遞 MATLAB函數(shù)的輸入輸出數(shù)目都可以變化,通過這個特性,可以實現(xiàn)一些自定義的功能。函數(shù)的輸入輸出參數(shù)數(shù)目可以通過變量nargin和nargout獲得。函數(shù)調(diào)用中可以使用少于規(guī)定的輸入輸出參數(shù)數(shù)目,但是不能更多。 在MATLAB中,參數(shù)具有自己的專有工作空間。函數(shù)中的參數(shù)和命令行參數(shù)不在一個空間中,它們的唯一聯(lián)系

57、為函數(shù)的輸入輸出變量。輸入?yún)?shù)在函數(shù)中是可讀的,但任何改動不會傳遞回上一級空間。 使用global命令可以將變量說明為全局的,則在函數(shù)、命令行等都可以共享這些變量。在實際應(yīng)用中,應(yīng)當(dāng)盡量避免使用全局變量。,2020/8/7,106,2.6.2 函數(shù)文件,3、函數(shù)注意 函數(shù)可以按少于函數(shù)M 文件中所規(guī)定的輸入和輸出變量進行調(diào)用,但不能用多于函數(shù)M 文件中所規(guī)定的輸入和輸出變量數(shù)目。如果輸入和輸出變量數(shù)目多于函數(shù)M 文件中function 語句一開始所規(guī)定的數(shù)目,則調(diào)用時自動返回一個錯誤。 當(dāng)調(diào)用一個函數(shù)時,所用的輸入和輸出的參量的數(shù)目,在函數(shù)內(nèi)是規(guī)定好的。函數(shù)工作空間變量nargin 包含輸入?yún)?/p>

58、量個數(shù);函數(shù)工作空間變量nargout 包含輸出參量個數(shù)。事實上,這些變量常用來設(shè)置缺省輸入變量,并決定用戶所希望的輸出變量。在M 文件函數(shù)里,變量nargout 可用來檢驗輸出參量的個數(shù),并按要求修正輸出變量的創(chuàng)建。,2020/8/7,107,2.6.2 函數(shù)文件,函數(shù)有它們自己的專用工作空間,它與MATLAB 的工作空間分開。函數(shù)內(nèi)變量與MATLAB 工作空間之間唯一的聯(lián)系是函數(shù)的輸入和輸出變量。如果函數(shù)任一輸入變量值發(fā)生變化,其變化僅在函數(shù)內(nèi)出現(xiàn),不影響MATLAB 工作空間的變量。函數(shù)內(nèi)所創(chuàng)建的變量只駐留在函數(shù)的工作空間,而且只在函數(shù)執(zhí)行期間臨時存在,以后就消失。因此,從一個調(diào)用到下一個調(diào)用,在函數(shù)工作空間變量存儲信息是不可能的。,2020/8/7,108,2.6.2 函數(shù)文件,當(dāng)調(diào)用一個函數(shù)時,輸入變量不會拷貝到函數(shù)的工作空間,但使它們的值在函數(shù)內(nèi)可讀。然而,改變輸入變量內(nèi)的任何值,那么數(shù)組就拷貝到函數(shù)工作空間。進而,按缺省,如果輸出變量與輸入變量相同,例如,函數(shù)x=fun(x, y, z) 中的x ,那么就

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論