MATLAB及在电子信息课程中的应用.ppt_第1页
MATLAB及在电子信息课程中的应用.ppt_第2页
MATLAB及在电子信息课程中的应用.ppt_第3页
MATLAB及在电子信息课程中的应用.ppt_第4页
MATLAB及在电子信息课程中的应用.ppt_第5页
已阅读5页,还剩302页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2020/8/4,1,MATLAB及在电子信息课程中的应用,朱军 ,2020/8/4,2,第一篇 语言篇,第1章 MATLAB 语言概述 第2章 基本语法 第3章 MATLAB 的开发环境和工具 第4章 MATLAB 的其他函数库,2020/8/4,3,第二篇 应用篇,第5章 MATLAB在电路中的应用 第6章 MATLAB在信号与系统中的应用 第7章 MATLAB在数字信号处理中应用 第8章 MATLAB在自动控制原理中应用 第9章 MATLAB工具箱简介 附录A、B、C、D,2020/8/4,4,第1章 MATLAB语言概述,1.1 MATLAB语言的发展 1.2 MATLAB语言的特点

2、1.3 MATLAB的工作环境 1.3.1 命令窗 1.3.2 图形窗 1.3.3 文本编辑窗 1.4 演示程序 1.5 网络资源,2020/8/4,5,1.1 MATLAB语言的发展,1.1.1 MATLAB 概述 MATLAB是集数值计算、符号运算及图形处理等强大功能于一体的科学计算语言,是一种交互式的以矩阵为基础的系统计算平台,它用于科学和工程的计算与可视化。它的优点在于快速开发计算方法,而不在于计算速度。 MATLAB已成为一门高校必修的课程,也是最为普遍的计算工具之一。,2020/8/4,6,1.1 MATLAB语言的发展(续),1.1.2 Matlab的发展 MATLAB名字由MA

3、Trix和 LABoratory 两词的前三个字母组合而成。那是20世纪七十年代,时任美国新墨西哥大学计算机科学系主任的Cleve Moler出于减轻学生编程负担的动机,为学生设计了一组调用LINPACK和EISPACK矩阵软件工具包库程序的的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MATLAB。 1984年由Little、Moler、Steve Bangert合作成立MathWorks公司,并把MATLAB正式推向市场。从这时起,MATLAB的内核采用C语言编写,而且除原有的数值计算能力外,还新增了数据图视功能。,2020/8/4,7,1997年仲春,MATLAB5.0版问世

4、,紧接着是5.1、5.2,以及和1999年春的5.3版。现今的MATLAB拥有更丰富的数据类型和结构、更友善的面向对象、更加快速精良的图形可视、更广博的数学和数据分析资源、更多的应用开发工具。 2000年末又推出6.0版本。无论在界面的设计上还是在内容上较以前版本都有很大的进展。 2004年又推出了7.0版本,2020/8/4,8,1.1 MATLAB语言的发展(续),1.1.3 Matlab的版本演化 Matlab 1.0 Pc matlab-matlab 386 Matlab3.5+simulink Matlab 4.0:simlink内嵌(1992) Matlab 5.0 :全面的面向对

5、象 Matlab 5.15.3 (1999) Matlab 6.0 (2000) Matlab 6.5:购并了MATRIXx Matlab 7.0: (2004),2020/8/4,9,1.2 MATLAB语言的特点,友好的工作平台和编程环境 简单易用的程序语言 强大的科学计算及数据处理能力 出色的图形处理功能 应用广泛的模块集和工具箱 实用的程序接口和发布平台 模块化的设计和系统级的仿真,2020/8/4,10,1.3 MATLAB的工作环境,1.3.1 命令窗(Command Window) 单行命令执行方式 执行结果直接显示 1.3.2 图形窗(Figure Window) 用图形方式表

