·26. T工,AB基础及其应用教程 一行的各运算符具有相同的优先级,而在同一级别中又遵循有括号先括号运算的原则。 2.1.6命令、函数、表达式和语句 有了常量、变量、数组和矩阵,再加上各种运算符即可编写出多种MATLAB的表达 式和语句。但在MATLAB的表达式或语句中,还有一类对象会时常出现,那便是命令和 函数。 1.命令 命令通常就是一个动词,在第1章中已经有过接触,例如clar命令,用于清除工作空 间.。还有的可能在动词后带有参数,例如“addpath F:\MATLAB文件M文件-end”命令 用于添加新的搜索路径。在MATLAB中,命令与函数都组织在函数库里,有一个专门的 函数库general就是用来存放通用命令的。一个命令也是一条语句。 2.函数 函数对MATLAB而言,有相当特殊的意义,这不仅因为函数在MATLAB中应用面广, 更在于其多。仅就MATLAB的基本部分而言,其所包括的函数类别就达二十多种,而每 一类中又有少则几个,多则几十个函数。 基本部分之外,还有各种工具箱,而工具箱实际上也是由一组组用于解决专门问题的 函数构成不包括MAAB网站上外挂的工具箱函数,就目前MATLAB自带的工具箱已 多达几十种,可见MATLAB其函数之多。从某种意义上说,函数就代表了MATLAB, MATLAB全靠函数来解决问题. 函数最一般的引用格式是: 函数名(参数1,参数2,) 例如,引用正弦函数就书写成sn(A),A就是一个参数,它可以 一个标量,也可以 是一个数组,而对数组求其正弦是针对其中各元素求正弦,这是由数组的特征决定的,24.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章ATLAB语言基础 ,27. 除赋值语句外,MATLAB还有函数调用语句、循环控制语句、条件分支语句等。这些 语句将会在后面章节逐步介绍。 2.2向量运算 向量是高等数学、线性代数中讨论过的概念。虽是一个数学的概念,但它同时又在力 学、电磁学等许多领域中被广泛应用。电子信息学科的电磁场理论课程就以向量分析和场 论作为其数学基础 向量是一个有方向的量。在平面解析几何中,它用坐标表示成从原点出发到平面上的 一点(a,b),数据对(a,b)称为一个二维向量。立体解析几何中,则用坐标表示成(a,b,c,数据 组(a,b,c)称为三维向量。线性代数推广了这一概念,提出了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=[4567891;号最后-个分号表示执行后不 显示C 其运行结果为 A 23456 B= 345 2.冒号表达式法 利用目号表达式al:stcp:an也能生成向量,式中al为向量的第一个元素,an为向量最 后一个元素的限定值,s©p是变化步长,省略步长时系统默认为I。 【例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 其运行结果为
·28. MATLAB基础及其应用教程 A 13579 B- 1 2 3 4567 8910 c= 10987654321 D Empty matrix:1-by-0 B Empty matrix:1-by-0 试分析D、E不能生成的原因。 3.函数法 有两个函数可用来直接生成向量。一个实现线性等分一-linspace()方另一个实现对数 等 线性等分的通用格式为A=Hinspace(al,an,,其中al是向量的首元素,an是向量的尾 元素,n把al至an之间的区间分成向最的首尾之外的其他n-2个元素。省略n则默认生成 100个元素的向量。 【例2.3】请在MATLAB命令窗口输入以下语句,观察用线性等分函数生成向量的结果。 >>Amlinspace(1,50),Balinspace(1,30,10) 对数等分的通用格式为A=logspace(al,an,n,其中al是向量首元素的幂,即AI=10 n是向量尾元素的幂,即A(n尸10"。n是向量的维数。省略n则默认生成50个元素的对 数等分向量。 【例2.4】请在MATLAB命令窗口输入以下语句,观察用对数等分函数生成向量的结果。 >>Amlogspace (0,49),Belogspace(0,4,5) 尽管用冒号表达式和线性等分函数都能生成线性等分向量,但在使用时有几点区别值 得注意: (1)n在骨号表达式中,它不一定恰好是向量的最后一个元素,只有当向量的倒数第 二个元素加步长等于an时,an才正好构成尾元素。如果一定要构成一个以an为末尾元素 的向量,那么最可靠的生成方法是用线性等分函数 (2)在使用线性等分函数前,必须先确定生成向量的元素个数,但使用冒号表达式将 依若步长和an的限制去生成向量,用不着去考虑元素个数的多少。 (3)实际应用时,同时限定尾元素和步长去生成向量,有时可能会出现矛盾,此时必 须做出取合。要么坚持步长优先,调整尾元素限制:要么坚持尾元素限制,去修改等分 步长。 2.2.2向量的加减和数乘运算 在MATLAB中,雏数相同的行向量之间可以相加减,维数相同的列向量也可相加减, 标最数值可以与向量直接相乘除。 【例2.5】向量的加、减和数乘运算。 ·28
·28· MATLAB 基础及其应用教程 ·28· A = 1 3 5 7 9 B = 1 2 3 4 5 6 7 8 9 10 C = 10 9 8 7 6 5 4 3 2 1 D = Empty matrix: 1-by-0 E = Empty matrix: 1-by-0 试分析 D、E 不能生成的原因。 3. 函数法 有两个函数可用来直接生成向量。一个实现线性等分——linspace( );另一个实现对数 等分——logspace( )。 线性等分的通用格式为 A=linspace(a1,an ,n),其中 a1 是向量的首元素,an 是向量的尾 元素,n 把 a1 至 an 之间的区间分成向量的首尾之外的其他 n-2 个元素。省略 n 则默认生成 100 个元素的向量。 【例 2.3】 请在 MATLAB 命令窗口输入以下语句,观察用线性等分函数生成向量的结果。 >>A=linspace(1,50),B=linspace(1,30,10) 对数等分的通用格式为 A=logspace(a1,an ,n),其中 a1 是向量首元素的幂,即 A(1)=10a1 ; an 是向量尾元素的幂,即 A(n)=10an。n 是向量的维数。省略 n 则默认生成 50 个元素的对 数等分向量。 【例 2.4】 请在 MATLAB 命令窗口输入以下语句,观察用对数等分函数生成向量的结果。 >>A=logspace(0,49),B=logspace(0,4,5) 尽管用冒号表达式和线性等分函数都能生成线性等分向量,但在使用时有几点区别值 得注意: (1) an 在冒号表达式中,它不一定恰好是向量的最后一个元素,只有当向量的倒数第 二个元素加步长等于 an 时,an 才正好构成尾元素。如果一定要构成一个以 an 为末尾元素 的向量,那么最可靠的生成方法是用线性等分函数。 (2) 在使用线性等分函数前,必须先确定生成向量的元素个数,但使用冒号表达式将 依着步长和 an 的限制去生成向量,用不着去考虑元素个数的多少。 (3) 实际应用时,同时限定尾元素和步长去生成向量,有时可能会出现矛盾,此时必 须做出取舍。要么坚持步长优先,调整尾元素限制;要么坚持尾元素限制,去修改等分 步长。 2.2.2 向量的加减和数乘运算 在 MATLAB 中,维数相同的行向量之间可以相加减,维数相同的列向量也可相加减, 标量数值可以与向量直接相乘除。 【例 2.5】 向量的加、减和数乘运算
第2章MATLAB语言基础 29… 其运行结果为 E1= 4 681012 B2= 2222 3691215 G2 0000 1.33331.66672.00002.3333 ?7?Brror using Matrix dimensions must agree. 上述实例执行后,=A+C显示了出错信息,表明维数不同的向量之间的加减法运算是 非法的。 2.2.3向量的点、叉积运算 向量的点积即数量积,叉积又称向量积或矢量积。点积、叉积甚至两者的混合积在场 论中是极其基本的运算。MATLAB是用函数实现向量点、叉积运算的。下面举例说明向 的点积、叉积和混合积运算。 1.点积运算 点积运算(4B)的定义是参与运算的两向最各对应位置上元素相乘后,再将各乘积相 加。所以向量点积的结果是一标量而非向量。 点积运算函数是:dot(A,B),A、B是维数相同的两向量。 【例2.6】向最点积运算。 其运算结果为 e 385 385 2又积运算 在数学描述中,向量A、B的叉积是一新向量C,C的方向垂直于A与B所决定的平 面。用三维坐标表示时 29
第 2 章 MATLAB 语言基础 ·29· ·29· >>A=[1 2 3 4 5];B=3:7;C=linspace(2,4,3); AT=A';BT=B'; >>E1=A+B,E2=A-B,F=AT-BT,G1=3*A,G2=B/3,H=A+C 其运行结果为 E1 = 4 6 8 10 12 E2 = -2 -2 -2 -2 -2 F = -2 -2 -2 -2 -2 G1 = 3 6 9 12 15 G2 = 1.0000 1.3333 1.6667 2.0000 2.3333 ??? Error using ==> + Matrix dimensions must agree. 上述实例执行后,H=A+C 显示了出错信息,表明维数不同的向量之间的加减法运算是 非法的。 2.2.3 向量的点、叉积运算 向量的点积即数量积,叉积又称向量积或矢量积。点积、叉积甚至两者的混合积在场 论中是极其基本的运算。MATLAB 是用函数实现向量点、叉积运算的。下面举例说明向量 的点积、叉积和混合积运算。 1. 点积运算 点积运算(A·B)的定义是参与运算的两向量各对应位置上元素相乘后,再将各乘积相 加。所以向量点积的结果是一标量而非向量。 点积运算函数是:dot(A,B),A、B 是维数相同的两向量。 【例 2.6】 向量点积运算。 >>A=1:10;B=linspace(1,10,10); AT=A';BT=B'; >>e=dot(A,B),f=dot(AT,BT) 其运算结果为 e = 385 f = 385 2. 叉积运算 在数学描述中,向量 A、B 的叉积是一新向量 C,C 的方向垂直于 A 与 B 所决定的平 面。用三维坐标表示时
30. MATLAB基础及其应用教程 A=Ai+Ayj+A:k B=Bi+Byj+B:k C=AxB-(AxB:-A:Bi+(A:Bs-AxB:y+(AsBy-AyBx)k 义积运算的函数是:crOs(A,B),该函数计算的是A、B义积后各分量的元素值,且A、 B只能是三维向量, 【例2.7】合法向量叉积运算 其运算结果为 8.123 g.345 -24-2 【例2.8】非法向量叉积运算(不等于三维的向量做叉积运算)。 其运行结果为 A- 2 3 3456 12 D= A and B must have at least one dimension of length 3. 3.混合积运算 综合运用上述两个函数就可实现点积和叉积的混合运算,该运算也只能发生在三维向 量之间,现示例如下。 【例2.9】向量混合积示例。 其运行结果为 A■ 8、2 2 3 33 4 c- 30
·30· MATLAB 基础及其应用教程 ·30· A=Ax i + Ay j + Az k B=Bx i + By j + Bz k C=A×B=(Ay Bz-Az By)i + (Az Bx -Ax Bz )j + (Ax By-Ay Bx )k 叉积运算的函数是:cross(A,B),该函数计算的是 A、B 叉积后各分量的元素值,且 A、 B 只能是三维向量。 【例 2.7】 合法向量叉积运算。 >>A=1:3,B=3:5 >>E=cross(A,B) 其运算结果为 A = 1 2 3 B = 3 4 5 E = -2 4 -2 【例 2.8】 非法向量叉积运算(不等于三维的向量做叉积运算)。 >>A=1:4,B=3:6,C=[1 2],D=[3 4] >>E=cross(A,B),F=cross(C,D) 其运行结果为 A = 1 2 3 4 B = 3 4 5 6 C = 1 2 D = 3 4 ??? Error using ==> cross A and B must have at least one dimension of length 3. 3. 混合积运算 综合运用上述两个函数就可实现点积和叉积的混合运算,该运算也只能发生在三维向 量之间,现示例如下。 【例 2.9】 向量混合积示例。 >>A=[1 2 3],B=[3 3 4],C=[3 2 1] >>D=dot(C,cross(A,B)) 其运行结果为 A = 1 2 3 B = 3 3 4 C =