第2章MATLAB语言基础 ·23· MATLAB的基本运算量是一致的。 (⑤)在MATLAB中,二维数组和矩阵其实是数据结构形式相同的两种运算量。二维数 组和矩阵的表示、建立、存储根本没有区别,区别只在它们的运算符和运算法则不同。 例如,向命令窗口中输入a=12:34]这个量,实际上它有两种可能的角色:矩阵a或二 维数组。这就是说,单从形式上是不能完全区分矩阵和数组的,必须再看它使用什么运 算符与其他量之间进行运算。相关运算符在2.1.5节会给出描述。 (6数组的维和向量的维是两个完全不同的概念。数组的维是从数组元素排列后所形 成的空间结构去定义的:线性结构是一维,平面结构是二维,立体结构是三维,当然还有 四维以至多维。向量的维相当于一维数组中的元素个数。 2.1.4字符串 字符串是MATLAB中另外一种形式的运算量。正如在例1.】中介绍的那样,在 MATLAB中,字符串是用单引号来标示的,例如,S=I Have a Dream.'。赋值号之后在单引 号内的字符即是一个字符串,而$是一个字符串变量,整个语句完成了将一个字符串常量 赋值给一字符串变量的操作。 在MATLAB中,字符串的存储是按其中字符逐个顺序单一存放的,且存放的是它们 各自的A$CⅡ码,由此看来字符串实际可视为一个字符数组,字符串中每个字符则是这个 数组的一个元素。 字符串的相关运算将在2.5节讨论。 2.1.5运算符 MATLAB运算符可分为三大类,它们是算术运算符、关系运算符和逻辑运算符。下面 分类给出它们的运算符和运算法则。 1.算术运算符 算术运算因所处理的对象不同,分为矩阵和数组算术运算两类。表2-2给出的是矩阵 算术运算的符号、名称、示例和使用说明,表2-3给出的是数组算术运算的运算符号、名 称、示例和使用说明。 表2-2矩阵算术运算符 运算符 名 称 示 刚 法则或使用说明 + 可 C=A+B 矩阵加法法则,即CiJ户A(i汁B() 减 C=A-B 矩阵减法法则,即C(j片A(i,广B() 乘 CA*B 矩阵乘法法则 右除 C=A/B 定义为线性方程组X*B=A的解,即C=A/B=A*B 左除 CAB 定义为线性方程组A*X=B的解,即C=AB=A1*B 乘幂 C=AB A、B其中一个为标量时有定义 共轭转置 B=A' B是A的共轭转置矩阵 ·23·
第 2 章 MATLAB 语言基础 ·23· ·23· MATLAB 的基本运算量是一致的。 (5) 在 MATLAB 中,二维数组和矩阵其实是数据结构形式相同的两种运算量。二维数 组和矩阵的表示、建立、存储根本没有区别,区别只在它们的运算符和运算法则不同。 例如,向命令窗口中输入 a=[1 2;3 4]这个量,实际上它有两种可能的角色:矩阵 a 或二 维数组 a。这就是说,单从形式上是不能完全区分矩阵和数组的,必须再看它使用什么运 算符与其他量之间进行运算。相关运算符在 2.1.5 节会给出描述。 (6) 数组的维和向量的维是两个完全不同的概念。数组的维是从数组元素排列后所形 成的空间结构去定义的:线性结构是一维,平面结构是二维,立体结构是三维,当然还有 四维以至多维。向量的维相当于一维数组中的元素个数。 2.1.4 字符串 字符串是 MATLAB 中另外一种形式的运算量。正如在例 1.1 中介绍的那样,在 MATLAB 中,字符串是用单引号来标示的,例如,S='I Have a Dream.'。赋值号之后在单引 号内的字符即是一个字符串,而 S 是一个字符串变量,整个语句完成了将一个字符串常量 赋值给一字符串变量的操作。 在 MATLAB 中,字符串的存储是按其中字符逐个顺序单一存放的,且存放的是它们 各自的 ASCII 码,由此看来字符串实际可视为一个字符数组,字符串中每个字符则是这个 数组的一个元素。 字符串的相关运算将在 2.5 节讨论。 2.1.5 运算符 MATLAB 运算符可分为三大类,它们是算术运算符、关系运算符和逻辑运算符。下面 分类给出它们的运算符和运算法则。 1. 算术运算符 算术运算因所处理的对象不同,分为矩阵和数组算术运算两类。表 2-2 给出的是矩阵 算术运算的符号、名称、示例和使用说明,表 2-3 给出的是数组算术运算的运算符号、名 称、示例和使用说明。 表 2-2 矩阵算术运算符 运 算 符 名 称 示 例 法则或使用说明 + 加 C=A+B 矩阵加法法则,即 C(i,j)=A(i,j)+B(i,j) - 减 C=A-B 矩阵减法法则,即 C(i,j)=A(i,j)-B(i,j) * 乘 C=A*B 矩阵乘法法则 / 右除 C=A/B 定义为线性方程组 X*B=A 的解,即 C=A/B= A*B-1 \ 左除 C=A\B 定义为线性方程组 A*X=B 的解,即 C=A\B= A-1 *B ^ 乘幂 C=A^B A、B 其中一个为标量时有定义 ' 共轭转置 B=A' B 是 A 的共轭转置矩阵
·24· MATLAB基础及其应用教程 表2-3数组算术运算符 运算符 名称 示例 法则或使用说明 、 数组乘 C=A.*B C(i,=A(i,)*Bi,) 数组右除 C=A./B C(i,=A(i,/B(i,) 数组左除 C=A.\B C(ij)=B(iJ)/A(ij) 数组乘幂 C=AB C(iD=A(i0B(i1) 转置 , 将数组的行摆放成列,复数元素不做共轭 针对表2-2和表2-3需要说明几点: (1)矩阵的加减、乘运算是严格按矩阵运算法则定义的,而矩阵的除法虽和矩阵求逆 有关系,但却分了左、右除,因此不是完全等价的。乘幂运算更是将标量幂扩展到矩阵可 作为幂指数。总的来说,MATLAB接受了线性代数已有的矩阵运算规则,但又不仅止于此。 (2)表2-3中并未定义数组的加减法,是因为矩阵的加减法与数组的加减法相同,所 以未做重复定义。 (3)不论是加减乘除,还是乘幂,数组的运算都是元素间的运算,即对应下标元素一 对一的运算。 (4)多维数组的运算法则,可依元素按下标一一对应参与运算的原则将表2-3推广。 2.关系运算符 MATLAB关系运算符列在表2-4中。 表2-4关系运算符 运算符 名称 示例 法则或使用说明 < 小于 A<B 1.A、B都是标量,结果是或为1(真)或为0(假)的标量 2.A、B若一个为标量,另一个为数组,标量将与数组各元素逐 <= 小于等于 A<=B 一比较,结果为与运算数组行列相同的数组,其中各元素取值 > 大于 A-B 或1或0 > 大于等于 A>=B 3.A、B均为数组时,必须行、列数分别相同,A与B各对应元 恒等于 A-B 素相比较,结果为与A或B行列相同的数组,其中各元素取值 或1或0 不等于 A~=B 4.=和=运算对参与比较的量同时比较实部和虚部,其他运 算只比较实部 需要明确指出的是,MATLAB的关系运算虽可看成矩阵的关系运算,但严格地讲,把 关系运算定义在数组基础之上更为合理。因为从表2-4所列法则不难发现,关系运算是元 素一对一的运算结果。数组的关系运算向下可兼容一般高级语言中所定义的标量关系运算。 3.逻辑运算符 逻辑运算在MATLAB中同样需要,为此MATLAB定义了自己的逻辑运算符,并设定 了相应的逻辑运算法则,如表2-5所示。 ·24…
·24· MATLAB 基础及其应用教程 ·24· 表 2-3 数组算术运算符 运算符 名 称 示 例 法则或使用说明 .* 数组乘 C=A.*B C(i,j)=A(i,j)*B(i,j) ./ 数组右除 C=A./B C(i,j)=A(i,j)/B(i,j) .\ 数组左除 C=A.\B C(i,j)=B(i,j)/A(i,j) .^ 数组乘幂 C=A.^B C(i,j)=A(i,j)^B(i,j) .' 转置 A.' 将数组的行摆放成列,复数元素不做共轭 针对表 2-2 和表 2-3 需要说明几点: (1) 矩阵的加减、乘运算是严格按矩阵运算法则定义的,而矩阵的除法虽和矩阵求逆 有关系,但却分了左、右除,因此不是完全等价的。乘幂运算更是将标量幂扩展到矩阵可 作为幂指数。总的来说,MATLAB 接受了线性代数已有的矩阵运算规则,但又不仅止于此。 (2) 表 2-3 中并未定义数组的加减法,是因为矩阵的加减法与数组的加减法相同,所 以未做重复定义。 (3) 不论是加减乘除,还是乘幂,数组的运算都是元素间的运算,即对应下标元素一 对一的运算。 (4) 多维数组的运算法则,可依元素按下标一一对应参与运算的原则将表 2-3 推广。 2. 关系运算符 MATLAB 关系运算符列在表 2-4 中。 表 2-4 关系运算符 运算符 名 称 示 例 法则或使用说明 < 小于 A<B <= 小于等于 A<=B > 大于 A>B >= 大于等于 A>=B == 恒等于 A==B ~= 不等于 A~=B 1.A、B 都是标量,结果是或为 1(真)或为 0(假)的标量 2.A、B 若一个为标量,另一个为数组,标量将与数组各元素逐 一比较,结果为与运算数组行列相同的数组,其中各元素取值 或 1 或 0 3.A、B 均为数组时,必须行、列数分别相同,A 与 B 各对应元 素相比较,结果为与 A 或 B 行列相同的数组,其中各元素取值 或 1 或 0 4.==和~=运算对参与比较的量同时比较实部和虚部,其他运 算只比较实部 需要明确指出的是,MATLAB 的关系运算虽可看成矩阵的关系运算,但严格地讲,把 关系运算定义在数组基础之上更为合理。因为从表 2-4 所列法则不难发现,关系运算是元 素一对一的运算结果。数组的关系运算向下可兼容一般高级语言中所定义的标量关系运算。 3. 逻辑运算符 逻辑运算在 MATLAB 中同样需要,为此 MATLAB 定义了自己的逻辑运算符,并设定 了相应的逻辑运算法则,如表 2-5 所示
第2章MATLAB语言基础 ·25· 表2-5逻辑运算符 运算符 名称 示例 法则或使用说明 & A&B 1.A、B都为标量,结果是或为1(真)或为0(假)的标量 2. A、B若一个为标量,另一个为数组,标量将与数组各元素逐 或 AB 做逻辑运算,结果为与运算数组行列相同的数组,其中各元素 非 取值或1或0 ~A 3.A、B均为数组时,必须行、列数分别相同,A与B各对应元素 && 先决与 A&&B 做逻辑运算,结果为与A或B行列相同的数组,其中各元素取值 或1或0 先决或 A‖B 4.先决与、先决或是只针对标量的运算 同样地,MATLAB的逻辑运算也是定义在数组的基础之上,向下可兼容一般高级语言 中所定义的标量逻辑运算。 为提高运算速度,MATLAB还定义了针对标量的先决与和先决或运算。先决与运算是 当该运算符的左边为1(真)时,才继续与该符号右边的量做逻辑运算。先决或运算是当运算 符的左边为1(真)时,就不需要继续与该符号右边的量做逻辑运算,而立即得出该逻辑运算 结果为1(真):否则,就要继续与该符号右边的量运算。 4.运算符的优先级 和其他高级语言一样,当用多个运算符和运算量写出一个MATLAB表达式时,运算 符的优先次序是一个必须明确的问题。表2-6列出了运算符的优先次序。 表2-6 MATLAB运算符的优先次序 优先次序 运算符 最高 '(转置共轭)、(矩阵乘幂)、,(转置)、(数组乘幂) ~(逻辑非) 、《右除)、(左除)、(数组乘)、(数组右除)、数组左除) +、- :(冒号运算) <、<=、>、>、=(恒等于)、~=(不等于) &(逻辑与) 1(逻辑或) &&(先决与) 最低 (先决或) MATLAB运算符的优先次序在表2-6中依从上到下的顺序,分别由高到低。而表中同 ·25·
第 2 章 MATLAB 语言基础 ·25· ·25· 表 2-5 逻辑运算符 运算符 名 称 示 例 法则或使用说明 & 与 A&B | 或 A|B ~ 非 ~A && 先决与 A&&B || 先决或 A||B 1.A、B 都为标量,结果是或为 1(真)或为 0(假)的标量 2.A、B 若一个为标量,另一个为数组,标量将与数组各元素逐 一做逻辑运算,结果为与运算数组行列相同的数组,其中各元素 取值或 1 或 0 3.A、B 均为数组时,必须行、列数分别相同,A 与 B 各对应元素 做逻辑运算,结果为与 A 或 B 行列相同的数组,其中各元素取值 或 1 或 0 4.先决与、先决或是只针对标量的运算 同样地,MATLAB 的逻辑运算也是定义在数组的基础之上,向下可兼容一般高级语言 中所定义的标量逻辑运算。 为提高运算速度,MATLAB 还定义了针对标量的先决与和先决或运算。先决与运算是 当该运算符的左边为 1(真)时,才继续与该符号右边的量做逻辑运算。先决或运算是当运算 符的左边为 1(真)时,就不需要继续与该符号右边的量做逻辑运算,而立即得出该逻辑运算 结果为 1(真);否则,就要继续与该符号右边的量运算。 4. 运算符的优先级 和其他高级语言一样,当用多个运算符和运算量写出一个 MATLAB 表达式时,运算 符的优先次序是一个必须明确的问题。表 2-6 列出了运算符的优先次序。 表 2-6 MATLAB 运算符的优先次序 优先次序 运 算 符 最 高 '(转置共轭)、^(矩阵乘幂)、.'(转置)、.^(数组乘幂) ~(逻辑非) * 、/(右除)、\(左除)、.*(数组乘)、./(数组右除)、.\(数组左除) +、- :(冒号运算) <、<=、>、>=、==(恒等于)、~=(不等于) &(逻辑与) |(逻辑或) &&(先决与) 最 低 ||(先决或) MATLAB 运算符的优先次序在表 2-6 中依从上到下的顺序,分别由高到低。而表中同
·26· MATLAB基础及其应用教程 一行的各运算符具有相同的优先级,而在同一级别中又遵循有括号先括号运算的原则。 2.1.6命令、函数、表达式和语句 有了常量、变量、数组和矩阵,再加上各种运算符即可编写出多种MATLAB的表达 式和语句。但在MATLAB的表达式或语句中,还有一类对象会时常出现,那便是命令和 函数。 1.命令 命令通常就是一个动词,在第1章中已经有过接触,例如clear命令,用于清除工作空 间。还有的可能在动词后带有参数,例如“addpath F:\MATLAB文件M文件-end”命令, 用于添加新的搜索路径。在MATLAB中,命令与函数都组织在函数库里,有一个专门的 函数库general就是用来存放通用命令的。一个命令也是一条语句。 2.函数 函数对MATLAB而言,有相当特殊的意义,这不仅因为函数在MATLAB中应用面广, 更在于其多。仅就MATLAB的基本部分而言,其所包括的函数类别就达二十多种,而每 一类中又有少则几个,多则几十个函数。 基本部分之外,还有各种工具箱,而工具箱实际上也是由一组组用于解决专门问题的 函数构成。不包括MATLAB网站上外挂的工具箱函数,就目前MATLAB自带的工具箱己 多达几十种,可见MATLAB其函数之多。从某种意义上说,函数就代表了MATLAB, MATLAB全靠函数来解决问题。 函数最一般的引用格式是: 函数名(参数1,参数2,…) 例如,引用正弦函数就书写成si(A),A就是一个参数,它可以是一个标量,也可以 是一个数组,而对数组求其正弦是针对其中各元素求正弦,这是由数组的特征决定的,2.4.5 节会有详细的举例。 3.表达式 用多种运算符将常量、变量(含标量、向量、矩阵和数组等)、函数等多种运算对象连 接起来构成的运算式子就是MATLAB的表达式。例如 A+B&C-sin(A*pi) 就是一个表达式。请分析它与表达式(A+B)&C-sin(A*pi)有无区别。 4.语句 在MATLAB中,表达式本身即可视为一个语句。而典型的MATLAB语句是赋值语句, 其一般的结构是: 变量名=表达式 例如F=(A+B)&C-sin(A*pi)就是一个赋值语句。 ·26·
·26· MATLAB 基础及其应用教程 ·26· 一行的各运算符具有相同的优先级,而在同一级别中又遵循有括号先括号运算的原则。 2.1.6 命令、函数、表达式和语句 有了常量、变量、数组和矩阵,再加上各种运算符即可编写出多种 MATLAB 的表达 式和语句。但在 MATLAB 的表达式或语句中,还有一类对象会时常出现,那便是命令和 函数。 1. 命令 命令通常就是一个动词,在第 1 章中已经有过接触,例如 clear 命令,用于清除工作空 间。还有的可能在动词后带有参数,例如“addpath F:\ MATLAB 文件\M 文件-end”命令, 用于添加新的搜索路径。在 MATLAB 中,命令与函数都组织在函数库里,有一个专门的 函数库 general 就是用来存放通用命令的。一个命令也是一条语句。 2. 函数 函数对 MATLAB 而言,有相当特殊的意义,这不仅因为函数在 MATLAB 中应用面广, 更在于其多。仅就 MATLAB 的基本部分而言,其所包括的函数类别就达二十多种,而每 一类中又有少则几个,多则几十个函数。 基本部分之外,还有各种工具箱,而工具箱实际上也是由一组组用于解决专门问题的 函数构成。不包括 MATLAB 网站上外挂的工具箱函数,就目前 MATLAB 自带的工具箱已 多达几十种,可见 MATLAB 其函数之多。从某种意义上说,函数就代表了 MATLAB, MATLAB 全靠函数来解决问题。 函数最一般的引用格式是: 函数名(参数 1,参数 2,…) 例如,引用正弦函数就书写成 sin(A),A 就是一个参数,它可以是一个标量,也可以 是一个数组,而对数组求其正弦是针对其中各元素求正弦,这是由数组的特征决定的,2.4.5 节会有详细的举例。 3. 表达式 用多种运算符将常量、变量(含标量、向量、矩阵和数组等)、函数等多种运算对象连 接起来构成的运算式子就是 MATLAB 的表达式。例如 A+B&C-sin(A*pi) 就是一个表达式。请分析它与表达式(A+B)&C-sin(A*pi)有无区别。 4. 语句 在 MATLAB 中,表达式本身即可视为一个语句。而典型的 MATLAB 语句是赋值语句, 其一般的结构是: 变量名=表达式 例如 F=(A+B)&C-sin(A*pi)就是一个赋值语句
第2章MATLAB语言基础 ·27。 除赋值语句外,MATLAB还有函数调用语句、循环控制语句、条件分支语句等。这些 语句将会在后面章节逐步介绍。 2.2向量运算 向量是高等数学、线性代数中讨论过的概念。虽是一个数学的概念,但它同时又在力 学、电磁学等许多领域中被广泛应用。电子信息学科的电磁场理论课程就以向量分析和场 论作为其数学基础。 向量是一个有方向的量。在平面解析几何中,它用坐标表示成从原点出发到平面上的 一点(a,b),数据对(a,b)称为一个二维向量。立体解析几何中,则用坐标表示成(a,b,c),数据 组(a,b,c)称为三维向量。线性代数推广了这一概念,提出了n维向量,在线性代数中,n维 向量用n个元素的数据组表示。 MATLAB讨论的向量以线性代数的向量为起点,多可达n维抽象空间,少可应用到解 决平面和空间的向量运算问题。下面首先讨论在MATLAB中如何生成向量的问题。 2.2.1向量的生成 在MATLAB中,生成向量主要有3种方案:直接输入法、冒号表达式法和函数法, 现分述如下。 1.直接输入法 在命令提示符之后直接输入一个向量,其格式是:向量名=[al,a2,a3] 【例2.1】直接法输入向量。 >A=[2,3,4,5,61,B=[1;2;3;4;5],C=[456789];号最后一个分号表示执行后不 显示C 其运行结果为 A= 2 3 4 5 6 B= 1 2 3 4 5 2.冒号表达式法 利用冒号表达式al:step:an也能生成向量,式中al为向量的第一个元素,an为向量最 后一个元素的限定值,step是变化步长,省略步长时系统默认为l。 【例2.2】用冒号表达式生成向量。 >>A=1:2:10,B=1:10,C=10:-1:1,D=10:2:4,E=2:-1:10 其运行结果为 ·27
第 2 章 MATLAB 语言基础 ·27· ·27· 除赋值语句外,MATLAB 还有函数调用语句、循环控制语句、条件分支语句等。这些 语句将会在后面章节逐步介绍。 2.2 向 量 运 算 向量是高等数学、线性代数中讨论过的概念。虽是一个数学的概念,但它同时又在力 学、电磁学等许多领域中被广泛应用。电子信息学科的电磁场理论课程就以向量分析和场 论作为其数学基础。 向量是一个有方向的量。在平面解析几何中,它用坐标表示成从原点出发到平面上的 一点(a,b),数据对(a,b)称为一个二维向量。立体解析几何中,则用坐标表示成(a,b,c),数据 组(a,b,c)称为三维向量。线性代数推广了这一概念,提出了 n 维向量,在线性代数中,n 维 向量用 n 个元素的数据组表示。 MATLAB 讨论的向量以线性代数的向量为起点,多可达 n 维抽象空间,少可应用到解 决平面和空间的向量运算问题。下面首先讨论在 MATLAB 中如何生成向量的问题。 2.2.1 向量的生成 在 MATLAB 中,生成向量主要有 3 种方案:直接输入法、冒号表达式法和函数法, 现分述如下。 1. 直接输入法 在命令提示符之后直接输入一个向量,其格式是:向量名=[a1,a2,a3,…] 【例 2.1】 直接法输入向量。 >>A=[2,3,4,5,6],B=[1;2;3;4;5],C=[4 5 6 7 8 9]; %最后一个分号表示执行后不 显示 C 其运行结果为 A = 2 3 4 5 6 B = 1 2 3 4 5 2. 冒号表达式法 利用冒号表达式 a1:step:an 也能生成向量,式中 a1 为向量的第一个元素,an 为向量最 后一个元素的限定值,step 是变化步长,省略步长时系统默认为 1。 【例 2.2】 用冒号表达式生成向量。 >>A=1:2:10,B=1:10,C=10:-1:1,D=10:2:4,E=2:-1:10 其运行结果为