版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MATLAB及在电子信息课程中的应用2022/12/221MATLAB及在电子信息课程中的应用2022/12/181第一篇语言篇第1章MATLAB语言概述第2章基本语法第3章MATLAB的开发环境和工具第4章MATLAB的其他函数库2022/12/222第一篇语言篇第1章MATLAB语言概述2022第二篇应用篇第5章MATLAB在电路中的应用第6章MATLAB在信号与系统中的应用第7章MATLAB在数字信号处理中应用第8章MATLAB在自动控制原理中应用第9章MATLAB工具箱简介附录A、B、C、D2022/12/223第二篇应用篇第5章MATLAB在电路中的应用20第1章MATLAB语言概述1.1MATLAB语言的发展1.2MATLAB语言的特点1.3MATLAB的工作环境1.3.1命令窗1.3.2图形窗1.3.3文本编辑窗1.4演示程序1.5网络资源2022/12/224第1章MATLAB语言概述1.1MATLAB语言的发1.1MATLAB语言的发展1.1.1MATLAB概述
MATLAB是集数值计算、符号运算及图形处理等强大功能于一体的科学计算语言,是一种交互式的以矩阵为基础的系统计算平台,它用于科学和工程的计算与可视化。它的优点在于快速开发计算方法,而不在于计算速度。
MATLAB已成为一门高校必修的课程,也是最为普遍的计算工具之一。2022/12/2251.1MATLAB语言的发展1.1.1MATLAB1.1MATLAB语言的发展(续)1.1.2Matlab的发展
MATLAB名字由MATrix和LABoratory两词的前三个字母组合而成。那是20世纪七十年代,时任美国新墨西哥大学计算机科学系主任的CleveMoler出于减轻学生编程负担的动机,为学生设计了一组调用LINPACK和EISPACK矩阵软件工具包库程序的的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MATLAB。1984年由Little、Moler、SteveBangert合作成立MathWorks公司,并把MATLAB正式推向市场。从这时起,MATLAB的内核采用C语言编写,而且除原有的数值计算能力外,还新增了数据图视功能。2022/12/2261.1MATLAB语言的发展(续)1.1.2Mat1997年仲春,MATLAB5.0版问世,紧接着是5.1、5.2,以及和1999年春的5.3版。现今的MATLAB拥有更丰富的数据类型和结构、更友善的面向对象、更加快速精良的图形可视、更广博的数学和数据分析资源、更多的应用开发工具。2000年末又推出6.0版本。无论在界面的设计上还是在内容上较以前版本都有很大的进展。2004年又推出了7.0版本,2022/12/2271997年仲春,MATLAB5.0版问世,紧接着是5.1、51.1MATLAB语言的发展(续)1.1.3Matlab的版本演化Matlab1.0Pcmatlab->matlab386Matlab3.5+simulinkMatlab4.0:simlink内嵌(1992)Matlab5.0:全面的面向对象Matlab5.1~5.3(1999)Matlab6.0(2000)Matlab6.5:购并了MATRIXxMatlab7.0:(2004)2022/12/2281.1MATLAB语言的发展(续)1.1.3Mat1.2MATLAB语言的特点友好的工作平台和编程环境简单易用的程序语言强大的科学计算及数据处理能力出色的图形处理功能应用广泛的模块集和工具箱实用的程序接口和发布平台模块化的设计和系统级的仿真2022/12/2291.2MATLAB语言的特点友好的工作平台和编程环境201.3MATLAB的工作环境1.3.1命令窗(CommandWindow)
单行命令执行方式执行结果直接显示1.3.2图形窗(FigureWindow)
用图形方式表示计算结果1.3.3文本编辑窗(FileEditor)多行命令组成语言组,可以文件方式存盘
下面就具体看一下MATLAB的工作环境演示。2022/12/22101.3MATLAB的工作环境1.3.1命令窗(Com1.4演示程序在MATLAB的命令窗中键入
demo或demos2022/12/22111.4演示程序在MATLAB的命令窗中键入2022/12%pend.mplot([-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,'color','r','linestyle','.','erasemode','xor','markersize',40);body=line([0;x0],[0,y0],'color','b','linestyle','-','erasemode','xor');t=0;dt=0.01;whilet<=50t=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;end2022/12/2212%pend.m2022/12/1812部分命令的演示例1.求的算术运算结果。(12+2*(7-4))/3^2
ans=2
例2.简单矩阵的输入步骤。A=[1,2,3;4,5,6;7,8,9]
A=1234567892022/12/2213部分命令的演示例1.求例3.矩阵的分行输入。A=[1,2,3 4,5,6 7,8,9]A=123456789
例4.指令的续行输入S=1–1/2+1/3–1/4+1/5–1/6+1/7…-1/8
S=0.63452022/12/2214例3.矩阵的分行输入。2022/12/1814例5.复数表达,及计算。(1)z1=3+4i
z1=3.0000+4.0000i(2)z2=1+2*i z3=2*exp(i*pi/6) z=z1*z2/z3z2=1.0000+2.0000iz3=1.7321+1.0000iz=0.3349+5.5801i
2022/12/2215例5.复数例6.复数矩阵的生成及运算A=[1,3;2,4]-[5,8;6,9]*iB=[1+5i,2+6i;3+8*i,4+9*i]C=A*B
A=1.0000-5.0000i3.0000-8.0000i2.0000-6.0000i4.0000-9.0000iB=1.0000+5.0000i2.0000+6.0000i3.0000+8.0000i4.0000+9.0000iC=1.0e+002*0.99001.1600-0.0900i1.1600+0.0900i1.37002022/12/2216例6.复数矩阵的生成及运算2022/12/1816例7.求上例复数矩阵C的实部、虚部、模和相角。C_real=real(C)C_imag=imag(C)C_magnitude=abs(C)C_phase=angle(C)*180/pi
C_real=99116116137C_imag=0-990C_magnitude=99.0000116.3486116.3486137.0000C_phase=0-4.43654.436502022/12/2217例7.求上例复数矩阵C的实部、虚部、模和相角。2022/例8.用MATLAB计算能得到–2吗?(1)a=-8;r=a^(1/3)
r=1.0000+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.0000i1.0000-1.7321i2022/12/2218例8.用MATLAB计算能得到(3)图形表示t=0:pi/20:2*pi;x=R*sin(t);y=R*cos(t);plot(x,y,'b:'),gridholdonplot(rrr(1),'.','MarkerSize',30,'Color','r')plot(rrr([2,3]),'o','MarkerSize',15,'Color','b')axis([-3,3,-3,3]),axissquareholdoff
2022/12/2219(3)图形表示2022/12/1819例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')2022/12/2220例9.画出衰减振荡曲线及其它的包络线例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)
xlabel('x'),ylabel('y'),zlabel('z')
2022/12/2221例10.画出所表示的三维曲面。的1.5网络资源USENET新闻组MATLAB的新闻组是comp.soft-sys.MATLAB。浏览器指向
网络上的工具箱/
/matlabcentral/fileexchange/loadCategory.do2022/12/22221.5网络资源USENET新闻组2022/12/18221.5网络资源(续)BBS哈尔滨工业大学bbs:telnet://上海交通大学bbs:telnet://清华大学bbsmathtoolswww服务Matlab大观园:
2022/12/22231.5网络资源(续)BBS2022/12/1823第2章基本语法2.1变量及其赋值2.2矩阵的初等运算2.3元素群运算2.4逻辑判断及流程控制2.5基本绘图方法2.6M文件及程序调试2022/12/2224第2章基本语法2.1变量及其赋值2022/12/182.1变量及其赋值2.1.1标识符与数标识符是标识变量名、常量名、函数名、文件名的字符串的总称。1、表示符第1个字符必须是字母。2、长度不超过31个。3、区分大小写。4、变量中不能含有标点符号。5、变量可直接参与计算。6、变量一般无需事先定义2022/12/22252.1变量及其赋值2.1.1标识符与数2022/12.1.1标识符与数(续)7、特殊变量2022/12/22262.1.1标识符与数(续)7、特殊变量2022/12/12.1.1标识符与数(续)8、数值显示格式MATLAB中所有的量为双字长浮点数,显示按下面显示规则:在缺省情况下,当结果为整数,作为整数显示;当结果为实数,以小数后4位的精度近似显示。
如果结果中的有效数字超出了这一范围,以科学计数法显示结果。format命令改变显示格式,常用的的格式有long(16位)bank(2个十进制位)hex(十六进制)short(缺省)shorte(5位加指数)+(符号)longe(16位加指数)rat(有理数近似)2022/12/22272.1.1标识符与数(续)8、数值显示格式2022/122.1.2矩阵及其元素的赋值矩阵获取格式:变量=表达式(或数)1、直接输入:A=[123;456;7,8,9]*矩阵用中括号括起。*元素间用空格隔开,或用逗号隔开。*每行用分号;号表示回车。2、行向量B=[12345]3、列向量C=[1;2;3;4;5];
每行命令后面的分号;表示结果不显示。2022/12/22282.1.2矩阵及其元素的赋值矩阵获取格式:变量=表达式(2.1.2矩阵及其元素的赋值(续)4、元素可用表达式表示
D=[-1.3sqrt(3)(1+2+3)/5+1]5、用语句生成行向量
E=from:step:to
即E=开始数:步长:结束数
E=1:2:10得E=[13579]6、矩阵连接B=[ab]V=[a;b]2022/12/22292.1.2矩阵及其元素的赋值(续)4、元素可用表达式表示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);ones(3,3);ones(2,3);ones(3,2);eye(3);eye(3,3);eye(3,4);eye(4,3);2022/12/22302.1.2矩阵及其元素的赋值(续)7、用函数创建202.1.2矩阵及其元素的赋值(续)8、rand(m,n)%产生均匀分布随机数(0,1)9、rand(‘state’,0)%把均匀分布伪随机发生器置为0状态10、randn(m,n)%产生正态分布随机数11、magic(m)%产生魔方数组(对高维不适用)%即每行、每列及对角元素之和为(n^3+n)/212、linspace(a,b,n)%在a和b之间均匀产生n个点的值如:f=linspace(0,1,5)则f=051.013、logspace(a,b,n)%在a和b之间对数分布产生n个点的值如:f=logspace(0,1,5)则f=1.00001.77833.16235.623410.00002022/12/22312.1.2矩阵及其元素的赋值(续)8、rand(m,n)2.1.2矩阵及其元素的赋值(续)矩阵中的元素(用圆括号中数字来注明)1.A(i,j)表示第i行,第j列元素。2.A(i)表示第i个元素。
矩阵中元素的排序如右所示3.A(i,j)=常量,表示给A中元素赋值。
当下标超出原矩阵的尺寸,则自动扩展行列并补零。2022/12/22322.1.2矩阵及其元素的赋值(续)矩阵中的元素(用圆括号2.1.2矩阵及其元素的赋值(续)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阵中所有元素组成列向量。2022/12/22332.1.2矩阵及其元素的赋值(续)4.A(:,j2.1.3复数1、复数的虚部部分用i或j表示。如:2+3i,3-4j2、复数可直接计算。如:z=[2+3i;3-4j]或f=z+[2+j;3];3、复数的实部和虚部可分别赋值。但i和j需先清除。如:clearijf=[1,3;5,7]+[2,4;6,8]*j2022/12/22342.1.3复数1、复数的虚部部分用i或j表示。20222.1.3复数4、B=Z’表示共轭转置。5、B=conj(Z)表示共轭。如:Z=[1+2i,3-4j]则:B=Z’有B=1-2i3+4jB=conj(Z)有B=[1-2i,3+4j]2022/12/22352.1.3复数4、B=Z’表示共轭转置。2022/122.1.3复数6、B=conj(Z)’表示转置。7、B=Z.’
表示非共轭复数转置。如:Z=[1+2i,3-4j]则:B=conj(Z)’有B=1+2i3-4jB=Z.’有B=1+2i3-4j2022/12/22362.1.3复数6、B=conj(Z)’表示转置。20222.1.4变量的查询,存储,提取1、变量的查询who或whos2、变量的存储
save文件名[.mat]
变量列表
如:savesarabc
变量中间用空格隔开,不能加逗号。
3、变量的提取load文件名4、变量的清除clear变量列表5、清除所有变量clearall2022/12/22372.1.4变量的查询,存储,提取1、变量的查询2.1.5基本赋值矩阵为了方便给大量元素赋值,MATLAB提供了一些基本矩阵。见书中表2.1如:A=zeros(m,n)全0矩阵B=ones(m,n)全1矩阵C=eye(m,n)单位矩阵D=rand(m,n)0—1之间随机数均匀分布randn(‘state’,0’);%把随机数发生器置0E=randn(m,n)均值为0的,单位方差正态分布随机矩阵F=magic(m)魔方矩阵2022/12/22382.1.5基本赋值矩阵为了方便给大量元素赋值,MATLAG=linspace(a,b,n)线性分隔,a,b之间均匀产生n个数H=logspace(a,b,n)对数分隔,a,b之间产生n个数K=diag(A);取A中对角线元素得到列向量。P=diag(diag(A))产生对角阵
a=[1234];b=diag(a)产生对角阵如A=[123;456;789]
B=diag(A)则:B=[1;5;9];2022/12/2239G=linspace(a,b,n)线2.2矩阵的初等运算2.2.1矩阵的加减乘除1、+,-,*,/,\2、点乘:.*右除:./左除:.\1、C=A+B;C=A-BC=A*B
注意:矩阵必须相匹配2、X=A\B表示AX=BX=A-1B即X=inv(A)*B3、X=A/B表示XB=AX=AB-1即X=A*inv(B)4、[m,n]=size(A)计算矩阵A的行列大小5、K=length(A)计算矩阵A的行列大小中最大的数2022/12/22402.2矩阵的初等运算2.2.1矩阵的加减乘除20222.2.1矩阵的加减乘除点乘、点除6、C=A.*B对应元素间相乘。2022/12/22412.2.1矩阵的加减乘除点乘、点除2022/12/1847、C=A./B对应元素间相除。8、C=A.\B2022/12/22427、C=A./B对应元素间相除。2022/12/12.2.2矩阵除法及线性方程组的解1、方阵的行列式
B=det(A)即B=|A|2、方阵的求逆
B=inv(A)即B=A-1条件|A|≠03、方阵的伪逆矩阵
B=pinv(A)条件|A|=04、方阵的伴随矩阵
B=inv(A)*det(A)即B=A-1|A|2022/12/22432.2.2矩阵除法及线性方程组的解1、方阵的行列式2022.2.3矩阵的乘方和幂次函数1、^矩阵乘方2、.^元素对元素的乘方C=A^n表示A阵自乘n次。C=A^(-n)表示A阵的逆矩阵自乘n次。C=A.^n表示A阵中每个元素自乘n次。C=A.^(-n)表示A阵中每个元素自乘n次后的逆阵,即每个元素为1/(A^n)。2022/12/22442.2.3矩阵的乘方和幂次函数1、^矩阵乘方2022/1如C=A^2C=A.^2C=A^(-2)====inv(A)^2C=A.^(-2)2022/12/2245如2022/12/18452.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矩阵的右上三角部分2022/12/22462.2.4矩阵结构形式的提取与变换B=fliplr(A)如:B=fliplr(A)B=flipud(A)B=rot90(A)B=tril(A)2022/12/2247如:2022/12/18472.3元素群运算2.3.1数组及其赋值1、t=[初值:步长:终值];
如t=0:0.1:1tt=[10:-1:1]2、t=linspace(初值,终值,点数)
如:tr=linspace(0,2*pi,9)3、t=logspace(初值,终值,点数)
如:tp=logspace(0,1,11)2022/12/22482.3元素群运算2.3.1数组及其赋值2022/2.3.2元素群的四则运算表示对矩阵中每个元素进行运算
如X=[123];Y=[456]Z=X.*YZ=[41018]Z=X.\YZ=[42.52]Z=X.^YZ=[132729]
Z=X.^NN=2Z=[149]Z=2.^[XY]Z=[248163264]2022/12/22492.3.2元素群的四则运算表示对矩阵中每个元素进行运算22.3.3元素群的函数等命令可以直接MATLAB中exp、sprt、sin、cos使用在矩阵上,这种运算只是定义在矩阵的单个元素上,即分别对矩阵的每个元素进行运算。MATLAB中也提供了基本的三角函数。
注意其中的取整函数名含义abs绝对值或者复数模sqrt平方根real实部imag虚部conj复数共轭round4舍5入到整数fix舍入到最接近0的整数floor舍入到最接近-∞的整数ceil舍入到最接近∞的整数2022/12/22502.3.3元素群的函数等命令可以直接MATLAB中ex2.3.3元素群的函数函数名含义sign符号函数rem留数sin正弦cos余弦tan正切asin反正弦acos反余弦atan反正切atan2第四象限反正切函数名含义sinh双曲正弦cosh双曲余弦tanh双曲正切exp自然指数log自然对数log10以10为底的对数bessel贝赛尔函数gamma伽吗函数rat有理逼近2022/12/22512.3.3元素群的函数函数名含义sign符号函数rem2.4逻辑判断及流程控制2.4.1关系操作符MATLAB常用的关系操作符有:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)、~=(不等于)。MATLAB的关系操作符可以用来比较两个大小相同的数组,或者比较一个数组和一个标量。在与标量比较时,结果和数组大小一样。»a=1:9;b=a>4b=000011111»c=a(a>4)c=567892022/12/22522.4逻辑判断及流程控制2.4.1关系操作符2022.4.1关系操作符矩阵查找和排序子矩阵的查找使用find命令完成,它返回关系表达式为真的下标。例如:»a=10:20;»find(a>15)ans=7891011矩阵的排序使用sort函数,它将矩阵按照升序排列。2022/12/22532.4.1关系操作符矩阵查找和排序2022/12/182.4.2逻辑运算逻辑操作符定义了一种与或非的关系表达式。MATLAB的逻辑操作符有&(与)、|(或)、~(非)、xor(异或)。例如:»c=~(a>4)c=111100000»c=(a>4)&(a<7)c=000011000C=xor(A,B)2022/12/22542.4.2逻辑运算逻辑操作符定义了一种与或非的关系表达2.4.3其他关系与逻辑函数xor(x,y)异或运算。x或y非零(真)返回1,x和y都是零(假)或都是非零(真)返回0。any(x)如果在一个向量x中,任何元素是非零,返回1;矩阵x中的每一列有非零元素,返回1。all(x)如果在一个向量x中,所有元素非零,返回1;矩阵x中的每一列所有元素非零,返回1。2022/12/22552.4.3其他关系与逻辑函数xor(x,y)2022/1%逻辑函数的运用示例。randn('state',1),R=randn(3,6) %创建正态随机阵
L=abs(R)<0.5|abs(R)>1.5
%不等式条件运算,结果给出逻辑数组
R(L)=0 %"逻辑1"对应的元素赋0值。
s=(find(R==0))' %利用find获得符合关系等式条件的元素"单下标"
R(s)=111 %利用"单下标"定位赋值[ii,jj]=find(R==111); %利用find获得符合关系等式条件的元素"双下标"disp(ii'),disp(jj')2022/12/2256%逻辑函数的运用示例。2022/12/1856【例】关系运算运用之一:求近似极限,修补图形缺口。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:Dividebyzero.
2022/12/2257【例】关系运算运用之一:求近似极限,修补图形缺口。2022/2022/12/22582022/12/1858【例】逻辑操作应用之一:逐段解析函数的计算和表现。本例演示削顶整流正弦半波的计算和图形绘制。t=linspace(0,3*pi,500);y=sin(t);
z1=((t<pi)|(t>2*pi)).*y; w=(t>pi/3&t<2*pi/3)+(t>7*pi/3&t<8*pi/3);w_n=~w; z2=w*sin(pi/3)+w_n.*z1; subplot(1,3,1),plot(t,y,':r'),ylabel('y')subplot(1,3,2),plot(t,z1,':r'),axis([010-11])subplot(1,3,3),plot(t,z2,'-b'),axis([010-11])2022/12/2259【例】逻辑操作应用之一:逐段解析函数的计算和表现。本例演示削2022/12/22602022/12/1860【例】写出生成下图所示波形的MATLAB脚本文件M文件。图中虚线为正弦波,要求它的负半波被置零,且在处被削顶。2022/12/2261【例】写出生成下图所示波形的MATLAB脚本文件M文件。图中t=linspace(0,3*pi,500);y=sin(t);z1=((t<pi)|(t>2*pi)).*y; w=(t>pi/3&t<2*pi/3)+(t>7*pi/3&t<8*pi/3);w_n=~w; z2=w*sin(pi/3)+w_n.*z1; plot(t,y,'r-.',t,z2,'k-')xlabel('x');ylabel('z=f(t)');title('逐段解析函数');legend('y=sin(t)','z=f(t)');2022/12/2262t=linspace(0,3*pi,500);2022/122.4.4流程控制语句脚本对于简单问题,使用直接输入命令简单有效;对稍复杂和多次重复的应用,直接输入命令比较麻烦。MATLAB提供了逻辑解决方案,它允许用户把多个命令放在一个简单的文本文件中,如同在MATLAB中键入命令一般,这种文件称为脚本文件,由于脚本文件以m为扩展名,它常称为M文件。脚本文件为文本形式的,对跨平台处理十分有利。使用脚本文件,可以把命令保存在磁盘上,便于以后的访问;同时对使用大的数组也带来的方便;增加注释可以为脚本中的命令作文挡以免以后忘记。2022/12/22632.4.4流程控制语句脚本2022/12/18632.4.4流程控制语句为了便于应用,MATLAB提供了一些流程控制的命令。这些命令对脚本编写带来了一些方便,但是需要注意的是,尽量不要使用这些流程控制命令,尤其是循环控制命令。If语句很多情况下,命令的序列必须根据关系的检验有条件的执行,它由if-else-end结构提供。它的结构如下:ifexpression1commands1elseifexpression2commands2elseif……elsecommandsend2022/12/22642.4.4流程控制语句为了便于应用,MATLAB提供了2.4.4流程控制语句在执行过程中,MATLAB依次检查各个表达式,只执行第一个表达式为真的命令串,接下来的关系表达式不检验,跳过其余的if-else-end结构,而且,最后的else命令可有可无。2022/12/22652.4.4流程控制语句在执行过程中,MATLAB依次检求x=input('x=');ifx>=10y=x^2+3;elseifx>=0y=x^3+4*x;elsey=x^5+x;endyx=input('x=');ifx>=10y=x^2+3;elseifx>=0y=x^3+4*x;elsey=x^5+x;endendy2022/12/2266求x=input('x=');x=input('x=');22.4.4流程控制语句for循环for循环允许一组命令以固定的次数重复,它的一般形式是forx=arraycommandendfor和end之间的命令串按数组array的每一列执行一次,直到n次后终止。如:forj=1:2:10y=j+j.^2;end2022/12/22672.4.4流程控制语句for循环2022/12/2.4.4流程控制语句for循环不能使用内部重新赋值循环变量而终止;for循环内部接受任何有效的MATLAB数组;for循环可以嵌套;只要有矩阵形式可以解决的问题,不要使用for循环。使用for循环的算法执行很慢,一个好的MATLAB算法不应当出现循环语句。Tic/toc循环可以使用break跳出,但只跳出所在的循环,不跳出整个嵌套结构。2022/12/22682.4.4流程控制语句for循环不能使用内部重新赋值循2.4.4流程控制语句while循环与for循环以固定的次数求一组指令相反,while循环以不定的次数求一组语句的值。While循环的一般形式为:whileexpressioncommondsend只要表达式expression里的所有元素为真,就执行命令串commands。通常表达式求值给一个标量值,单数组值也同样有效。2022/12/22692.4.4流程控制语句while循环2022/12/1求y=0;forx=1:100y=y+x;endyN=input('N=');y=0;fori=1:Nforj=1:Ny=y+1/(i+j);endendyN=input('N=');y=0;i=1;whilei<=Nj=1;whilej<=Ny=y+1/(i+j);j=j+1;endi=i+1;endy2022/12/2270求y=0;N=input('N=');N=input('N=【例】Fibonacci数组的元素满足Fibonacci规则:
,;且。现要求该数组中第一个大于10000的元素a(1)=1;a(2)=1;i=2;whilea(i)<=10000 a(i+1)=a(i-1)+a(i); i=i+1;end;ia(i)i=21ans=10946
2022/12/2271【例】Fibonacci数组的元素满足Fibonacci规用for循环指令来寻求Fibonacc数组中第一个大于10000的元素。n=100;a=ones(1,n);fori=3:na(i)=a(i-1)+a(i-2);ifa(i)>=10000a(i)break;end;Endi结果:ans=10946i=212022/12/2272用for循环指令来寻求Fibonacc数组中第一个大于1002.4.4流程控制语句Switch语句是一种均衡实现的多分支语句。SwitchexpressionCase值1
commands1Case值2
commands2…OtherwisecommandsNend2022/12/22732.4.4流程控制语句Switch语句2022/12学生的成绩管理,用来演示switch结构的应用。
clear;fori=1:10a{i}=89+i;b{i}=79+i;c{i}=69+i;d{i}=59+i;end;c=[d,c];Name={'Jack','Marry','Peter','Rose','Tom'};Mark={72,83,56,94,100};Rank=cell(1,5);S=struct('Name',Name,'Marks',Mark,'Rank',Rank);2022/12/2274学生的成绩管理,用来演示switch结构的应用。clearfori=1:5switchS(i).Markscase100 S(i).Rank='满分';
casea S(i).Rank='优秀';
caseb S(i).Rank='良好';
casec S(i).Rank='及格';
otherwise S(i).Rank='不及格';
endenddisp([‘学生姓名’,‘得分’,‘等级’]);disp('')fori=1:5;disp([S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank]);end;
结果:学生姓名
得分
等级
Jack72及格Marry83良好Peter56不及格
Rose94优秀
Tom100满分2022/12/2275fori=1:5结果:2022/12/18752.5基本绘图方法2.5.1直角坐标中的两维曲线plot(y)
以y的下标作为x坐标,以y值作为y坐标。plot(x,y)
数组x和y的长度应匹配。每次绘制将清除以前的图形。2022/12/22762.5基本绘图方法2.5.1直角坐标中的两维曲线22.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’)%利用鼠标在图形加上说明7、legend(‘string1’,’string2’,..)%给图形加图例8、legendoff%关闭图例2022/12/22772.5.1直角坐标中的两维曲线图形的标注和图例2022/如:作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)')2022/12/2278如:作y=sin(t)的二维图形2022/12/18782.5.2线型、点型和颜色plot(x,y,’r:’)后面是颜色和线型标识符颜色标识符线型标识符线型y黄.点S正方形标记m品红o圆圈D菱形标记c青xX号^朝上三角形r红++号V朝下三角形g绿-实线>朝右三角形b蓝*星号<朝左三角形w白:虚号P五角星k黑-.点划线H六角星--虚线none无符号标记2022/12/22792.5.2线型、点型和颜色plot(x,y,’r:’)2.5.3多条曲线的绘制1、plot(x1,y1,x2,y2);2、plot(x1,y1,’r’,x2,y2);3、plot(x1,y1)hold是乒乓切换
holdon%图形保持plot(x2,y2,’r’)
holdoff%解除保持4、plot(t,[y1,y2,y3])%自动给颜色和线型。5、plotyy(x1,y1,x2,y2)%可画2个不同纵坐标的图2022/12/22802.5.3多条曲线的绘制1、plot(x1,y1,x2,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(t)');text(3,0.4,'y1=sin(t)');text(2,0,'y2=cos(t)');legend('y1=sin(t)','y2=cos(t)');2022/12/22812022/12/18812.5.4屏幕控制与其他2维绘图1.figure%打开图形窗口2.figure(n)%打开指定图形窗口3.close%关闭当前图形窗口4.closeall%关闭所有图形窗口5.close(n)%关闭指定图形窗口6.clf%清除窗口内所有内容2022/12/22822.5.4屏幕控制与其他2维绘图1.figure2.5.4屏幕控制与其他2维绘图(续)subplot(m,n,p)%图形分为mxn个子图,并指定第p个。排号从左到右,从上到下。stem(t,y)%绘脉冲图stairs(t,y)%绘阶梯图bar(t,y)%绘条形图errorbar(t,y)%绘误差条形图hist(y)%绘直方图fill(t,y,’r’)%绘填充图2022/12/22832.5.4屏幕控制与其他2维绘图(续)subplot(m如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)');subplot(2,2,3);bar(t,y,'g');title('bar(t,y)');subplot(2,2,4);fill(t,y,'r');title('fill(t,y,''r'')');2022/12/2284如y=exp(-0.1t)*sin(t)2022/12/18hist(y)t=0:0.1:4*pi;y=exp(-0.1*t).*sin(t);y1=5.*y.*sin(t);plotyy(t,y,t,y1);2022/12/2285hist(y)2022/12/18852.5.4屏幕控制与其他2维绘图(续)pause%暂停gridon%增加网格gridoff%取消网格grid%乒乓增加和取消网格loglog%双对数坐标log10similogx%半对数坐标,x轴半对数similogy%半对数坐标,y轴半对数
polar(theta,rho)%极坐标图2022/12/22862.5.4屏幕控制与其他2维绘图(续)pause2.5.4屏幕控制与其他2维绘图(续)23、虚数的绘图---------Z为虚数
plot(Z)%实部为x坐标,虚部为y轴
plot(t,Z)%虚部丢失axis([xmin,xmax,ymin,ymax])%定义坐标axissquare%两轴坐标长度相等axisequal%两轴坐标刻度相同axistight%坐标区域和图形吻合set(gca,’xtick’,[-1,3,7,11])%在x轴指定处标记刻度2022/12/22872.5.4屏幕控制与其他2维绘图(续)23、虚数的绘图-clear,clft=0:2*pi/99:2*pi;x=1.15*cos(t);y=3.25*sin(t); %y为长轴,x为短轴subplot(2,3,1);plot(x,y),axisnormal,gridon,title('NormalandGridon')subplot(2,3,2);plot(x,y),axisequal,gridon,title('Equal')subplot(2,3,3);plot(x,y),axissquare,gridon,title('Square')subplot(2,3,4);plot(x,y),axisimage,boxoff,title('ImageandBoxoff')subplot(2,3,5);plot(x,y),axisimagefill,boxofftitle('ImageandFill')subplot(2,3,6);plot(x,y),axistight,boxoff,title('Tight')2022/12/2288clear,clf2022/12/18882022/12/22892022/12/18892.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]);boxonlegend('链','宝石');2022/12/22902.5.5三维曲线和曲面plot3(x,y,z,’r’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);2022/12/22912.5.5三维曲线和曲面(续)2.mesh(z)2.5.5三维曲线和曲面(续)3.surf(Z)%由多个小面组成表面视图surf(x,y,z)surf(x,y,z,’r’)x=-8:0.5:8;y=x';X=ones(size(y))*x;Y=y*ones(size(x));R=abs(X)+abs(Y)+eps;Z=sin(R)./R;surf(Z);2022/12/22922.5.5三维曲线和曲面(续)3.surf(Z)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颜色holdonstem3(X,Y,Z,'bo');2022/12/22932.5.5三维曲线和曲面(续)4.Meshgrid(2.5.5三维曲线和曲面(续)5.view(方位角,俯仰角)%改变视角6.shadingflat%把曲面上的小格平滑掉shadinginterp%更平滑7.rotate3d%旋转8.contour3(Z)%画等高线9.meshc,surfc%带等高线的三维作图10.colormap(hot)%hot,cool,gray,copper,pink,jet,prism11.colorbar%画彩色条12.hiddenoff%透视被叠压的图形
hiddenon%消隐被叠压的图形2022/12/22942.5.5三维曲线和曲面(续)5.view(方位角,2.5.5三维曲线和曲面(续)clear,clf[X0,Y0,Z0]=sphere(30); %产生单位球面的三维坐标X=2*X0;Y=2*Y0;Z=2*Z0;
%产生半径为2的球面的三维坐标surf(X0,Y0,Z0); %画单位球面shadinginterp %采用插补明暗处理holdon;mesh(X,Y,Z);colormap(hot);holdoff%采用hot色图hiddenoff %产生透视效果axisequal,axisoff %不显示坐标轴
2022/12/22952.5.5三维曲线和曲面(续)clear,clf2022.5.5三维曲线和曲面(续)13.Moviein,getframe,movie%动画axisequalM=moviein(16);forj=1:16plot(fft(eye(j+16)));M(:,j)=getframe;endmovie(M,30);14.alpha(v)%透明度控制v∈[0,1]2022/12/22962.5.5三维曲线和曲面(续)13.Movieinclear;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);axisoffn=12;mmm=moviein(n); %预设画面矩阵。fori=1:n rotate(h,[001],25); %使图形绕z轴旋转25度/每次
mmm(:,i)=getframe; %捕获画面。endmovie(mmm,5,10) %以每秒10帧速度,重复播放5次。2022/12/2297clear;clf;shg,2022/12/18972.6M文件及程序调试M文件可以分为两种:一种是主程序,一种是子程序即函数文件。一个较复杂的程序往往是由这两种程序混合组成。2.6.1主程序文件主程序一般用clear,closeall开头程序主体程序存盘的文件名2022/12/22982.6M文件及程序调试M文件可以分为两种:一种是主程序,2.6.2函数文件把一个比较大的任务分解为多个比较小的任务,它们之间通过调用实现参数传递,小任务可以是函数。格式:function[out1,out2,…]=函数名(in1,in2,…)1、函数调用常见的函数调用形式为:[out1,out2,…]=function(in1,in2,…)一个函数可以嵌套,也可以调用其它的函数,甚至调用自己(也就是递归调用)。函数文件,函数名称和文件名一般相同。2022/12/22992.6.2函数文件把一个比较大的任务分解为多个比较小2.6.2函数文件与脚本文件不同,函数文件犹如一个“黑箱”,把一些数据送进并经加工处理,再把结果送出来。MATLAB提供的函数指令大部分都是由函数文件定义的。M函数文件的特点是:从形式上看,与脚本文件不同,函数文件的笫一行总是以“function”引导的“函数申明行”。2022/12/221002.6.2函数文件与脚本文件不同,函数文件犹如一2.6.2函数文件从运行上看,与脚本文件运行不同,每当函数文件运行,MATLAB就会专门为它开辟一个临时工作空间,称为函数工作空间(Functionworkspace)。当执行文件最后一条指令时,就结束该函数文件的运行,同时该临时函数空间及其所有的中间变量就立即被清除。MATLAB允许使用比“标称数目”较少的输入输出宗量,实现对函数的调用。2022/12/221012.6.2函数文件从运行上看,与脚本文件运行不同2.6.2函数文件由于从结构上看,脚本文件只是比函数文件少一个“函数申明行”,所以只须描述清楚函数文件的结构。典型M函数文件的结构如下:函数申明行:位于函数文件的首行,以关键字functio开头,函数名以及函数的输入输出宗量都在这一行被定义。笫一注释行:紧随函数申明行之后以%开头笫一注释行。该行供lookfor关键词查询和help在线帮助使用。2022/12/221022.6.2函数文件由于从结构上看,脚本文件只是比函2.6.2函数文件在线帮助文本区:笫一注释行及其之后的连续以%开头的所有注释行构成整个在线帮助文本。编写和修改记录:与在线帮助文本区相隔一个“空”行,也以%开头,标志编写及修改该M文件的作者和日期等。函数体:为清晰起见,它与前面的注释以“空”行相隔。2022/12/221032.6.2函数文件在线帮助文本区:笫一注释行及其之2.6.2函数文件需要注意函数文件的放置位置,一般自己的函数文件放在当前目录;如果对一个专题有了足够多的函数,可以生成一个工具箱,放在一个固定的目录下,并在MATLAB中加入这个目录路径即可。使用函数可以加快计算速度。MATLAB首次执行一个函数时,它将打开的文件编译为存储器内部形式,加速了执行速度。普通的m文件不被编译,在每次编译时,文件将逐行解释执行。函数的前一部分注释为帮助行,在使用help命令是看到的为这些注释行。2022/12/221042.6.2函数文件需要注意函数文件的放置位置,一般自2.6.2函数文件2、参数传递MATLAB函数的输入输出数目都可以变化,通过这个特性,可以实现一些自定义的功能。函数的输入输出参数数目可以通过变量nargin和nargout获得。函数调用中可以使用少于规定的输入输出参数数目,但是不能更多。在MATLAB中,参数具有自己的专有工作空间。函数中的参数和命令行参数不在一个空间中,它们的唯一联系为函数的输入输出变量。输入参数在函数中是可读的,但任何改动不会传递回上一级空间。使用global命令可以将变量说明为全局的,则在函数、命令行等都可以共享这些变量。在实际应用中,应当尽量避免使用全局变量。2022/12/221052.6.2函数文件2、参数传递2022/12/1812.6.2函数文件3、函数注意函数可以按少于函数M文件中所规定的输入和输出变量进行调用,但不能用多于函数M文件中所规定的输入和输出变量数目。如果输入和输出变量数目多于函数M文件中function语句一开始所规定的数目,则调用时自动返回一个错误。当调用一个函数时,所用的输入和输出的参量的数目,在函数内是规定好的。函数工作空间变量nargin包含输入参量个数;函数工作空间变量nargout包含输出参量个数。事实上,这些变量常用来设置缺省输入变量,并决定用户所希望的输出变量。在M文件函数里,变量nargout可用来检验输出参量的个数,并按要求修正输出变量的创建。2022/12/221062.6.2函数文件3、函数注意2022/12/1812.6.2函数文件函数有它们自己的专用工作空间,它与MATLAB的工作空间分开。函数内变量与MATLAB工作空间之间唯一的联系是函数的输入和输出变量。如果函数任一输入变量值发生变化,其变化仅在函数内出现,不影响MATLAB工作空间的变量。函数内所创建的变量只驻留在函数的工作空间,而且只在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 债务纠纷合同(2篇)
- 公共事业资产管理合同
- 2025年无机械动力飞机项目发展计划
- 《职场沟通》电子教案 项目九 商务谈判沟通教案
- 门店租赁协议模板
- 福州汽车租赁合同
- 厂房租赁合同书范文
- 公寓别墅租赁服务合同
- 八年级语文上册第一单元5国行公祭为佑世界和平教案新人教版1
- 八年级道德与法治上册第三单元勇担社会责任第七课积极奉献社会第2框服务社会教案新人教版
- 水生生物学智慧树知到期末考试答案章节答案2024年宁波大学
- 针灸推拿治疗失眠PPT
- ISO-8467-1993高锰酸盐指数
- 防雷和接地监理实施细则-
- 粮食仓储组织架构设计及全套管理规章制度
- 《人员素质测评理论与方法》电子版本
- 陶瓷色料的技术PPT课件
- 幼儿园食品安全工作计划四篇
- 课程设计YA32-350型四柱万能液压机液压系统设计
- 中国工业数据库介绍
- 弱电智能化设计服务建议书(共35页)
评论
0/150
提交评论