第2章ATLAB语言基础 31… 0、3 2 1 4 请问:点叉积函数的顺序是否可以颠倒? 2.3矩阵运算 矩阵运算是MATLAB特别引入的一种运算。一般高级语言只定义了标量(语言中通常 分为常量和变量)的各种运算,MATLAB将此推广,把标量换成了矩阵,而标量则成了矩 阵的元素或视为矩阵的特例。如此一来,MATLAB既可用简单的方法解决原本复杂的矩阵 运算问题,又可向下兼容处理标量运算。 为方便后续的讨论,本节准备在讨论矩阵运算之前先用两小节将矩阵元素的存储次序 和表示方法进行说明。 2.3.1矩阵元素的存储次序 假设有一个m×阶的矩阵A,如果用符号1表示它的行下标,用符号/表示它的列下 标,那么这个矩阵中第i行、第j列的元素就可表示为A()。 如果要将一个矩阵存储在计算机中,MATLAB规定矩阵元素在存储器中的存放次序是 按列的先后顺序存放,即存完第1列后,再存第2列,依次类推。例如有一个3x4阶的矩 阵B,若要把它存储在计算机中,其存放次序就如表2-7所列。 表2-7矩阵B的各元素存储次序 次房 元素 次序 元素 次序 元素 次序 元素 B1,) B1,2) 7 BH13) 10 B14) 2 B(2,1) B22) B2,3) 11 B2.4) 3 B3.I) 6 B32) 9 B33) 12 B3.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. 工,AB基础及应用教程 现分述如下: )全下标方式:用行下标和列下标来标示矩阵中的一个元素,这是一个被普遍接受 和采用的方法。对一个m×阶的矩阵A,其第1行、第/列的元素用全下标方式就表示成 A。 (②)单下标方式:将矩阵元素按存储次序的先后用单个数码顺序地连续编号。仍以m× 阶的矩阵A为例,全下标元素A对应的单下标表示使是AS,其中s=(一I)xm十 必须指出,、人3这些下标符号,不能只将其视为单数值下标,也可理解成用向量表 示的一组下标,全面准确的理解请分析例2.10及其运行后的结果。 【例2.10】元素的下标表示。 >n=123;654;8791 A 3 5 >A(2,3),A(6)显示矩阵中全下标元素A2,3)和单下标元素A6)的值 ans ans A1:2,3) 是示矩阵A第1、2两行的第3列的元素值 3 22A6:8 显示矩阵A单下标第6~8号元素的值,此处是用一向量表示一下标区间 ans 7 3 4 2.矩阵元素的赋值 矩阵元素的赋值有3种方式:全下标方式、单下标方式和全元素方式。必须声明,用 后两种方式赋值的矩阵必须是被引用过的矩阵,否则 系统会提示出错信息 ()全下标方式:在给矩阵的单个或多个元素赋值时,采用全下标方式接收。 【例2.11】全下标接收元素赋值。 A= 23A(3,3)=2 给原矩阵中并不存在的元素下标赋值会扩充矩阵阶数,注 意补0的原则 A 11 (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) 单下标方式:在给矩阵的单个或多个元素赋值时,采用单下标方式接收
第2章ATLAB语言基础 33 【例2.12】单下标接收元素赋值(续例2.11). 意可用一向量给单下标表示的连续多个矩阵元素赋值 A3-0:A16)0 用单下标对单一元泰赋值 3)全元素方式:将矩阵B的所有元素全部赋值给矩阵A,即A尸B,不要求A、B 同 只要求元素 个数相等 例2.13】全元素方式赋位: 将一向量按列之先后赋值给矩阵A,A在上例已被引用 a.d6,a045关4设890e。 4、 。 1470 B. 13 0 老将4×3阶矩阵日按列全部赋给3×4阶矩阵A 3.矩阵元素的删除 在MATLAB中,可以用空矩阵(用即表示)将矩阵中的单个元素、某行、某列、某矩阵 子块及整个矩阵中的元素别除。 【例2.14】删除元素操作。 生成一新矩阵A >A(2,:)=1 老别除A矩阵的第2行,“:”可表示所有行或列 ·33
第 2 章 MATLAB 语言基础 ·33· ·33· 【例 2.12】 单下标接收元素赋值(续例 2.11)。 >>A(3:6)=[-1 1 1 -1] %可用一向量给单下标表示的连续多个矩阵元素赋值 A = 1 1 1 1 1 1 -1 -1 2 >> A(3)=0;A(6)=0 %用单下标对单一元素赋值 A = 1 1 1 1 1 1 0 0 2 (3) 全元素方式:将矩阵 B 的所有元素全部赋值给矩阵 A,即 A(:)=B,不要求 A、B 同阶,只要求元素个数相等。 【例 2.13】 全元素方式赋值。 >> A(:)=1:9 %将一向量按列之先后赋值给矩阵 A,A 在上例已被引用 A = 1 4 7 2 5 8 3 6 9 >> A(3,4)=16,B=[11 12 13;14 15 16;17 18 19;0 0 0] %扩充矩阵 A,生成 4×3 阶矩阵 B A = 1 4 7 0 2 5 8 0 3 6 9 16 B = 11 12 13 14 15 16 17 18 19 0 0 0 >> A(:)=B %将 4×3 阶矩阵 B 按列全部赋给 3×4 阶矩阵 A A = 11 0 18 16 14 12 0 19 17 15 13 0 3. 矩阵元素的删除 在 MATLAB 中,可以用空矩阵(用[]表示)将矩阵中的单个元素、某行、某列、某矩阵 子块及整个矩阵中的元素删除。 【例 2.14】 删除元素操作。 >>clear >>A(2:3,2:3)=[1 1;2 2] %生成一新矩阵 A A = 0 0 0 0 1 1 0 2 2 >> A(2,:)=[] %删除 A 矩阵的第 2 行,“:”可表示所有行或列
…34. 工,AB基础及其应用教程 A 00 制除新矩阵A的前两个单下标元素,矩阵变成向量 。 2 副除所有元素 2.3.3矩阵的创建 在MATLAB中建立矩阵的方法很多,本节将介绍7种,它们分别是:直接输入法, 抽取法、拼接法、函数法、拼接函数和变形函数法、加载法和M文件法。不同的方法往往 适用于不同的场合和需要】 因为珠是伦B行别入的品。所以在表达时必须验出一志相夫萄的红 ()矩阵的所有元素必须放在方括号(们)内: (2)每行的元素之间需用逗号或空格隔开: (3)矩阵的行与行之间用分号或回车符分隔 (4)元素可以是数值或表达式。 这些约定同样适用于2.4节将要讨论的数组。 1.直接输入法 在命令行提示符“>”后,直接输入一矩阵的方法即是直接输入法。直接输入法对建 立规模较小的矩阵是相当方便的,特别适用于在命令窗口讨论问题的场合,也适用于在程 序中给矩阵变量赋初值。 【例2.15】用直接输入法建立矩阵。 22c345 用回车符而非分号分隔矩阵各行 >>A,B,C 其运算结果为 A- 121314 c 4 34
·34· MATLAB 基础及其应用教程 ·34· A = 0 0 0 0 2 2 >> A(1:2)=[] %删除新矩阵 A 的前两个单下标元素,矩阵变成向量 A = 0 2 0 2 >> A=[] %删除所有元素 A = [] 2.3.3 矩阵的创建 在 MATLAB 中建立矩阵的方法很多,本节将介绍 7 种,它们分别是:直接输入法、 抽取法、拼接法、函数法、拼接函数和变形函数法、加载法和 M 文件法。不同的方法往往 适用于不同的场合和需要。 因为矩阵是 MATLAB 特别引入的量,所以在表达时,必须给出一些相关的约定与其 他量区别,这些约定是: (1) 矩阵的所有元素必须放在方括号([])内; (2) 每行的元素之间需用逗号或空格隔开; (3) 矩阵的行与行之间用分号或回车符分隔; (4) 元素可以是数值或表达式。 这些约定同样适用于 2.4 节将要讨论的数组。 1. 直接输入法 在命令行提示符“>>”后,直接输入一矩阵的方法即是直接输入法。直接输入法对建 立规模较小的矩阵是相当方便的,特别适用于在命令窗口讨论问题的场合,也适用于在程 序中给矩阵变量赋初值。 【例 2.15】 用直接输入法建立矩阵。 >>x=27;y=3; >>A=[1 2 3;4 5 6];B=[2,3,4;7,8,9;12,2*6+1,14]; >>C=[3 4 5 7 8 x/y 10 11 12]; %用回车符而非分号分隔矩阵各行 >>A,B,C 其运算结果为 A = 1 2 3 4 5 6 B = 2 3 4 7 8 9 12 13 14 C = 3 4 5 7 8 9 10 11 12
第2章ATLAB语言基础 35 2.抽取法 抽取法是从大矩阵中抽取出需要的小矩阵(或子矩阵)。线性代数中分块矩阵就是一个 典型的从大矩阵中取出子矩阵块的实例。 矩阵的抽取实质是元素的抽取,依据232节的介绍,用元素下标的向量表示从大矩阵 中去提取元素就能完成抽取过程。 1)用全下标方式 【例2.16】用全下标抽取法建立子矩阵。 >>clear >A=[1234:5678:9101112131415161 。 8 3 >B=A(1:3,2:3) 多取矩阵A行数为1~3,列数为2一3的元素构成子矩阵B B= 2 6 取矩阵A行数为1、3,列数为2、4的元素构成子矩阵G c。 2 >D=a(4,) 取矩阵第4行,所有列,“:”可表示所有行或列 D w (.end) 16 飞取1、4行,最后列,用“end”表示某一维数中的最大值 B= 16 2)用单下标方式 【例2.17】用单下标抽取法建立子矩阵。 >>clear 123:5678910112711425161 2 3 4 13 14 15 16 >B=A([4:6;357;12:141) 132 6 本例是从矩阵A中取出单下标4一6的元素做第1行,单下标3、5、7这3个元素做 第2行,单下标12 ~14的元素做第3行,生成一3x3阶新矩阵B.若用B=A4:6,[35712:14 ·35
第 2 章 MATLAB 语言基础 ·35· ·35· 2. 抽取法 抽取法是从大矩阵中抽取出需要的小矩阵(或子矩阵)。线性代数中分块矩阵就是一个 典型的从大矩阵中取出子矩阵块的实例。 矩阵的抽取实质是元素的抽取,依据 2.3.2 节的介绍,用元素下标的向量表示从大矩阵 中去提取元素就能完成抽取过程。 1) 用全下标方式 【例 2.16】 用全下标抽取法建立子矩阵。 >>clear >>A=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16] A = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 >>B=A(1:3,2:3) % 取矩阵 A 行数为 1~3,列数为 2~3 的元素构成子矩阵 B B = 2 3 6 7 10 11 >>C=A([1 3],[2 4]) %取矩阵 A 行数为 1、3,列数为 2、4 的元素构成子矩阵 C C = 2 4 10 12 >>D=A(4,:) %取矩阵 A 第 4 行,所有列,“:”可表示所有行或列 D = 13 14 15 16 >>E=A([2 4],end) %取 1、4 行,最后列,用“end”表示某一维数中的最大值 E = 8 16 2) 用单下标方式 【例 2.17】 用单下标抽取法建立子矩阵。 >>clear >>A=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16] A = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 >>B=A([4:6;3 5 7;12:14]) B = 13 2 6 9 2 10 15 4 8 本例是从矩阵 A 中取出单下标 4~6 的元素做第 1 行,单下标 3、5、7 这 3 个元素做 第2行,单下标12~14的元素做第3行,生成一3×3阶新矩阵B。若用B=A([4:6;[3 5 7];12:14])