《第2章 MATLAB语言基础.doc》由会员分享,可在线阅读,更多相关《第2章 MATLAB语言基础.doc(109页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、MATLAB 语言简介MATLAB 语言当今国际上科学界 (尤其自动控制领域) 最具影响力、最有活力的软件。它起源于矩阵运算,已经发展成一种高度集成的交互式计算机语言。它提供了强大的科学运算、灵活的程序设计流程、高质量的图形可视化与界面设计、便捷的与其他程序和语言接口的功能。由于其特色,它在各国高校与研究单位的控制系统仿真中起着重大的作用。 MATLAB 语言由美国Math Works公司开发,其最新版为 MATLAB 7.11 (2010.9.3)MATLAB 语言起源MATLAB 语言首创者 Cleve Moler 在数值分析,特别是在数值线性代数的领域中很有影响。他曾在密西根大学、斯坦福
2、大学和新墨西哥大学任数学与计算机科学教授。1980年Moler 在讲授线性代数课程时,发现了用其他高级语言编程极为不便,便构思并开发了MATLAB, 这一软件利用了当时数值线性代数领域最高水平的EISPACK 和 LINPACK两大软件包中可靠的子程序,用Fortran语言编写了集命令翻译、科学计算于一身的一套交互式软件系统。交互式语言n 交互式语言:指人们给出一条命令,立即就可以得出该命令的结果。n 该语言无需像C语言那样,首先要求使用者去编写源程序,然后对之进行编译、连接,最终形成可执行文件。这无疑会给使用者带来了极大的方便。n 早期的MATLAB是用Fortran语言编写的,只能作矩阵运
3、算和简单绘图;内部函数也只提供了几十个。Moler等人成立了MathWorks的公司。84 年推出了MATLAB 的商业版本。当时的MATLAB 版本已经用 C 语言作了完全的改写,其后又增添了丰富多彩的图形图像处理、多媒体功能、符号运算和它与其他流行软件的接口功能,使MATLAB 的功能越来越强大。MATLAB 功能和发展n 92 年推出了4.0 版本, 可以配合 Windows 使用。n 94 年推出的 4.2 版本扩充了功能,尤其在图形界面设计方面更提供了新的方法。n 97 年推出的 5.0 版允许了更多的数据结构,如单元数据、数据结构体、多维矩阵、对象与类等,使其成为一种更方便编程的语
4、言。n 99 年初推出的 5.3 版在很多方面又进一步改进了MATLAB 语言的功能。n 00 年 底推出了其全新的 6.0 正式版,在核心数值算法、界面设计、外部接口、应用桌面等诸多方面有了极大的改进。n 02年6.5 正式版 ; 04年7.0 正式版n MATLAB 语言是计算数学专家倡导并开发的,但有代表性的成就和控制界的要求与贡献是分不开的。大多数工具箱也都是控制方面的。它在工程领域的应用越来越广,并且有着更广阔的应用前景.MATLAB的特色(1)数学运算能力强大n 考虑两个矩阵 A 和 B 的乘积问题,在 C 语言中要实现两个矩阵的乘积并不仅仅是一组双重循环的问题。除此之外要考虑的问
5、题 A 和 B 是复数矩阵怎么考虑; 其中一个是复数矩阵时怎么考虑; 全部是实系数矩阵时又怎么管理; 判断这两个矩阵是否可乘;等等 所以说,没有一定的时间,用 C 语言很难编写出考虑各种情况的子程序。有了 MATLAB 这样的工具,A 和 B 矩阵的乘积用 A*B 这样简单的算式就能表示了。例:如何生成一个 3x3 魔方矩阵将自然数 1, 2, ., 9 分别置成这 9个矩阵元素,怎样才能使得每一行每一列、且主、反对角线上元素相加都等于一个相同的数。用 MATLAB 的 magic() 函数,我们可以由下面的命令立即生成这样的矩阵: A=magic(3)A = 8 1 6 3 5 7 4 9
6、2可以由 B=magic(10) 一次生成 10x10 的魔方矩阵。 如果想求出矩阵的行列式和特征值,可以由 det(B) 与 eig(B) 立即得出结果,而同样的工作在 C 下并不是很简单就可以得出的,算法选择不好,还可能得出错误的结果。 (2) 绘制图形方便、美观、准确第二章 MATLAB语言基础MATLAB语言源自线性代数中的数学运算,最初是基于矩阵的运算工具,这也是MATLAB(Matrix Laboratory)的由来。2.1矩阵的运算MATLAB语言最基本、最重要的功能就是进行实数或复数的矩阵运算,其所有的数值功能都以矩阵为基本单元来实现。2.1.1矩阵的输入分为直接赋值法和增量赋
7、值法1. 直接赋值法矩阵的输入必须以方括号“ ”作为其开始和结束的标志,矩阵的行与行之间要用分号;,每行内的元素用空格或逗号分开。 a=1 2 3;4 5 6;7 8 9或 a=1,2,3;4,5,6;7,8,9或 a=1 2 3;4,5,6;7,8,9 %逗号和空格可同时出现结果是:a = 1 2 3 4 5 6 7 8 9对于比较大的矩阵,可用回车键代替分号,对同一行的内容也可利用续行符号“”,把一行的内容分两行来输入。 a=1,2,3 4,5,6 7,8,9或 a=1,2,3;4,5,. 6;7,8,9结果仍然是:a = 1 2 3 4 5 6 7 8 9MATLAB语言的变量名称字符区
8、分大小写,字符A与a是两个不同的矩阵变量名。在MATLAB语言命令行的最后如果加上分号;,则在命令窗口中不会显示输入命令所得到的结果。2. 增量赋值法增量赋值法的格式:A=初值:增量:终值如: A=1:0.5:2结果是:A = 1.0000 1.5000 2.0000该方法生成的实际为行向量若增量为1时,可写成:A=初值:终值如: B=1:5结果是:B = 1 2 3 4 5 B=1:5;6:10;11:15结果是:B = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15MATLAB允许把矩阵作为元素来建立新的矩阵如: b=a;10,11,12或 b=a;10,11,12
9、结果是:b = 1 2 3 4 5 6 7 8 9 10 11 12矩阵元素可用任何表达式来描述,如: c=1,2,sqrt(2),2*pi,pi/2结果是:c = 1.0000 2.0000 1.4142 6.2832 1.5708执行结果为整数时,则系统按整数进行显示,若执行结果为实数,则按小数后4位有效数字(系统默认,可改变,如在命令窗口输入format long,则显示小数后15位有效数字)来近似表示结果。矩阵赋值后,将一直保存在工作空间中,除非被替代或清除(clear)。利用 size()函数可测取一个矩阵(或向量)的维数,该函数的调用格式为:m,n=size(A)其中,m,n分别为
10、A矩阵的行数和列数,A为要测试的矩阵名。例: m,n=size(b)m = 4n = 3 c=size(b,1) %求表示矩阵b维数的第一项,因为b是43c = % 维的,即第一项是行数,所以c=44 d=size(b,2) %第二项是列数,所以d=3d =3若采取 size(b)ans = 4 3如果未定义变量,运算后产生的结果将自动赋给默认变量ans,变量ans的值将在下条语句(未定义变量)执行后被刷新。length(A):若A为向量,则返回向量A中元素的个数,若A为矩阵,则返回矩阵A中行数和列数的最大值。2.1.2矩阵的元素1.矩阵的下标(1)全下标标识第i行第 j列的元素表示为A(i,
11、j)。该方法在MATLAB语言中最为常用,如A(2,2)。如果在提起矩阵的元素时,矩阵元素的行下标i或列下标j大于矩阵的维数m或n时,系统会提示出错。如: a=1,2,3;4,5,6;7,8,9; a(2,2)ans = 5 a(4,4)? Index exceeds matrix dimensions.(2)单下标标识就是将矩阵中的列按从左到右的顺序连成“一维长列”,然后对元素位置进行编号。一个mn的矩阵A的单下标表示为A(S),与全下标A(i,j)的对应关系为S= (j-1)m+i。 例: A=1,2,3;4,5,6;7,8,9A = 1 2 3 4 5 6 7 8 9 A(2)ans =
12、 4 A(8)ans = 6 B=A(:) %在MATLAB中单独使用冒号“:”,B = 代替下标表示矩阵所有元素或行(列) 1 A(:) is all the elements of A, regarded as a single column 4 7 2 5 8 3 6 92.子矩阵的产生因为子矩阵是从对应矩阵中取出一部分元素构成的,所以可用全下标和单下标两种方法产生。例: A=1,2,3,4;5,6,7,8;9,10,11,12A = 1 2 3 4 5 6 7 8 9 10 11 12 A(1,2,3,4)ans = 3 4 7 8 A(1,2,3,4)ans = 1 5 9 2 A(
13、1,2;3,4)ans = 1 5 9 2 A(:,3)ans = 3 7 11 A(1:3,2:3)ans = 2 3 6 7 10 11 A(1:3,2:3)ans = 1 5 9 5 9 A(end,1:4) % end表示某一维阶数的最大值ans = 9 10 11 123.矩阵元素的赋值分为全下标方式和单下标方式(1) 全下标方式 A=1,2,3;4,5,6;7,8,9A = 1 2 3 4 5 6 7 8 9 A(1:2,1:3)=1,1,1;1,1,1A = 1 1 1 1 1 1 7 8 9 A(3,3)=A(1,1)+A(3,3) %有分号;则不显示结果A = 1 1 1 1
14、 1 1 7 8 10而在对矩阵元素赋值时,如果行或列下标数值(i或j)超出矩阵的维数m或n时,则系统会自动扩充矩阵,扩充部分未被赋值的元素值以0填充。如(接上例): A(4,4)=9A = 1 1 1 0 1 1 1 0 7 8 10 0 0 0 0 9(2) 单下标方式例1: B=1,2,3;4,5,6;7,8,9B = 1 2 3 4 5 6 7 8 9 B(2)=100B = 1 2 3 100 5 6 7 8 9 B(5:6)=100,100 %注意B(5:6)中的冒号B = 1 2 3 100 100 6 7 100 9例2: A=1,2;3,4;5,6A = 1 2 3 4 5
15、6 B=1,2,3;4,5,6B = 1 2 3 4 5 6 A(:)=B %全元素方式,要求A,B的元素个数相等(行列数可以不相等)A = 1 5 4 3 2 6 C=A(:)C = 1 4 2 5 3 6 D=A(:,:)D = 1 5 4 3 2 62.1.3复数矩阵虚数单位用字母i或j表示,但实际j在MATLAB中显示成i。例1:复数Z1=1+2i,Z2=3+4i,Z3=2的MATLAB输入,并计算Z=Z1Z2/Z3。解: Z1=1+2i或 Z1=1+2*i或 Z1=1+2*j结果都为:Z1 = 1.0000 + 2.0000i Z2=3+4i; Z3=2*exp(pi*i/6); Z
16、=Z1*Z2/Z3Z = 0.3349 + 5.5801i a=real(Z)a = 0.3349 a=imag(Z)a = 5.5801 c=abs(Z)c = 5.5902 d=angle(Z)d = 1.5108例2:复数矩阵的生成 A=1,2;3,4+5,6;7,8*i %乘号*不能省略A = 1.0000 + 5.0000i 2.0000 + 6.0000i 3.0000 + 7.0000i 4.0000 + 8.0000i B=1+2*i,3+4*i;5+6*i,7+8*iB = 1.0000 + 2.0000i 3.0000 + 4.0000i 5.0000 + 6.0000i
17、7.0000 + 8.0000i C=A*B % 1.0e+002 *=1.0102,1.0e-002 *=1.010-2C = 1.0e+002 * -0.3500 + 0.4900i -0.5100 + 0.7700i-0.3900 + 0.7700i -0.5500 + 1.2100i C_real=real(C)C_real = -35 -51 -39 -55 C_imag=imag(C)C_imag = 49 77 77 1212.1.4特殊矩阵的实现1.单位矩阵基本格式:(1)A=eye(n)(2)A=eye(m,n)(3)A=eye(size(B)例: A=eye(3)A = 1
18、 0 0 0 1 0 0 0 1 A=eye(4,3)A = 1 0 0 0 1 0 0 0 1 0 0 0 B=1 1 1;1 1 1;1 1 1; A=eye(size(B)A = 1 0 0 0 1 0 0 0 1 C=1 1 1 1;1 1 1 1;1 1 1 1; A=eye(size(C)A = 1 0 0 0 0 1 0 0 0 0 1 02.全零矩阵基本格式:(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)4.对角矩阵函
19、数形式为:diag(v,k),其中v为某个向量,k为向量v偏离主对角线的列数。k=0时,表示v为对角线,此时可表示为diag(v);k0,则表示v在主对角线以上;k v=1 2 3 4;A=diag(v)A = 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 B=diag(v,1)B = 0 1 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 4 0 0 0 0 05.上/下三角矩阵上三角矩阵函数形式为:A=triu(B)下三角矩阵函数形式为:A=tril(B)例: B=1 2 3;4 5 6;7 8 9; A=tril(B)A = 1 0 0 4 5 0
20、7 8 96.随机矩阵rand函数和randn函数rand函数基本格式:(1)A=rand(n) 生成nn阶随机方阵,矩阵元素的值在区间(0,1)内,服从均匀分布(2)A= rand(m,n)生成mn阶随机矩阵,矩阵元素的值在区间(0,1)内,服从均匀分布(3)A= rand(size(B)生成与B阵同阶数的随机矩阵,矩阵元素的值在区间(0,1)内,服从均匀分布randn函数基本格式:(1)A=randn(n) 生成nn阶随机方阵,矩阵元素的值服从N(0,1)正态分布(2)A= randn(m,n)生成mn阶随机矩阵,矩阵元素的值服从N(0,1)正态分布(3)A= randn(size(B)生
21、成与B阵同阶数的随机矩阵,矩阵元素的值服从N(0,1)正态分布例: rand(3)ans = 0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214 rand(3)ans = 0.4447 0.9218 0.4057 0.6154 0.7382 0.9355 0.7919 0.1763 0.9169注意:rand和randn函数每次生成的矩阵都不完全相同7.魔方矩阵魔方矩阵是一个方阵,并且方阵中的每一行、每一列以及每条对角线上的所有元素之和都相等(二阶方阵除外)。由magic(n)函数实现。例: magic(2)ans =
22、1 3 4 2 magic(3)ans = 8 1 6 3 5 7 4 9 2 magic(4)ans = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 18.Hilbert矩阵和反Hilbert矩阵Hilbert矩阵的第i行、第j列的元素值为,反Hilbert矩阵是Hilbert矩阵的逆矩阵。函数分别为 hilb和invhilb9.空矩阵MATLAB中用 表示空矩阵,一个被赋予空矩阵的变量应具有四个性质:(1) 空矩阵不包含任何元素,它的阶数是00(2) 在MATLAB工作内存中确实存在被赋空矩阵的变量 a= ;b=2*a(3) 空矩阵可以再MATLAB得运算中传
23、递 b= (4) 可以使用clear函数从内存中清除空矩阵变量 注意:空矩阵不是0矩阵,也不是不存在空矩阵在实际应用中很有用的,尤其是在不知道其具体维数和具体元素值的情况下。另外,空矩阵可以用来对一般矩阵进行缩维,如 A=1:16; B=reshape(A,4,4)B = 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 B(:,2,4)= B = 1 9 2 10 3 11 4 12 A=1:8;9:16A = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 B=reshape(A,4,4)B = 1 3 5 7 9 11 13 15
24、 2 4 6 8 10 12 14 162.1.5矩阵的运算1.矩阵的转置MATLAB中,若A为实数矩阵时,用A表示A的转置;若A为复数矩阵,则A表示复数矩阵的共轭转置,此时可用A.来求得复数矩阵A的转置(与函数conj(A)的结果相同,conj求共轭复数) A=1 2 3;4 5 6A = 1 2 3 4 5 6 A1=AA1 = 1 4 2 5 3 6 B=1+2i,3+4i;5+6i,7+8iB = 1.0000 + 2.0000i 3.0000 + 4.0000i 5.0000 + 6.0000i 7.0000 + 8.0000i B1=BB1 = 1.0000 - 2.0000i 5
25、.0000 - 6.0000i 3.0000 - 4.0000i 7.0000 - 8.0000i B2=B.B2 = 1.0000 + 2.0000i 5.0000 + 6.0000i 3.0000 + 4.0000i 7.0000 + 8.0000i conj(B)ans = 1.0000 + 2.0000i 5.0000 + 6.0000i 3.0000 + 4.0000i 7.0000 + 8.0000i2.矩阵的加减法矩阵的加减法运算符为“+”,减法运算符为“-”。(1) 矩阵只有具有相同阶数方可进行加减运算(2) 标量可以和矩阵相加减 A=1 2 3;4 5 6;7 8 9; B=
26、9 8 7;6 5 4;3 2 1; C=A+BC = 10 10 10 10 10 10 10 10 10 D=A+1D = 2 3 4 5 6 7 8 9 103.矩阵的乘法矩阵乘法的运算符为“*”。(1) 矩阵与矩阵相乘要求前一矩阵的列数等于后一矩阵的行数(2) 矩阵与标量相乘 A=1 2 3;4 5 6;7 8 9; b=2*Ab = 2 4 6 8 10 12 14 16 184.矩阵的除法矩阵的除法分为左除(“”)和右除(“/”)两种形式(1)矩阵的左除AB表示A左除矩阵B,其结果相当于AX=B的解,即AB=inv(A)*B。(2)矩阵的右除A/B表示A右除矩阵B,其结果相当于XB
27、=A的解,即A/B= A* inv(B)。5.矩阵的乘方矩阵乘方的运算符为“”,表示形式为AP(这里只讨论A为方阵的情况)(1) P为正整数时,则AP的结果为矩阵A自乘P次(2) P为负整数时,则AP的结果为:先将矩阵A自乘P次,再对结果求逆,即相当于inv(Aabs(P)(3) P为分数时,设P=,其中m和n均为整数,则首先将矩阵A自乘m次,再对结果开n次方6.矩阵的翻转常用的有三种形式:(1) fliplr(A):将矩阵A进行左、右翻转(2) flipud(A):将矩阵A进行上、下翻转(3) rot90(A):将矩阵A逆时针旋转90度 A=1 2 3;4 5 6;7 8 9A = 1 2
28、3 4 5 6 7 8 9 B=fliplr(A)B = 3 2 1 6 5 4 9 8 7 C=flipud(B)C = 9 8 7 6 5 4 3 2 1 D=rot90(C)D = 7 4 1 8 5 2 9 6 37.矩阵的超越函数超越函数:自变量之间不能用有限次的加、减、乘、除等运算关系表示的函数,如指数/对数/三角函数等。所谓矩阵的超越函数,即超越函数是对整个矩阵进行运算的(矩阵的超越函数要求运算的矩阵必须为方阵)。MATLAB语言定义的矩阵的超越函数有:expm、sqrtm和logm。其中log为自然对数(log2, log10) a=4 9;16 25a = 4 9 16 25
29、 b=sqrtm(a)b = 0.9421 + 0.9969i 1.5572 - 0.3393i 2.7683 - 0.6032i 4.5756 + 0.2053i sqrt(a)ans = 2 3 4 5 c=b*bc = 4.0000 + 0.0000i 9.0000 + 0.0000i 16.0000 - 0.0000i 25.0000 + 0.0000i8.关系运算MATLAB常用的关系运算符为:“ (大于)”、“= (大于等于)” “= (等于)”、 “= (不等于)”。MATLAB的关系运算符可以用来比较两个大小相同的矩阵,或者比较一个矩阵和一个标量(矩阵的每个元素分别与标量相比较
30、),当关系成立时,结果为1;不成立时,结果为0.例1: A=1:2:15A = 1 3 5 7 9 11 13 15 B=A7B = 0 0 0 0 1 1 1 1 C=A(A7)C = 9 11 13 15 D=find(A7) % find函数找出非零元素的下标,若为矩阵,则按单下标法进行计算D = 5 6 7 8例2: a=1:10;11:20a = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 a(a8)ans = 11 12 13 14 15 16 17 18 9 19 1020 find(a8)ans = 2 4 6 8 10
31、 12 14 16 17 18 19 20例2: A=magic(3)A = 8 1 6 3 5 7 4 9 2 B=mod(A,3)B = 2 1 0 0 2 1 1 0 2 C=B D=rem(A,3) a=2.5,-2.5; a1=fix(a)a1 = 2 -2 a2=floor(a)a2 = 2 -3 a3=ceil(a)a3 = 3 -2 a4=round(a)a4 = 3 -39.逻辑运算逻辑运算符有“&(与)”、“|(或)”、和“(非)”。逻辑运算的结果也用0(假)和1(真)表示。 A=1:9A =1 2 3 4 5 6 7 8 9 B=(A4)B = 1 1 1 1 0 0 0 0 0 C=(A4)&(A7)