6、示计算结果 1.3.3 文本编辑窗(File Editor) 多行命令组成语言组,可以文件方式存盘,下面就具体看一下MATLAB 的工作环境演示。,2020/8/4,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/4,13,部分命令的演示,例1.求 的算术运算结果

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. 指令的续行输入 S=11/2+1/31/4+1/51/6+1/7 -1/8 S = 0.6345,例5. 复数 表达,及计算 。 (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. 复数矩阵的生成及运算 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 . 求上例复数矩阵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. 画出衰减振荡曲线 及其它的包络线 。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/4,22,1.5 网络资源,USENET新闻组 MATLAB的新闻组是comp.soft-sys.MATLAB。浏览器指向 网络上的工具箱 ,2020/8/4,23,1.5 网络资源(续),BBS 哈尔滨工业大学bbs: telnet:/ 上海交通大学bbs: telnet:/ 清华大学bbs mathtools www服务 Matlab 大观园: http:/www.matlab-,2020/8/4,24,第2章 基本语法,2.1 变量及其赋值 2.2 矩阵的初等运算 2.3 元素群运算 2.4 逻辑判断及流程控制 2.5 基

14、本绘图方法 2.6 M文件及程序调试,2020/8/4,25,2.1 变量及其赋值,2.1.1 标识符与数 标识符是标识变量名、常量名、函数名、文件名的字符串的总称。 1、表示符第1个字符必须是字母。 2、长度不超过31个。 3、区分大小写。 4、变量中不能含有标点符号。 5、变量可直接参与计算。 6、变量一般无需事先定义,2020/8/4,26,2.1.1 标识符与数(续),7、特殊变量,2020/8/4,27,2.1.1 标识符与数(续),8、数值显示格式 MATLAB中所有的量为双字长浮点数,显示按下面显示规则: 在缺省情况下,当结果为整数,作为整数显示;当结果为实数,以小数后4位的精度

15、近似显示。 如果结果中的有效数字超出了这一范围,以科学计数法显示结果。 format命令改变显示格式,常用的的格式有 long (16位) bank(2个十进制位) hex(十六进制) short(缺省) short e(5位加指数) +(符号) long e(16位加指数) rat(有理数近似),2020/8/4,28,2.1.2 矩阵及其元素的赋值,矩阵获取格式:变量=表达式(或数) 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; 每行命令后面的分号;表示结果不显示。,2020/8/4,29,2.1.2 矩阵及其元素的赋值(续),4、元素可用表达式表示 D=-1.3 sqrt(3) (1+2+3)/5+1 5、用语句生成 行向量 E=from:step:to 即E=开始数:步长:结束数 E=1:2:10 得E=1 3 5 7 9 6、矩阵连接 B=a b V=a;b,2020/8/4,30,2.1.2 矩阵及其元素的赋值(续),7、用函数创建 如: 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/4,31,2.1.2 矩阵及其元素的赋值(续),8、rand(m,n) %产生均匀分布随机数(0,1) 9、rand(state,0) %把均匀分布伪随机发生器置为0状态 10、randn(m,n) %产生正态分布随机数 11、magic(m) %产生魔方数组(对高维不适用) %即每行、每列及对角元素之和为(n3+n)/2 12、linspace(a,b,n) %在a和b之间均匀产生n个点的值 如:f=linspace(0,1,5) 则

18、f=0 0.25 0.5 0.75 1.0 13、logspace(a,b,n) %在a和b之间对数分布产生n个点的值 如:f=logspace(0,1,5) 则 f=1.0000 1.7783 3.1623 5.6234 10.0000,2020/8/4,32,2.1.2 矩阵及其元素的赋值(续),矩阵中的元素(用圆括号中数字来注明) 1. A( i, j ) 表示第i 行,第j列元素。 2. A( i ) 表示第i个元素。 矩阵中元素的排序如右所示 3. A( i, j)=常量,表示给A中元素赋值。 当下标超出原矩阵的尺寸,则自动扩展行列并补零。,2020/8/4,33,2.1.2 矩阵及

19、其元素的赋值(续),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个元素(列优先)矩阵的序号编址:按列计数。 8. A(2)= 表示去除矩阵中元素。此时矩阵变为行矩阵。 9. A( : ) 指A阵中所有元素组成列向量。,2020/8/4,34,2.1.3 复数,1、复数的虚部部分用i 或j表示。 如:2+3i ,3-4j 2、复数可直接计算。 如:z=2+3i;3-4j 或 f=z+2+j;3; 3、复数的实部和

20、虚部可分别赋值。但 i和j需先清除。 如:clear i j f=1,3;5,7+2,4;6,8*j,2020/8/4,35,2.1.3 复数,4、B=Z 表示共轭转置。 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/4,36,2.1.3 复数,6、B=conj(Z)表示转置。 7、B=Z. 表示非共轭复数转置。 如: Z=1+2i,3-4j 则: B=conj(Z) 有 B= 1+2i 3-4j B= Z. 有 B= 1+2i 3-4j,2020/8/4,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/4,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之间随机数均匀分布 randn(state,

22、0); %把随机数发生器置0 E=randn(m,n) 均值为0的,单位方差正态分布随机矩阵 F= magic(m) 魔方矩阵,2020/8/4,39,G= linspace(a,b,n) 线性分隔,a,b之间均匀产生n个数 H= logspace(a,b,n) 对数分隔, a,b之间产生n个数 K=diag(A); 取A中对角线元素得到列向量。 P=diag(diag(A) 产生对角阵 a=1 2 3 4; b=diag(a) 产生对角阵 如 A=1 2 3;4 5 6;7 8 9 B=diag(A) 则: B=1;5;9;,2020/8/4,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的行列大小中最大的数,2020/8/4,41,2.2.1 矩阵的加减乘除,点乘、点除 6、C=A.*B 对应元素间相乘。,2020/8/4,42,7、C=A./B 对应元素间相除。 8、C=A.B,2020/8/4,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/4,44,2.2.3 矩阵的乘方和幂次函数,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/4,46,2.2.4 矩阵结构形式的提取与变换,B=fliplr(A) %将A矩阵左右翻转 B=flipud(A) %将A矩阵上下翻转 B=reshape(A,m,n) %将A阵重组为mxn矩阵 B=rot90(A) %将A矩阵逆时针翻转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/4,48,2.3 元素群运算,2.3.

26、1 数组及其赋值 1、t=初值:步长:终值; 如t=0:0.1:1 tt=10:-1:1 2、t=linspace(初值,终值,点数) 如:tr=linspace(0, 2*pi, 9) 3、t=logspace(初值,终值,点数) 如:tp=logspace(0, 1, 11),2020/8/4,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/4,50,2.3.3 元素群的函数,等命令可以直接MATLAB中exp、sprt、sin、cos使用在矩阵上,这种运算只是定义在矩阵的单个元素上,即分别对矩阵的每个元素进行运算。MATLAB中也提供了基本的三角函数。 注意其中的取整,2020/8/4,51,2.3.3 元素群的函数,2020/8/4,52,2.4 逻辑判断及流程控制,2.4.1 关系操作符 MATLAB常用的关系操作符有:(大于)、=(大于或等于)、 = =(等于)、 =(不等于)。 MATLAB的关系操作符可以用来比较两个大小相同的数组,或者比较一个数组和一个标量。在与标量比较时,结果和数组大小一样。 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/4,53,2.4.1 关系操作符,矩阵查找和排序 子矩阵的查找使用find命令完成,它返回关系表达式为真的下标。例如: a=10:20; find(a15) ans = 7 8 9 10 11 矩阵的排序使用sort函数,它将矩阵按照升序排列。,2020/8/4,54,2.4.2 逻辑运算,逻辑操作符定义了一种与或非的关系表达式。MATLAB的逻辑操作符有%利用find获得符合关系等式条件的元素双下标 disp(ii),disp(jj),【例】关系运算运用之一:求近似极限,修补图形缺口。

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/4,59,【例】逻辑操作应用之一:逐段解析函数的计算和表现。本例演示削顶整流正弦半波的计

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/4,61,【例】写出生成下图所示波形的MATLAB脚本文件M文件。图中虚线为正弦波,要求它的负半波被置零,且在 处被削顶。,t=linspace(0,3*pi,500); y=sin(t); z1=(

31、t2*pi).*y; w=(tpi/3,2020/8/4,63,2.4.4 流程控制语句,脚本 对于简单问题,使用直接输入命令简单有效;对稍复杂和多次重复的应用,直接输入命令比较麻烦。MATLAB提供了逻辑解决方案,它允许用户把多个命令放在一个简单的文本文件中,如同在MATLAB中键入命令一般,这种文件称为脚本文件,由于脚本文件以m为扩展名,它常称为M文件。脚本文件为文本形式的,对跨平台处理十分有利。 使用脚本文件,可以把命令保存在磁盘上,便于以后的访问;同时对使用大的数组也带来的方便;增加注释可以为脚本中的命令作文挡以免以后忘记。,2020/8/4,64,2.4.4 流程控制语句,为了便于应

32、用,MATLAB提供了一些流程控制的命令。这些命令对脚本编写带来了一些方便,但是需要注意的是,尽量不要使用这些流程控制命令,尤其是循环控制命令。 If 语句 很多情况下,命令的序列必须根据关系的检验有条件的执行,它由if-else-end结构提供。它的结构如下: if expression1 commands1 elseif expression2 commands2 elseif else commands end,2020/8/4,65,2.4.4 流程控制语句,在执行过程中,MATLAB依次检查各个表达式,只执行第一个表达式为真的命令串,接下来的关系表达式不检验,跳过其余的if-else

33、-end结构,而且,最后的else命令可有可无。,2020/8/4,66,求,2020/8/4,67,2.4.4 流程控制语句,for循环 for循环允许一组命令以固定的次数重复,它的一般形式是 for x=array command end for 和end之间的命令串按数组array的每一列执行一次,直到n次后终止。 如:for j=1:2:10 y=j+j.2; end,2020/8/4,68,2.4.4 流程控制语句,for循环不能使用内部重新赋值循环变量而终止; for循环内部接受任何有效的MATLAB数组; for循环可以嵌套; 只要有矩阵形式可以解决的问题,不要使用for循环。使

34、用for循环的算法执行很慢,一个好的MATLAB算法不应当出现循环语句。Tic/toc 循环可以使用break跳出,但只跳出所在的循环,不跳出整个嵌套结构。,2020/8/4,69,2.4.4 流程控制语句,while循环 与for循环以固定的次数求一组指令相反,while循环以不定的次数求一组语句的值。While循环的一般形式为: while expression commonds end 只要表达式expression里的所有元素为真,就执行命令串commands。通常表达式求值给一个标量值,单数组值也同样有效。,2020/8/4,70,求,2020/8/4,71,【例】Fibonacci

35、数组的元素满足Fibonacci 规则: , ;且 。现要求该数组中第一个大于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/4,72,用for循环指令来寻求Fibonacc数组中第一个大于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 结果: ans = 10946 i = 2

36、1,2020/8/4,73,2.4.4 流程控制语句,Switch 语句 是一种均衡实现的多分支语句。 Switch expression Case 值1 commands1 Case 值2 commands2 Otherwise commandsN end,2020/8/4,74,学生的成绩管理,用来演示switch结构的应用。,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= 优秀; case b S(i).Rank= 良好; case c S(i).Rank= 及格; otherwise S(i).Rank=不及格; end end disp(学生姓名 , 得分 , 等级); disp( ) for i=1:5; disp(S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank

38、); end;,2020/8/4,76,2.5 基本绘图方法,2.5.1 直角坐标中的两维曲线 plot(y) 以y的下标作为x坐标,以y值作为y坐标。 plot(x,y) 数组x和y的长度应匹配。 每次绘制将清除以前的图形。,2020/8/4,77,2.5.1 直角坐标中的两维曲线,图形的标注和图例 1、title(text) %给图形加上标题 2、xlabel(text) %给X轴加上说明 3、ylabel(text) %给Y轴加上说明 4、zlabel(text) %给Z轴加上说明 5、text(x,y,string) %在图形指定位置加上说明 6、gtext(string) %利用鼠标

39、在图形加上说明 7、legend(string1,string2,.) %给图形加图例 8、legend off %关闭图例,如:作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/4,79,2.5.2 线型、点型和颜色,plot(x,y,r:) 后面是颜色和线型,2020/8/4,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个不同纵坐标的图,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/4,82,2.5.4 屏幕控制与其他2维绘图,1. figure %打开图形窗口 2. figure(n) %打开指定图形窗口 3. close %关闭当前图形窗口 4. close all %关闭所有图形窗口 5. close(n) %关闭指定图形窗口 6. clf %清除窗口内所有内容,2020/8/4,83,2.5.4 屏幕控制与其他2维绘图(续),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/4,86,2.5.4 屏幕控制与其他2维绘图(续),pause %暂停 grid on %增加网格 grid off %取消网格 grid %乒乓增加和取消网格 loglog %双对数坐标log10 similogx %半对数坐标,x轴半对数 simil

44、ogy %半对数坐标,y轴半对数 polar(theta,rho) %极坐标图,2020/8/4,87,2.5.4 屏幕控制与其他2维绘图(续),23、虚数的绘图- Z为虚数 plot(Z) %实部为x坐标,虚部为y轴 plot(t,Z) %虚部丢失 axis(xmin,xmax,ymin,ymax) %定义坐标 axis square %两轴坐标长度相等 axis equal %两轴坐标刻度相同 axis tight %坐标区域和图形吻合 set(gca,xtick,-1,3,7,11) %在x轴指定处标记刻度,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/4,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/4,91,2.5.5 三维曲线和曲面(续),2. mesh(z) %画三维网格曲线,z为x,y的函数 mesh(x,y,z) %常用画三维网格曲线 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/4,92,2.5.5 三维曲线和曲面(续),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/4,93,2.5.5 三维曲线和曲面(续),4. Meshgrid(x,y) %生成网格点坐标函数 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/4,94,2.5.5 三维曲线和曲面(续),5. view(方位角,俯仰角) %

49、改变视角 6. shading flat %把曲面上的小格平滑掉 shading interp %更平滑 7. rotate3d %旋转 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/4,95,2.5.5 三维曲线和曲面(续),clear,clf X0,Y0,Z0=sphere(30); %产生单位

50、球面的三维坐标 X=2*X0;Y=2*Y0;Z=2*Z0;%产生半径为2的球面的三维坐标 surf(X0,Y0,Z0);%画单位球面 shading interp%采用插补明暗处理 hold on; mesh(X,Y,Z); colormap(hot); hold off %采用hot色图 hidden off%产生透视效果 axis equal,axis off%不显示坐标轴,2020/8/4,96,2.5.5 三维曲线和曲面(续),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); %预设画面矩阵。 for i=1:n rotate(h,0 0 1,25);%使图形绕z轴旋转25度/每次 mmm(:,i)=getframe;%捕

52、获画面。 end movie(mmm,5,10)%以每秒10帧速度,重复播放5次。,2020/8/4,98,2.6 M文件及程序调试,M文件可以分为两种:一种是主程序,一种是子程序即函数文件。一个较复杂的程序往往是由这两种程序混合组成。 2.6.1 主程序文件 主程序一般用clear,close all开头 程序主体 程序存盘的文件名,2020/8/4,99,2.6.2 函数文件,把一个比较大的任务分解为多个比较小的任务,它们之间通过调用实现参数传递,小任务可以是函数。 格式: function out1,out2,=函数名(in1,in2,) 1、函数调用 常见的函数调用形式为: out1,

53、out2,=function(in1,in2,) 一个函数可以嵌套,也可以调用其它的函数,甚至调用自己(也就是递归调用)。 函数文件,函数名称和文件名一般相同。,2020/8/4,100,2.6.2 函数文件,与脚本文件不同 ,函数文件犹如一个“黑箱”,把一些数据送进并经加工处理,再把结果送出来。 MATLAB提供的函数指令大部分都是由函数文件定义的。 M函数文件的特点是: 从形式上看 ,与脚本文件不同 ,函数文件的笫一行总是以 “function”引导的“函数申明行”。,2020/8/4,101,2.6.2 函数文件,从运行上看 ,与脚本文件运行不同 ,每当函数文件运行, MATLAB就会专

54、门为它开辟一个临时工作空间,称为函数工作空间( Function workspace) 。当执行文件最后一条指令时 ,就结束该函数文件的运行,同时该临时函数空间及其所有的中间变量就立即被清除。 MATLAB允许使用比 “标称数目 ”较少的输入输出宗量,实现对函数的调用 。,2020/8/4,102,2.6.2 函数文件,由于从结构上看 ,脚本文件只是比函数文件少一个“函数申明行”,所以只须描述清楚函数文件的结构 。 典型 M函数文件的结构如下 : 函数申明行:位于函数文件的首行,以关键字 functio 开头,函数名以及函数的输入输出宗量都在这一行被定义。 笫一注释行:紧随函数申明行之后以%开

55、头笫一注释行。该行供lookfor关键词查询和 help在线帮助使用 。,2020/8/4,103,2.6.2 函数文件,在线帮助文本区 :笫一注释行及其之后的连续以%开头的所有注释行构成整个在线帮助文本。 编写和修改记录:与在线帮助文本区相隔一个“空”行,也以%开头,标志编写及修改该M文件的作者和日期等 。 函数体:为清晰起见,它与前面的注释以“空”行相隔。,2020/8/4,104,2.6.2 函数文件,需要注意函数文件的放置位置,一般自己的函数文件放在当前目录;如果对一个专题有了足够多的函数,可以生成一个工具箱,放在一个固定的目录下,并在MATLAB中加入这个目录路径即可。 使用函数可以

56、加快计算速度。MATLAB首次执行一个函数时,它将打开的文件编译为存储器内部形式,加速了执行速度。普通的m文件不被编译,在每次编译时,文件将逐行解释执行。 函数的前一部分注释为帮助行,在使用help命令是看到的为这些注释行。,2020/8/4,105,2.6.2 函数文件,2、参数传递 MATLAB函数的输入输出数目都可以变化,通过这个特性,可以实现一些自定义的功能。函数的输入输出参数数目可以通过变量nargin和nargout获得。函数调用中可以使用少于规定的输入输出参数数目,但是不能更多。 在MATLAB中,参数具有自己的专有工作空间。函数中的参数和命令行参数不在一个空间中,它们的唯一联系

57、为函数的输入输出变量。输入参数在函数中是可读的,但任何改动不会传递回上一级空间。 使用global命令可以将变量说明为全局的,则在函数、命令行等都可以共享这些变量。在实际应用中,应当尽量避免使用全局变量。,2020/8/4,106,2.6.2 函数文件,3、函数注意 函数可以按少于函数M 文件中所规定的输入和输出变量进行调用,但不能用多于函数M 文件中所规定的输入和输出变量数目。如果输入和输出变量数目多于函数M 文件中function 语句一开始所规定的数目,则调用时自动返回一个错误。 当调用一个函数时,所用的输入和输出的参量的数目,在函数内是规定好的。函数工作空间变量nargin 包含输入参

58、量个数;函数工作空间变量nargout 包含输出参量个数。事实上,这些变量常用来设置缺省输入变量,并决定用户所希望的输出变量。在M 文件函数里,变量nargout 可用来检验输出参量的个数,并按要求修正输出变量的创建。,2020/8/4,107,2.6.2 函数文件,函数有它们自己的专用工作空间,它与MATLAB 的工作空间分开。函数内变量与MATLAB 工作空间之间唯一的联系是函数的输入和输出变量。如果函数任一输入变量值发生变化,其变化仅在函数内出现,不影响MATLAB 工作空间的变量。函数内所创建的变量只驻留在函数的工作空间,而且只在函数执行期间临时存在,以后就消失。因此,从一个调用到下一个调用,在函数工作空间变量存储信息是不可能的。,2020/8/4,108,2.6.2 函数文件,当调用一个函数时,输入变量不会拷贝到函数的工作空间,但使它们的值在函数内可读。然而,改变输入变量内的任何值,那么数组就拷贝到函数工作空间。进而,按缺省,如果输出变量与输入变量相同,例如,函数x=fun(x, y, z) 中的x ,那么就

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论