您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 控制系统CAD第2章MATLAB语言基础
1MATLAB语言简介MATLAB语言——当今国际上科学界(尤其自动控制领域)最具影响力、最有活力的软件。它起源于矩阵运算,已经发展成一种高度集成的交互式计算机语言。它提供了强大的科学运算、灵活的程序设计流程、高质量的图形可视化与界面设计、便捷的与其他程序和语言接口的功能。由于其特色,它在各国高校与研究单位的控制系统仿真中起着重大的作用。MATLAB语言由美国MathWorks公司开发,其最新版为MATLAB7.11(2010.9.3)MATLAB语言起源MATLAB语言首创者CleveMoler在数值分析,特别是在数值线性代数的领域中很有影响。他曾在密西根大学、斯坦福大学和新墨西哥大学任数学与计算机科学教授。1980年Moler在讲授线性代数课程时,发现了用其他高级语言编程极为不便,便构思并开发了MATLAB,这一软件利用了当时数值线性代数领域最高水平的EISPACK和LINPACK两大软件包中可靠的子程序,用Fortran语言编写了集命令翻译、科学计算于一身的一套交互式软件系统。交互式语言交互式语言:指人们给出一条命令,立即就可以得出该命令的结果。该语言无需像C语言那样,首先要求使用者去编写源程序,然后对之进行编译、连接,最终形成可执行文件。这无疑会给使用者带来了极大的方便。早期的MATLAB是用Fortran语言编写的,只能作矩阵运算和简单绘图;内部函数也只提供了几十个。Moler等人成立了MathWorks的公司。84年推出了MATLAB的商业版本。当时的MATLAB版本已经用C语言作了完全的改写,其后又增添了丰富多彩的图形图像处理、多媒体功能、符号运算和它与其他流行软件的接口功能,使MATLAB的功能越来越强大。MATLAB功能和发展92年推出了4.0版本,可以配合Windows使用。94年推出的4.2版本扩充了功能,尤其在图形界面设计方面更提供了新的方法。97年推出的5.0版允许了更多的数据结构,如单元数据、数据结构体、多维矩阵、对象与类等,使其成为一种更方便编程的语言。99年初推出的5.3版在很多方面又进一步改进了MATLAB语言的功能。00年底推出了其全新的6.0正式版,在核心数值算法、界面设计、外部接口、应用桌面等诸多方面有了极大的改进。02年6.5正式版——;04年7.0正式版——MATLAB语言是计算数学专家倡导并开发的,但有代表性的成就和控制界的要2求与贡献是分不开的。大多数工具箱也都是控制方面的。它在工程领域的应用越来越广,并且有着更广阔的应用前景.MATLAB的特色(1)数学运算能力强大考虑两个矩阵A和B的乘积问题,在C语言中要实现两个矩阵的乘积并不仅仅是一组双重循环的问题。除此之外要考虑的问题A和B是复数矩阵怎么考虑;其中一个是复数矩阵时怎么考虑;全部是实系数矩阵时又怎么管理;判断这两个矩阵是否可乘;等等所以说,没有一定的时间,用C语言很难编写出考虑各种情况的子程序。有了MATLAB这样的工具,A和B矩阵的乘积用A*B这样简单的算式就能表示了。例:如何生成一个3x3魔方矩阵——将自然数1,2,...,9分别置成这9个矩阵元素,怎样才能使得每一行每一列、且主、反对角线上元素相加都等于一个相同的数。用MATLAB的magic()函数,我们可以由下面的命令立即生成这样的矩阵:A=magic(3)A=816357492可以由B=magic(10)一次生成10x10的魔方矩阵。如果想求出矩阵的行列式和特征值,可以由det(B)与eig(B)立即得出结果,而同样的工作在C下并不是很简单就可以得出的,算法选择不好,还可能得出错误的结果。(2)绘制图形方便、美观、准确3第二章MATLAB语言基础MATLAB语言源自线性代数中的数学运算,最初是基于矩阵的运算工具,这也是MATLAB(MatrixLaboratory)的由来。2.1矩阵的运算MATLAB语言最基本、最重要的功能就是进行实数或复数的矩阵运算,其所有的数值功能都以矩阵为基本单元来实现。2.1.1矩阵的输入分为直接赋值法和增量赋值法1.直接赋值法矩阵的输入必须以方括号“[]”作为其开始和结束的标志,矩阵的行与行之间要用分号‘;’,每行内的元素用空格或逗号分开。a=[123;456;789]或a=[1,2,3;4,5,6;7,8,9]或a=[123;4,5,6;7,8,9]%逗号和空格可同时出现结果是:a=123456789对于比较大的矩阵,可用回车键代替分号,对同一行的内容也可利用续行符号“…”,把一行的内容分两行来输入。a=[1,2,34,5,67,8,9]或a=[1,2,3;4,5,...6;7,8,9]结果仍然是:a=123456789MATLAB语言的变量名称字符区分大小写,字符A与a是两个不同的矩阵变量名4。在MATLAB语言命令行的最后如果加上分号‘;’,则在命令窗口中不会显示输入命令所得到的结果。2.增量赋值法增量赋值法的格式:A=初值:增量:终值如:A=[1:0.5:2]结果是:A=1.00001.50002.0000该方法生成的实际为行向量若增量为1时,可写成:A=初值:终值如:B=1:5结果是:B=12345B=[1:5;6:10;11:15]结果是:B=123456789101112131415MATLAB允许把矩阵作为元素来建立新的矩阵如:b=[a;[10,11,12]]或b=[a;10,11,12]结果是:b=123456789101112矩阵元素可用任何表达式来描述,如:c=[1,2,sqrt(2),2*pi,pi/2]结果是:c=1.00002.00001.41426.28321.57085执行结果为整数时,则系统按整数进行显示,若执行结果为实数,则按小数后4位有效数字(系统默认,可改变,如在命令窗口输入formatlong,则显示小数后15位有效数字)来近似表示结果。矩阵赋值后,将一直保存在工作空间中,除非被替代或清除(clear)。利用size()函数可测取一个矩阵(或向量)的维数,该函数的调用格式为:[m,n]=size(A)其中,m,n分别为A矩阵的行数和列数,A为要测试的矩阵名。例:[m,n]=size(b)m=4n=3c=size(b,1)%求表示矩阵b维数的第一项,因为b是4×3c=%维的,即第一项是行数,所以c=44d=size(b,2)%第二项是列数,所以d=3d=3若采取size(b)ans=43如果未定义变量,运算后产生的结果将自动赋给默认变量ans,变量ans的值将在下条语句(未定义变量)执行后被刷新。length(A):若A为向量,则返回向量A中元素的个数,若A为矩阵,则返回矩阵A中行数和列数的最大值。2.1.2矩阵的元素1.矩阵的下标(1)全下标标识第i行第j列的元素表示为A(i,j)。该方法在MATLAB语言中最为常用,如A(2,2)。如果在提起矩阵的元素时,矩阵元素的行下标i或列下标j大于矩阵的维数m或n时,系统会提示出错。如:a=[1,2,3;4,5,6;7,8,9];a(2,2)ans=5a(4,4)???Indexexceedsmatrixdimensions.6(2)单下标标识就是将矩阵中的列按从左到右的顺序连成“一维长列”,然后对元素位置进行编号。一个m×n的矩阵A的单下标表示为A(S),与全下标A(i,j)的对应关系为S=(j-1)×m+i。例:A=[1,2,3;4,5,6;7,8,9]A=123456789A(2)ans=4A(8)ans=6B=A(:)%在MATLAB中单独使用冒号“:”,B=代替下标表示矩阵所有元素或行(列)1A(:)isalltheelementsofA,regardedasasinglecolumn472583692.子矩阵的产生因为子矩阵是从对应矩阵中取出一部分元素构成的,所以可用全下标和单下标两种方法产生。例:A=[1,2,3,4;5,6,7,8;9,10,11,12]A=123456789101112A([1,2],[3,4])ans=73478A([1,2,3,4])ans=1592A([1,2;3,4])ans=1592A(:,3)ans=3711A(1:3,2:3)ans=23671011A([1:3,2:3])ans=15959A(end,1:4)%end表示某一维阶数的最大值ans=91011123.矩阵元素的赋值分为全下标方式和单下标方式(1)全下标方式A=[1,2,3;4,5,6;7,8,9]A=1234567898A(1:2,1:3)=[1,1,1;1,1,1]A=111111789A(3,3)=A(1,1)+A(3,3)%有分号‘;’则不显示结果A=1111117810而在对矩阵元素赋值时,如果行或列下标数值(i或j)超出矩阵的维数m或n时,则系统会自动扩充矩阵,扩充部分未被赋值的元素值以0填充。如(接上例):A(4,4)=9A=11101110781000009(2)单下标方式例1:B=[1,2,3;4,5,6;7,8,9]B=123456789B(2)=100B=12310056789B(5:6)=[100,100]%注意B(5:6)中的冒号B=123100100671009例2:A=[1,2;3,4;5,6]9A=123456B=[1,2,3;4,5,6]B=123456A(:)=B%全元素方式,要求A,B的元素个数相等(行列数可以不相等)A=154326C=A(:)C=142536D=A(:,:)D=1543262.1.3复数矩阵虚数单位用字母i或j表示,但实际j在MATLAB中显示成i。例1:复数Z1=1+2i,Z2=3+4i,Z3=2ie6的MATLAB输入,并计算Z=Z1×Z2/Z3。解:Z1=1+2i或Z1=1+2*i或Z1=1+2*j结果都为:Z1=1.0000+2.0000iZ2=3+4i;Z3=2*exp(pi*i/6);Z=Z1*Z2/Z3Z=0.3349+5.5801i10a=real(Z)a=0.3349a=imag(Z)a=5.5801c=abs(Z)c=5.5902d=angle(Z)d=1.5108例2:复数矩阵的生成A=[1,2;3,4]+[5,6;7,8]*i%乘号*不能省略A=1.0000+5.0000i2.0000+6.0000i3.0000+7.0000i4.0000+8.0000iB=[1+2*i,3+4*i;5+6*i,7+8*i]B=1.0000+2.0000i3.0000+4.0000i5.0000+6.0000i7.0000+8.0000iC=A*B%1.0e+002*=1.0×102,1.0e-002*=1.0×10-2C=1.0e+002*-0.3500+0.4900i-0.5100+0.7700i-0.3900+0.7700i-0.5500+1.2100iC_real=real(C)C_real=-35-51-39-55C_imag=imag(C)C_imag=4977771212.1.4特殊矩阵的实现1.单位矩阵基本格式:(1)A=eye(n)11(2)A=eye(m,n)(3)A=eye(size(B))例:A=eye(3)A=100010001A=eye(4,3)A=100010001000B=[111;111;111];A=eye(size(B))A=100010001C=[1111;1111;1111];A=eye(size(C))A=1000010000102.全零矩阵基本格式:(1)A=zeros(n)(2)A=zeros(m,n)(3)A=zeros(size(B))3.全1矩阵基本格式:(1)A=ones(n)(2)A=ones(m,n)(3)A=ones(size(B))
本文标题:控制系统CAD第2章MATLAB语言基础
链接地址:https://www.777doc.com/doc-2378165 .html