·28· MATLAB基础及其应用教程 A= 135 9 B= 123 5 678910 C= 10 98 7 6 54321 D= Empty matrix:1-by-0 E Empty matrix:1-by-0 试分析D、E不能生成的原因。 3.函数法 有两个函数可用来直接生成向量。一个实现线性等分一-linspace():另一个实现对数 等分一—logspace()。 线性等分的通用格式为A=-linspace(al,an,n),其中al是向量的首元素,an是向量的尾 元素,n把al至an之间的区间分成向量的首尾之外的其他n-2个元素。省略n则默认生成 100个元素的向量。 【例2.3】请在MATLAB命令窗口输入以下语句,观察用线性等分函数生成向量的结果。 >>A=linspace(1,50),B=linspace(1,30,10) 对数等分的通用格式为A=logspace(al,an,n),其中al是向量首元素的幂,即A(1)=l0l: an是向量尾元素的幂,即A(n)=10"。n是向量的维数。省略n则默认生成50个元素的对 数等分向量。 【例2.4】请在MATLAB命令窗口输入以下语句,观察用对数等分函数生成向量的结果。 >>A=logspace(0,49),B=logspace(0,4,5) 尽管用冒号表达式和线性等分函数都能生成线性等分向量,但在使用时有几点区别值 得注意: (I)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· >>A=[12345];B=3:7:C=1 inspace(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= 46810 12 E2= -2 -2-2-2-2 F= -2 -2 -2 -2 -2 G1= 36 91215 G2= 1.00001.33331.6667 2.00002.3333 ??Error using ==> Matrix dimensions must agree 上述实例执行后,H=A+C显示了出错信息,表明维数不同的向量之间的加减法运算是 非法的。 2.2.3向量的点、叉积运算 向量的点积即数量积,叉积又称向量积或矢量积。点积、叉积甚至两者的混合积在场 论中是极其基本的运算。MATLAB是用函数实现向量点、叉积运算的。下面举例说明向量 的点积、叉积和混合积运算。 1.点积运算 点积运算(AB)的定义是参与运算的两向量各对应位置上元素相乘后,再将各乘积相 加。所以向量点积的结果是一标量而非向量。 点积运算函数是:dot(A,B),A、B是维数相同的两向量。 【例2.6】向量点积运算。 >>A=1:10:B=1 inspace(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所决定的平 面。用三维坐标表示时 ·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=Axi+Ayj+A:k B=Bxi+Byj+B:k C=AxB=(Ay B:-A:B)i+(A:Bx-Ax B:)+(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= 3 B= 345 E- -2 4-2 【例2.8】非法向量叉积运算(不等于三维的向量做叉积运算)。 >>A=1:4,B=3:6,C=[12],D=[34] >>E=cross(A,B),F=cross(C,D) 其运行结果为 A= 1 2 3 B= 3 5 6 C= 1 2 D= 2 4 ??Error using ==cross A and B must have at least one dimension of length 3. 3.混合积运算 综合运用上述两个函数就可实现点积和叉积的混合运算,该运算也只能发生在三维向 量之间,现示例如下。 【例2.9】向量混合积示例。 >A=[123],B=[334],C=[321] >>D=dot(C,cross(A,B)) 其运行结果为 A= 2 3 B= 3 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 =
第2章ATLAB语言基础 ·31· 2 D= 请问:点叉积函数的顺序是否可以颠倒? 2.3矩阵运算 矩阵运算是MATLAB特别引入的一种运算。一般高级语言只定义了标量(语言中通常 分为常量和变量)的各种运算,MATLAB将此推广,把标量换成了矩阵,而标量则成了矩 阵的元素或视为矩阵的特例。如此一来,MATLAB既可用简单的方法解决原本复杂的矩阵 运算问题,又可向下兼容处理标量运算。 为方便后续的讨论,本节准备在讨论矩阵运算之前先用两小节将矩阵元素的存储次序 和表示方法进行说明。 2.3.1矩阵元素的存储次序 假设有一个m×n阶的矩阵A,如果用符号i表示它的行下标,用符号j表示它的列下 标,那么这个矩阵中第i行、第j列的元素就可表示为A(,)。 如果要将一个矩阵存储在计算机中,MATLAB规定矩阵元素在存储器中的存放次序是 按列的先后顺序存放,即存完第1列后,再存第2列,依次类推。例如有一个3×4阶的矩 阵B,若要把它存储在计算机中,其存放次序就如表2-7所列。 表2-7矩阵B的各元素存储次序 次序 元 素 次序 元 素 次序 元素 次序 元素 1 B(1,1) 4 B(1,2) B(1,3) 10 B(1,4) 2 B(21) B(2,2) B(2.3) 11 B(2.4) 3 B(3,1) 6 B(3,2) 9 B(3,3) 12 B(3,4) 作为矩阵的特例,一维数组或者说向量元素是依其元素本身的先后次序进行存储的。 必须指出,不是所有高级语言都这样规定矩阵(或数组)元素的存储次序,例如C语言 就是按行的先后顺序来存放数组元素,即存完第1行后,再存第2行,依次类推。记住这 一点对正确使用高级语言的接口技术是十分有益的。 2.3.2矩阵元素的表示及相关操作 弄清了矩阵元素的存储次序,现在来讨论矩阵元素的表示方法和应用。在MATLAB 中,矩阵除了以矩阵名为单位整体被引用外,还可能涉及对矩阵元素的引用操作,所以矩 阵元素的表示也是一个必须交待的问题。 1.元素的下标表示法 矩阵元素的表示采用下标法。在MATLAB中有全下标方式和单下标方式两种方案, ·31
第 2 章 MATLAB 语言基础 ·31· ·31· 3 2 1 D = 4 请问:点叉积函数的顺序是否可以颠倒? 2.3 矩 阵 运 算 矩阵运算是 MATLAB 特别引入的一种运算。一般高级语言只定义了标量(语言中通常 分为常量和变量)的各种运算,MATLAB 将此推广,把标量换成了矩阵,而标量则成了矩 阵的元素或视为矩阵的特例。如此一来,MATLAB 既可用简单的方法解决原本复杂的矩阵 运算问题,又可向下兼容处理标量运算。 为方便后续的讨论,本节准备在讨论矩阵运算之前先用两小节将矩阵元素的存储次序 和表示方法进行说明。 2.3.1 矩阵元素的存储次序 假设有一个 m×n 阶的矩阵 A,如果用符号 i 表示它的行下标,用符号 j 表示它的列下 标,那么这个矩阵中第 i 行、第 j 列的元素就可表示为 A(i,j)。 如果要将一个矩阵存储在计算机中,MATLAB 规定矩阵元素在存储器中的存放次序是 按列的先后顺序存放,即存完第 1 列后,再存第 2 列,依次类推。例如有一个 3×4 阶的矩 阵 B,若要把它存储在计算机中,其存放次序就如表 2-7 所列。 表 2-7 矩阵 B 的各元素存储次序 次序 元 素 次序 元 素 次序 元 素 次序 元 素 1 B(1,1) 4 B(1,2) 7 B(1,3) 10 B(1,4) 2 B(2,1) 5 B(2,2) 8 B(2,3) 11 B(2,4) 3 B(3,1) 6 B(3,2) 9 B(3,3) 12 B(3,4) 作为矩阵的特例,一维数组或者说向量元素是依其元素本身的先后次序进行存储的。 必须指出,不是所有高级语言都这样规定矩阵(或数组)元素的存储次序,例如 C 语言 就是按行的先后顺序来存放数组元素,即存完第 1 行后,再存第 2 行,依次类推。记住这 一点对正确使用高级语言的接口技术是十分有益的。 2.3.2 矩阵元素的表示及相关操作 弄清了矩阵元素的存储次序,现在来讨论矩阵元素的表示方法和应用。在 MATLAB 中,矩阵除了以矩阵名为单位整体被引用外,还可能涉及对矩阵元素的引用操作,所以矩 阵元素的表示也是一个必须交待的问题。 1. 元素的下标表示法 矩阵元素的表示采用下标法。在 MATLAB 中有全下标方式和单下标方式两种方案
·32· MATLAB基础及其应用教程 现分述如下: (1)全下标方式:用行下标和列下标来标示矩阵中的一个元素,这是一个被普遍接受 和采用的方法。对一个mxn阶的矩阵A,其第i行、第j列的元素用全下标方式就表示成 Ai)。 (2)单下标方式:将矩阵元素按存储次序的先后用单个数码顺序地连续编号。仍以m×n 阶的矩阵A为例,全下标元素A,)对应的单下标表示便是A(s),其中s=-1)×m十i。 必须指出,i、广小、3这些下标符号,不能只将其视为单数值下标,也可理解成用向量表 示的一组下标,全面准确的理解请分析例2.10及其运行后的结果。 【例2.10】元素的下标表示。 >>A=[123:654:879] A= 123 654 8 7 9 >>A(2,3),A(6)号显示矩阵中全下标元素A(2,3)和单下标元素A(6)的值 ans 4 ans 7 >>A(1:2,3) 号显示矩阵A第1、2两行的第3列的元素值 ans 3 4 >>A(6:8) 各显示矩阵A单下标第6~8号元素的值,此处是用一向量表示一下标区间 ans 7 3 4 2.矩阵元素的赋值 矩阵元素的赋值有3种方式:全下标方式、单下标方式和全元素方式。必须声明,用 后两种方式赋值的矩阵必须是被引用过的矩阵,否则,系统会提示出错信息。 (1)全下标方式:在给矩阵的单个或多个元素赋值时,采用全下标方式接收。 【例2.11】全下标接收元素赋值。 >>clear 号不要因工作空间中己有内容干扰了后面的运算 >>A(1:2,1:3)=[111;111]号可用一矩阵给矩阵A的1~2行1~3列的全部元素赋值为1 A= 111 1 1 1 >>A(3,3)=2 给原矩阵中并不存在的元素下标赋值会扩充矩阵阶数,注 意补0的原则 A= 1 1 1 1 002 (2)单下标方式:在给矩阵的单个或多个元素赋值时,采用单下标方式接收。 ·32·
·32· MATLAB 基础及其应用教程 ·32· 现分述如下: (1) 全下标方式:用行下标和列下标来标示矩阵中的一个元素,这是一个被普遍接受 和采用的方法。对一个 m×n 阶的矩阵 A,其第 i 行、第 j 列的元素用全下标方式就表示成 A(i,j)。 (2) 单下标方式:将矩阵元素按存储次序的先后用单个数码顺序地连续编号。仍以 m×n 阶的矩阵 A 为例,全下标元素 A(i,j)对应的单下标表示便是 A(s),其中 s = (j-1)×m+i。 必须指出,i、j、s 这些下标符号,不能只将其视为单数值下标,也可理解成用向量表 示的一组下标,全面准确的理解请分析例 2.10 及其运行后的结果。 【例 2.10】 元素的下标表示。 >>A=[1 2 3;6 5 4;8 7 9] A = 1 2 3 6 5 4 8 7 9 >>A(2,3),A(6) %显示矩阵中全下标元素 A(2,3)和单下标元素 A(6)的值 ans = 4 ans = 7 >>A(1:2,3) %显示矩阵 A 第 1、2 两行的第 3 列的元素值 ans = 3 4 >>A(6:8) %显示矩阵 A 单下标第 6~8 号元素的值,此处是用一向量表示一下标区间 ans = 7 3 4 2. 矩阵元素的赋值 矩阵元素的赋值有 3 种方式:全下标方式、单下标方式和全元素方式。必须声明,用 后两种方式赋值的矩阵必须是被引用过的矩阵,否则,系统会提示出错信息。 (1) 全下标方式:在给矩阵的单个或多个元素赋值时,采用全下标方式接收。 【例 2.11】 全下标接收元素赋值。 >>clear %不要因工作空间中已有内容干扰了后面的运算 >>A(1:2,1:3)=[1 1 1;1 1 1] %可用一矩阵给矩阵 A 的 1~2 行1~3 列的全部元素赋值为 1 A = 1 1 1 1 1 1 >>A(3,3)=2 %给原矩阵中并不存在的元素下标赋值会扩充矩阵阶数,注 %意补 0 的原则 A = 1 1 1 1 1 1 0 0 2 (2) 单下标方式:在给矩阵的单个或多个元素赋值时,采用单下标方式接收