1.95k likes | 2.23k Vues
第 2 章 MATLAB 语言基础. 返回总目录. MATLAB 语言是美国 Math Works 公司于 20 世纪 80 年代推出的高性能数值计算软件, MATLAB 语言源于线性代数中的数学运算,它不同于其他的计算机高级语言, MATLAB 语言最初是基于矩阵的运算工具,这也是其名称 MATLAB(MATrix LABoratory) 的由来。 MATLAB 语言已成为当今全世界流行的一种优秀的计算机语言。
E N D
第2章MATLAB语言基础 返回总目录
MATLAB语言是美国Math Works公司于20世纪80年代推出的高性能数值计算软件,MATLAB语言源于线性代数中的数学运算,它不同于其他的计算机高级语言,MATLAB语言最初是基于矩阵的运算工具,这也是其名称MATLAB(MATrix LABoratory)的由来。 MATLAB语言已成为当今全世界流行的一种优秀的计算机语言。 (1) MATLAB语言功能强大,适用范围广泛。MATLAB语言可以用于线性代数中的向量、数组和矩阵等的运算,代数方程的求解、微积分运算、数值代数与数值逼近、微分方程数值解和最优化方法等科学研究与工程技术中所需要的计算问题都可以由MATLAB语言来解决。MATLAB语言广泛应用于控制系统分析与设计、生物医学工程、语言处理、图像信号处理、计算机技术与航空航天工程等。 (2) MATLAB语言编程效率高。MATLAB语言提供了丰富的内部函数,其中有常用的基本函数,也有种类齐全、功能丰富多样的专用函数。内部函数是预先编制好的子程序。在MATLAB语言环境下编制程序时,可以直接调用内部函数,不用将其子程序的命令或语句逐一列出。MATLAB语言比BASIC、FORTRAN和C等高级程序语言的编程效率要高。
(3) MATLAB语言界面友好,用户使用方便。MATLAB语言拥有友好的界面与易学易懂的帮助系统。MATLAB语言把编辑、编译、连接、执行与调试等多个步骤融为一体。MATLAB语言可以设置中断点,储存多个中间结果。MATLAB语言是演算的科学计算语言,用MATLAB编写程序,犹如在一张演算纸上排列书写公式,运算求解问题。 (4) MATLAB语言具有很强的扩充能力。MATLAB语言不仅为用户提供了可以直接调用且非常丰富的内部函数(M文件),而且在MATLAB语言环境下,用户可以根据需要,自行建立或者扩充完成指定功能的M文件,这些文件可以与MATLAB语言提供的内部函数一样被保存与调用。 (5) MATLAB语言具有强大的图形处理和符号运算功能。MATLAB语言系统带有许多绘图的内部函数,可以很轻松地画出各种复杂的二维和三维图形。MATLAB语言开发了强大的符号运算功能,MATLAB几乎可以解决工程技术人员在学习与科研中的所有符号运算问题。
(6) MATLAB语言的计算可以自动选择算法。MATLAB的许多功能函数都带有算法的自适应能力,它们会根据情况自行选择最合适的算法。 (7) MATLAB语言与其他的软件和语言有良好的对接性。MATLAB语言与符号运算功能最强大的工具软件MAPLE之间有接口。MATLAB语言与BASIC、FORTRAN和C等高级程序语言之间都可以实现很方便的连接。 (8) MATLAB语言包含功能齐备的控制分析工具箱。MathWorks公司先后开发了许多MATLAB控制工具箱,有控制系统工具箱、系统识别工具箱、多变量频域设计工具箱和最优化控制工具箱等。每一个工具箱都是该控制领域里的最权威和最先进的计算与仿真软件包。MATLAB语言及其工具箱的开发,使得它在科学计算、工程技术与自动控制方面的应用越来越普遍。 (9) MATLAB语言具有开放的源程序。除内部函数以外,所有MATLAB核心文件和工具箱文件都是可读可改的源文件,用户可以通过对源文件的修改以及加入自己的函数文件而构成自己专用的工具箱。
基础知识 一.简单的矩阵输入 MATLAB语言最基本、最重要的功能就是进行实数矩阵或复数矩阵的运算,其所有的数值功能都以矩阵为基本单元来实现。 在MATLAB语言中,矩阵与数组的输入形式和书写方法是相同的,其区别在于进行运算时,数组的运算是数组中对应元素的运算,而矩阵运算则应符合矩阵运算的规则。在数值运算中使用的矩阵必须赋值,矩阵的简单输入可以采用直接赋值和增量赋值两种方法。 1.直接赋值法 元素较少的简单矩阵可以在MATLAB命令窗口中以命令行的方式直接输入。矩阵的输入必须以方括号“[ ]”作为其开始与结束标志,矩阵的行与行之间要用分号“;”或按Enter键分开,矩阵的元素之间要用逗号“,”或用空格分隔。矩阵的大小可以不必预先定义,且矩阵元素的值可以用表达式表示。
基础知识 【例2.1】 矩阵的直接赋值。 >> a=[1 2 3;4 5 6;7 8 9] a = 1 2 3 4 5 6 7 8 9 >> A=[9,8,7,6;5,4,3,2;11,13,15,17] A = 9 8 7 6 5 4 3 2 11 13 15 17 MATLAB语言的变量名称字符区分大小写,字符a与A分别为独立的矩阵变量名。在MATLAB语言命令行的最后如果加上分号“;”,则在命令窗口中不会显示输入命令所得到的结果。
基础知识 2.增量赋值法 矩阵的输入可以使用MATLAB语言具有向量增量功能的增量赋值法,增量赋值法的标准格式为 A=初值:增量:终值 其中冒号为分隔识别符。 【例2.2】 增量赋值法输入矩阵。 >> A=1:0.5:2 A = 1.0000 1.5000 2.0000 >> B=[A;2*A;A/5] B = 1.0000 1.5000 2.0000 2.0000 3.0000 4.0000 0.2000 0.3000 0.4000 增量赋值法对于系统仿真是非常有用的。增量赋值法的标准格式中如果增量项默认,默认增量值则为1,即表示为A=初值:终值。
基础知识 二. 矩阵的元素 矩阵是由多个元素组成的,矩阵的元素由下标来标识。 1.矩阵的下标 (1) 全下标标识。矩阵中的元素可以用全下标来标识,即用矩阵的行下标和列下标来表示矩阵的元素。一个m×n的矩阵A的第i行、第j列的元素表示为a(i,j)。这种全下标标识方法的优点是:几何概念清楚,引述简单。它在MATLAB语言的寻访和赋值中最为常用。 如果在提取矩阵的元素时,矩阵元素的下标行或列(i,j)大于矩阵的大小m×n,则MATLAB会提示出错;而在对矩阵元素赋值时,如果行或列下标数值(i,j)超出矩阵的维数m×n,则MATLAB会自动扩充矩阵,扩充部分未被赋值的元素值以0填充。
基础知识 【例2.3】 用全下标标识给矩阵元素赋值。 >> A=[1 3 5;2 4 6] A = 1 3 5 2 4 6 >> A(3,3) % 提取A(3,3)的值。 ??? Index exceeds matrix dimensions. >> A(3,3)=9 % 给A(3,3)赋值。 A = 1 3 5 2 4 6 0 0 9 MATLAB语言规定在百分比符号“%”之后的文字内容为程序或命令行的注释。
基础知识 (2) 单下标标识。矩阵的元素也可以用单下标来标识,就是先把矩阵的全部元素按先左后右的次序连接成“一维长列”,然后对元素位置进行编号。一个m×n的矩阵A的第i行第j列的元素a(i,j)对应的单下标表示为a (s),其中s=(j-1)×m+i。
基础知识 2.子矩阵块的产生 MATLAB利用矩阵的下标可以产生子矩阵。对于a(i,j),如果i和j是向量而不是标量,则将获得指定矩阵的子矩阵块。子矩阵是从对应矩阵中取出一部分元素来构成,可以分别用全下标和单下标两种方法来产生子矩阵。 【例2.4】 用全下标标识和单下标方法产生子矩阵。
基础知识 >> A=[1 4 7; 2 5 8; 3 6 9] A = 1 4 7 2 5 8 3 6 9 >> A([1 3],[2 3]) % 取行数为1、3,列数为2、3的元素构成子矩阵。 ans = 4 7 6 9 >> A(1:3,2:3) % 取行数为1~3,列数为2~3的元素构成子矩阵。 ans = 4 7 5 8 6 9 >> A(:,3) % 取所有的行数,列数为3的元素构成子矩阵。 ans = 7 8 9 >> A(end,1:3) % 取行数为3,列数为1~3的元素构成子矩阵,用end表示某一 维阶数中的最大值。 ans = 3 6 9 >> A([1 3;2 6]) % 取单下标为1、3、2、6的元素构成子矩阵。 ans = 1 3 2 6
基础知识 3. 矩阵元素的赋值 对矩阵的元素进行赋值有三种方法:全下标方式、单下标方式和全元素方式。 (1) 全下标方式。A(i,j)=B表示给矩阵A的部分元素赋值,其中矩阵B的行列数必须等于矩阵A需要赋值的这一部分的行列数。 【例2.5】 用全下标方式给矩阵元素赋值。 >> A(1:2,1:3)=[1 1 1;1 1 1] % 给第1,2行元素赋值为全1。 A = 1 1 1 1 1 1 3 6 9
基础知识 (2) 单下标方式。A(s)=b表示给矩阵A的部分元素赋值,其中向量b的元素个数必须等于矩阵A需要赋值的这一部分元素的个数。 【例2.6】 用单下标方式给矩阵元素赋值。 >> A(5:6)=[10 10] % 给第5,6个元素赋值为10。 A = 1 1 1 1 10 1 3 10 9
基础知识 (3) 全元素方式。A(:)=B表示给矩阵A的所有元素赋值,其中矩阵B的元素总数必须等于矩阵A的元素总数,但行列数可以不相等。 【例2.7】 用全元素方式给矩阵元素赋值。 >> A=[1 4;2 5;3 6] A = 1 4 2 5 3 6 >> B=[1 2 3;4 5 6] B = 1 2 3 4 5 6 >> A(:)=B % 按全元素方式给矩阵A赋值。 A = 1 5 4 3 2 6
基础知识 三. 变量和语句 如同其他计算机高级语言一样,MATLAB语言也有变量命名规则。MATLAB变量名区分字母大小写。变量名不超过31个字符,第31个以后的字符将被忽略,且字符之间不能有空格。变量名必须以字母打头,之后可以是任意字母、数字或下画线。许多标点符号在MATLAB语言中有特殊的含义,所以变量名不允许使用标点符号。 MATLAB语言采用命令行形式的表达式语言,每一条命令行就是一条语句,其格式与书写数学表达式相近,容易掌握。在MATLAB语言命令窗口输入语句,该语句就被MATLAB系统解释运行并给出运行结果。如果一条语句的表达式太长,可用三个句点“…”将其延伸到下一行。MATLAB的语句可以采用表达式和赋值语句两种形式。
基础知识 (1) 表达式由变量名、常数、函数和运算符号构成。表达式执行运算后产生的结果,将自动赋给名为ans的默认变量,即表示MATLAB运算后的答案,并将其答案在屏幕上显示出来。变量ans的值将在下一条表达式语句执行后被刷新。 【例2.8】 表达式语句。 >> sqrt(2)*exp(-1*3) ans = 0.0704 >> 8*3+6/4 ans = 25.5000
基础知识 (2) 赋值语句的形式为: 变量=表达式 赋值语句经过执行后是将其右边表达式计算产生的结果,赋值给赋值语句中等号左边的变量,并存入内存。MATLAB可同时执行以逗号“,”或分号“;”隔开的多个赋值语句。 【例2.9】 赋值语句。 >> a=3+5+6*4-9 a = 23 >> x=sin(pi/6),y=x^2;z=5*y % 同时执行多个赋值语句。 x = 0.5000 z = 1.2500
基础知识 四. Who命令和永久变量 1.Who命令 在命令窗口中执行的命令和运行M文件所产生的变量信息全部存放在当前的工作空间中,在命令窗口输入Who命令可以对MATLAB的变量名进行查询;输入Whos命令可以对MATLAB的变量及其属性进行查询。
基础知识 【例2.10】 用Who命令和Whos命令对变量进行查询。 >> A=[1 4 7; 2 5 8; 3 6 9]; B=[1 2 3 4]; C=[1; 2; 3; 4]; >> D='I am a student'; >> who % 用Who命令对变量进行查询。 Your variables are: A B C D >> whos % 用Whos命令对变量及其属性进行查询。 Name Size Bytes Class A 3x3 72 double array B 1x4 32 double array C 4x1 32 double array D 1x14 28 char array Grand total is 31 elements using 164 bytes 查询结果表示A、B和C为双精度数值变量,而D为字符变量。
基础知识 2.永久变量 为了一些特殊情况下的运算,MATLAB语言预先定义了一些永久变量如表所示。对于MATLAB语言的永久变量,需要注意下面五点: (1) 永久变量不能用clear命令清除,所以称为永久变量。 (2) 永久变量不响应Who, Whos命令。 (3) 永久变量的变量名如果没有被赋值,那么永久变量将取表2-1中所给定的值。 (4) 如果对任何一个永久变量进行赋值,则那个变量的默认值将被所赋的值临时覆盖。如果使用clear命令清除MATLAB内存中的变量,或者MATLAB的命令窗口被关闭后重新启动,不管永久变量曾经被赋值与否,所有的永久变量将被重新设置为默认值。 (5) 在遵循IEEE算法规则的计算机上,被0除是允许的。它不会导致程序执行的中断,系统会给出警告信息,且用一个特殊的名称(如Inf,NaN)记述。
变 量 含 义 ans 计算结果的默认变量名 eps 机器零阈值 Inf或inf 无穷大,如1/0 i或j 虚数单位i =j = Pi 圆周率 NaN或nan 非数变量(Not a Number),如0 / 0、∞ /∞ nargin 函数输入宗量数目,用于M文件程序设计 nargout 函数输出宗量数目,用于M文件程序设计 realmax 最大正实数 realmin 最小正实数 基础知识
基础知识 五. 数字和算术表达式 对于简单的数字运算,可以直接用表达式语句和赋值语句的形式在MATLAB命令窗口输入。一般代数表达式的输入就如同在纸上进行演算一样,因此,MATLAB语言也被称为演算纸式的科学计算语言。 MATLAB语言的算术运算符可以按优先级由低到高分为五级,每一级的优先级相同,运算时从左向右进行结合。各优先级所包含的运算符为: (1) 转置符“.’”、幂符“.^”、复共轭转置“’”、矩阵幂符“^”。 (2) 标量加“+”、标量减“-”。 (3) 数组乘法“.*”、数组右除“./”、数组左除“.\”、矩阵乘法“*”、矩阵右除“/”、矩阵左除“\”。 (4) 加法“+”、减法“-”。 (5) 冒号运算符。 大多数算术运算符只是对具有相同维数数组的对应元素进行运算。对于矩阵或向量,算术运算符连接的两个运算对象必须同维数或者两个中有一个是标量。当一个运算对象是标量时,运算符将把标量和另一个运算对象的每一个元素进行相应运算。如果要改变运算的优先级,可以用括号强制实现。
函 数 功 能 real(z) 给出复数z的实部 a=rcosθ imag(z) 给出复数z的虚部 b=rsinθ abs(z) 给出复数z的模 angle(z) 以弧度为单位给出复数z的相角θ=arctan(b/a) 基础知识 六. 复数和矩阵 MATLAB语言对于复数的处理,不像其他程序语言那样把复数的实部、虚部分开处理,而是把复数作为一个整体处理。虚数单位用自定义变量i或j表示。MATLAB语言的矩阵元素允许是复数、复变量和由它们组成的表达式。MATLAB语言利用其内部函数可以对复数的直角坐标表示和极坐标表示之间进行转换,复数z的直角坐标表示z=a+bi和极坐标表示z=reiθ之间转换的指令如表所示。 复数的直角坐标表示与极坐标表示之间的转换
基础知识 【例2.11】 复数的输入及计算。 (1) 数学教科书式的直角坐标表示法。 >> z1=3+4i z1 = 3.0000 + 4.0000i 在这种格式中,4i是一个完整的虚数,在4和i之间不允许有空格存在。这种书写格式只适用于数值标量复数,而不适用于数值矩阵。为避免出错,尽量不要使用这种输入格式。 (2) 采用运算符构成的直角坐标表示和极坐标表示法。 >> z2=1+2*i % 由运算符构成的直角坐标表示。 z2 = 1.0000 + 2.0000i >> z3=2*exp(i*pi/6) % 由运算符构成的极坐标表示。 z3 = 1.7321 + 1.0000i >> z=z1*z2/z3 z = 0.3349 + 5.5801i
基础知识 【例2.12】 复数矩阵的生成及运算。 >> 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+2i 3+4i; 5+6i 7+8i] % 复数矩阵的输入。 B = 1.0000 + 2.0000i 3.0000 + 4.0000i 5.0000 + 6.0000i 7.0000 + 8.0000i >> C=A*B % 复数矩阵相乘。 C = 1.0e+002 * -0.3500 + 0.4900i -0.5100 + 0.7700i -0.3900 + 0.7700i -0.5500 + 1.2100i >> C_real=real(C) % 求复数矩阵C的实部。 C_real = -35 -51 -39 -55 >> C_imag=imag(C) % 求复数矩阵C的虚部。 C_imag = 49 77 77 121 >> C_magnitude=abs(C) % 求复数矩阵C的模。 C_magnitude = 60.2163 92.3580 86.3134 132.9135 >> C_phase=angle(C)*180/pi % 求复数矩阵C以度为单位的相角。 C_phase = 125.5377 123.5180 116.8619 114.4440
基础知识 七. 输出格式 MATLAB语句执行的结果可以在计算机屏幕上显示,并同时赋值给指定名称的变量。如果没有指定的变量名称,则赋值给永久变量名“ans”,MATLAB数据输出显示格式可以由format命令来执行。format命令只影响结果的显示,不影响结果的计算与存储精度。MATLAB语言总是以双精度执行所有的运算。 MATLAB显示数据结果时,遵循一定的规则。在默认的情况下,当执行结果为整数时,MATLAB将它作为整数显示;当执行结果是一般实数时,MATLAB以小数点后4位小数的精度近似显示结果。如果结果中的有效数字超出了这一范围,MATLAB以类似于科学计算器的科学记数法来显示结果。用户可以通过MATLAB语言File菜单中的Preference选项来设置数值的输出格式,当选定了某种输出格式后,则所有的结果都采用这种格式输出,除非用format命令重新特别定义。下表给出了以值为例MATLAB语言的数值输出格式,其中format short g显示格式是MATLAB缺省时的默认显示格式,表中所有格式设置的实现仅在MATLAB当前执行过程中有效。
基础知识 八. HELP功能 MATLAB语言提供了快速的命令窗口查询帮助功能,这些帮助命令有help帮助系列、lookfor命令和其他常用帮助命令。 1.help命令系列 help系列的帮助命令有help和help+函数(类)名两种形式。 (1) help命令。help命令是最为常用的命令,在MATLAB的命令窗口直接输入help命令将会显示当前的帮助系统中所包含的全部项目,即搜索路径中所有的目录名称。
基础知识 【例2.13】 help命令。 >> help % 在命令窗口直接输入help命令,显示在线帮助纵览。 HELP topics: matlab\general - General purpose commands. matlab\ops - Operators and special characters. matlab\lang - Programming language constructs. matlab\elmat - Elementary matrices and matrix manipulation. matlab\elfun - Elementary math functions. matlab\specfun - Specialized math functions. matlab\matfun - Matrix functions - numerical linear algebra. matlab\datafun - Data analysis and Fourier transforms. matlab\audio - Audio support. matlab\polyfun - Interpolation and polynomials. matlab\funfun - Function functions and ODE solvers. …
基础知识 (2) help+函数(类)名。在MATLAB的实际应用中,这是最有效的一个帮助命令,通过对具体函数功能的查询,可以帮助用户对MATLAB语言进行深入的学习。 【例2.14】 help+函数(类)名。 >> help elfun % help+函数类名。 Elementary math functions. Trigonometric. sin - Sine. sinh - Hyperbolic sine. asin - Inverse sine. asinh - Inverse hyperbolic sine. cos - Cosine. cosh - Hyperbolic cosine. acos - Inverse cosine. acosh - Inverse hyperbolic cosine. … Exponential. exp - Exponential. log - Natural logarithm. log10 - Common (base 10) logarithm. …
基础知识 Complex. abs - Absolute value. angle - Phase angle. complex - Construct complex data from real and imaginary parts. conj - Complex conjugate. imag - Complex imaginary part. real - Complex real part. … >> help inv % help+函数名。 INV Matrix inverse. INV(X) is the inverse of the square matrix X. A warning message is printed if X is badly scaled or nearly singular. See also SLASH, PINV, COND, CONDEST, LSQNONNEG, LSCOV. Overloaded methods help gf/inv.m help zpk/inv.m help tf/inv.m help ss/inv.m help lti/inv.m help frd/inv.m help sym/inv.m help idmodel/inv.m …
基础知识 2.lookfor命令 在知道某个MATLAB函数名的情况下,使用help命令可以快速准确地查找此函数的确切用法。然而,如果要查询一个不知其函数名称的函数用法与功能,help命令则不能满足要求。此时,可以用lookfor命令根据相关的关键字来查询相关的函数。lookfor命令的查询是对MATLAB语言搜索路径中的每个M文件注释区的第一行进行扫描,一旦发现此行中有所要查询的关键字,则将该函数名及第一行注释内容全部显示在屏幕上。因此,用户在自己编写的文件中也可以加入在线注释便于查询。
基础知识 【例2.15】 lookfor命令。 >> lookfor transfer SS2TF State-space to transfer function conversion. TF2SS Transfer function to state-space conversion. TF2ZP Transfer function to zero-pole conversion. TFCHK Check for proper transfer function. ZP2TF Zero-pole to transfer function conversion. MATQDLG Workspace transfer dialog box. DTF2SS Discrete transfer function to state-space conversion.
基础知识 3.其他帮助命令 在MATLAB语言中,还有一些经常被用到且具有特别查询功能的查询、帮助命令如表所示。
基础知识 九. 退出MATLAB以及工作空间的存储 1. 退出MATLAB 要想退出MATLAB环境,可以使用四种方式中的任何一种: (1) 在MATLAB的命令窗口输入exit命令。 (2) 在MATLAB的命令窗口输入quit命令。 (3) 直接单击MATLAB命令窗口右上角的关闭按钮。 (4) 从MATLAB环境的File菜单中退出。
基础知识 2.工作空间的存储 工作空间是由MATLAB系统所提供的永久变量以及用户自己使用过程中生成的所有变量组成的一个概念上的空间。当MATLAB启动后,系统会自动建立一个工作空间,这时的工作空间仅包含MATLAB的一些永久变量,随着用户使用MATLAB语言求解问题的进行,系统会逐渐增加一些用户自己定义的变量,这些用户自己定义的变量会一直保存下去,直到关闭MATLAB系统释放工作空间后才会消失。在没有退出MATLAB环境时,要想删除这些内存变量,可以在MATLAB命令窗口输入clear命令。 在MATLAB系统工作空间中保存的变量会因关闭系统而被自动释放掉,当再次打开MATLAB系统时,用户以前定义并使用过的变量已不存在。在进行科学计算时,经常需要将没有处理完的一些数据保存起来,以备下一次继续使用,即要求将MATLAB工作空间中的变量进行存储。MATLAB工作空间的存储可以通过执行File菜单中的Save Aorkspace As选项来实现。
矩阵运算 矩阵运算是MATLAB语言最基本的重要运算功能,MATLAB对于矩阵运算的处理与线性代数中的方法相同。在线性代数中矩阵的加、减及乘均有定义,而除没有定义。MATLAB为了便于计算,专门定义了矩阵的除法并且定义了矩阵的左除和右除。MATLAB定义矩阵除法和线性代数中乘以矩阵的逆意义近似。
矩阵运算 一. 矩阵转置 MATLAB语言求矩阵A的转置直接用A’来表示。如果A是m×n的矩阵,A’就是n×m的矩阵。如果A是复数矩阵,那么A’就表示复数矩阵的共轭转置。如果只想得到复数矩阵A的转置可以使用A.’命令来完成,此时所得到的结果与conj(A’)的结果相同。当A为实数矩阵时,有A’= A.’。
矩阵运算 【例2.16】 矩阵的转置。 >> A=[1 4 7; 2 5 8] A = 1 4 7 2 5 8 >> A1=A' A1 = 1 2 4 5 7 8 >> A2=A.' A2 = 1 2 4 5 7 8 >> B=[1+2i 3+4i; 5+6i 7+8i] B = 1.0000 + 2.0000i 3.0000 + 4.0000i 5.0000 + 6.0000i 7.0000 + 8.0000i >> B1=B' B1 = 1.0000 - 2.0000i 5.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 >> B3=conj(B') B3 = 1.0000 + 2.0000i 5.0000 + 6.0000i 3.0000 + 4.0000i 7.0000 + 8.0000i
矩阵运算 二. 矩阵的加法和减法 MATLAB语言能对具有相同阶数的两个矩阵或者一个标量和一个矩阵进行加法与减法运算,其运算符号分别是“+”和“-”。两个矩阵的加法和减法是对应元素的加减,而矩阵与标量的加法和减法运算则是矩阵中的每一个元素都与标量进行加减运算。 B = 2 6 10 6 10 14 10 14 18 >> C=A1-A2 C = 0 2 4 -2 0 2 -4 -2 0 >> D=B-10 % 矩阵与标量相减。 D = -8 -4 0 -4 0 4 0 4 8 【例2.17】矩阵的加法和减法。 >> A1=[1 4 7; 2 5 8; 3 6 9] A1 = 1 4 7 2 5 8 3 6 9 >> A2=[1 2 3; 4 5 6; 7 8 9] A2 = 1 2 3 4 5 6 7 8 9 >> B=A1+A2
矩阵运算 三.矩阵的乘法 MATLAB语言的矩阵乘法运算有标量与矩阵相乘和矩阵与矩阵相乘两种情形,乘法所使用的运算符是“*”。标量与矩阵的乘法运算是标量与矩阵中的每一个元素进行相乘的运算;而矩阵与矩阵的乘法则按照线性代数中矩阵的乘法规则进行,即两个矩阵要相乘,只有当前一个矩阵的列数和后一个矩阵的行数相同时才能进行。 【例2.18】 矩阵的乘法。 >> A=[1 2 3 4; 5 6 7 8; -1 -2 -3 -4; -5 -6 -7 -8] A = 1 2 3 4 5 6 7 8 -1 -2 -3 -4 -5 -6 -7 -8 >> B=fliplr(A) % 矩阵B由矩阵A左右翻转得到。 B = 4 3 2 1 8 7 6 5 -4 -3 -2 -1 -8 -7 -6 -5
矩阵运算 C3 = 1 2 3 4 5 6 7 8 >> D1=C2*C3 D1 = 328 400 328 400 -328 -400 -328 -400 >> D2=C3*C2 % 不满足矩阵相乘的条件,系统会警告出错。 ??? Error using ==> * Inner matrix dimensions must agree. >> C1=A*B C1 = -24 -20 -16 -12 -24 -20 -16 -12 24 20 16 12 24 20 16 12 >> C2=B* % 乘积AB与BA不一定相等。 C2 = 12 16 20 24 12 16 20 24 -12 -16 -20 -24 -12 -16 -20 -24 >> C3=[1 2; 3 4; 5 6; 7 8]
矩阵运算 四.矩阵的除法 矩阵的除法有两种形式,即左除(用运算符“\”)和右除(用运算符“/”)。 1.矩阵的左除 对于矩阵A和B来说,A\B表示矩阵A左除矩阵B,其计算结果与矩阵A的逆和矩阵B相乘的结果相似。其实,A\B是方程AX=B的解,当方程是欠定或超定情况时,A\B所对应的是方程的最小二乘解。
矩阵运算 【例2.19】 矩阵的左除。 >> A=[1 12 7; 3 8 5; 4 3 6] A = 1 12 7 3 8 5 4 3 6 >> B=[4;9;13] B = 4 9 13 >> C=[A;1 1 1] C = 1 12 7 3 8 5 4 3 6 1 1 1 >> D=[B;5] D = 4 9 13 5 >> X1=A\B % 求解欠定方程。 X1 = 2.6442 -0.1731 0.4904 >> X2=C\D % 求解超定方程。 X2 = 2.9536 -0.0847 0.2639
矩阵运算 2.矩阵的右除 对于矩阵A和B来说,A/B表示矩阵A右除矩阵B,其计算结果与矩阵A和矩阵B的逆相乘的结果相似。矩阵A右除矩阵B可以看成是方程XB=A的解。 【例2.20】 矩阵的右除。 >> A=[1 12 7; 3 8 5; 4 3 6] A = 1 12 7 3 8 5 4 3 6 >> B=flipud(A) % 矩阵B由矩阵A上下翻转得到。 B = 4 3 6 3 8 5 1 12 7 >> A/B ans = 0 0 1 0 1 0 1 0 0
矩阵运算 五. 矩阵的乘方 MATLAB语言计算矩阵乘方的表达形式为AˆP,根据矩阵A和P的不同具体对象,矩阵的乘方有不同的含义。 (1) 如果矩阵A为方阵,P为大于1的整数,则矩阵的乘方所得到的结果是矩阵A连乘P次;如果P不是整数,则矩阵的乘方是计算矩阵A的各特征值和特征向量的 乘方。 (2) 如果A为数而P为方阵,则计算AˆP时,其结果也由特征值和特征向量计算得到。 (3) 如果A和P都为方阵,或者A和P两个矩阵中有一个不是方阵,则MATLAB语言会给出运算出错的信息。
矩阵运算 C2 = 400 525 700 925 >> C3=A^0.5 C3 = 1.8173 + 0.8192i 2.3965 - 0.4659i 3.1954 - 0.6212i 4.2138 + 0.3533i >> C4=1.2^A C4 = 229.2159 301.2474 401.6631 530.4633 >> C5=B^2 ??? Error using ==> ^ Matrix must be square. 【例2.21】矩阵的乘方。 >> A=[10 15; 20 25] A = 10 15 20 25 >> B=[1 4 7; 2 5 8] B = 1 4 7 2 5 8 >> C1=A^2 C1 = 400 525 700 925 >> C2=A*A 由计算的结果C1和C2可知,对于方阵A来说,Aˆ2和A*A运算的结果一样,都是计算矩阵A的平方。同时还可以看出,当矩阵B不是方阵时,无法对它进行乘方运算。
矩阵运算 六. 矩阵的超越函数 MATLAB语言中的exp、sqrt和log等函数命令也可以作用到矩阵上,但这种运算只是定义在矩阵的单个元素上,即分别对矩阵的每一个元素进行相应的运算。在超越数学函数的后面加上字母m从而构成矩阵的超越函数,expm、sqrtm和logm分别为矩阵指数、矩阵开方和矩阵对数。矩阵的超越函数要求运算的矩阵必须为方阵。矩阵的超越函数也可以用一般的形式表示,如矩阵指数用funm(A,’exp’)函数命令可以实现,但它们所采用的算法不同,其计算结果会有微小的差别。
矩阵运算 1.矩阵的指数运算 矩阵的指数运算常用的命令是expm,命令的其他形式还有expm1、expm2和expm3。其中,expm1是由Pade近似计算矩阵指数,expm2是由Taylor级数计算矩阵指数,而expm3是由特征值法计算矩阵指数。expm命令形式使用的方法与expm1相同。