第2章ATLAB语言基础 ·33· 【例2.12】单下标接收元素赋值(续例2.11)。 >A(3:6)=[-111-1] 号可用一向量给单下标表示的连续多个矩阵元素赋值 A= 111 1 1 1 -1-12 >>A(3)=0;A(6)=0 号用单下标对单一元素赋值 A= 111 111 002 (3)全元素方式:将矩阵B的所有元素全部赋值给矩阵A,即A(:)=B,不要求A、B 同阶,只要求元素个数相等。 【例2.13】全元素方式赋值。 >>A(:)=1:9 鲁将一向量按列之先后赋值给矩阵A,A在上例己被引用 A= 1 47 2 58 69 >>A(3,4)=16,B=[111213;141516:171819;000] 号扩充矩阵A,生成4×3阶矩阵B A= 47 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= 11018 16 14 12 0 19 17 1513 0 3.矩阵元素的删除 在MATLAB中,可以用空矩阵(用D表示)将矩阵中的单个元素、某行、某列、某矩阵 子块及整个矩阵中的元素删除。 【例2.14】删除元素操作。 >>clear >>A(2:3,2:3)=[11;22] 号生成一新矩阵A A= 000 011 022 >>A(2,:)=[] 号删除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· MATLAB基础及其应用教程 A= 000 022 >>A(1:2)=[] 号删除新矩阵A的前两个单下标元素,矩阵变成向量 A= 020 >>A=[] g删除所有元素 A= [] 2.3.3矩阵的创建 在MATLAB中建立矩阵的方法很多,本节将介绍7种,它们分别是:直接输入法、 抽取法、拼接法、函数法、拼接函数和变形函数法、加载法和M文件法。不同的方法往往 适用于不同的场合和需要。 因为矩阵是MATLAB特别引入的量,所以在表达时,必须给出一些相关的约定与其 他量区别,这些约定是: (1)矩阵的所有元素必须放在方括号(0)内; (2)每行的元素之间需用逗号或空格隔开: (3)矩阵的行与行之间用分号或回车符分隔: (4)元素可以是数值或表达式。 这些约定同样适用于2.4节将要讨论的数组。 1.直接输入法 在命令行提示符“>”后,直接输入一矩阵的方法即是直接输入法。直接输入法对建 立规模较小的矩阵是相当方便的,特别适用于在命令窗口讨论问题的场合,也适用于在程 序中给矩阵变量赋初值。 【例2.15】用直接输入法建立矩阵。 >>x=27;y=3i >A=[123;456]:B=[2,3,4;7,8,9;12,2*6+1,14]; >>C-=[345 78x/y 101112]; 鲁用回车符而非分号分隔矩阵各行 >>A,B,C 其运算结果为 A= 1 2 3 4 6 B= 2 3 7 8 12 13 14 C= 3 5 7 9 10 11 12 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章MATLAB语言基础 ·35 2.抽取法 抽取法是从大矩阵中抽取出需要的小矩阵(或子矩阵)。线性代数中分块矩阵就是一个 典型的从大矩阵中取出子矩阵块的实例。 矩阵的抽取实质是元素的抽取,依据2.3.2节的介绍,用元素下标的向量表示从大矩阵 中去提取元素就能完成抽取过程。 1)用全下标方式 【例2.16】用全下标抽取法建立子矩阵。 >>clear >>A=[1234:5678;9101112:13141516] A= 12 3 4 5 6 7 8 9 1011 12 13141516 >>B=A(1:3,2:3) 号取矩阵A行数为1一3,列数为23的元素构成子矩阵B B= 23 6 7 1011 >>C=A([13],[24]) 取矩阵A行数为1、3,列数为2、4的元素构成子矩阵C C= 2 4 1012 >>D=A(4,:) 号取矩阵A第4行,所有列,“:”可表示所有行或列 D= 13141516 >>E=A([24],end) 号取1、4行,最后列,用“end”表示某一维数中的最大值 E= 8 16 2)用单下标方式 【例2.17】用单下标抽取法建立子矩阵。 >>clear >>A=[1234;5678:9101112:13141516] A= 1 234 5 6 7 8 910 1112 131415 16 >>B=A([4:6:357:12:14]) B= 132 6 9 210 1548 本例是从矩阵A中取出单下标4~6的元素做第1行,单下标3、5、7这3个元素做 第2行,单下标12~14的元素做第3行,生成一3×3阶新矩阵B.若用B=A([4:6:357乃12: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])
·36· MATLAB基础及其应用教程 的格式去抽取也是正确的,关键在于若要抽取出矩阵,就必须在单下标引用中的最外层加 上一对方括号,以满足MATLAB对矩阵的约定。另外,其中的分号也不能少。分号若改 写成逗号时,矩阵将变成向量,例如用C=A([4:5,7,10:13])抽取,则结果为C=[1321071115 4]。 3.拼接法 行数与行数相同的小矩阵可在列方向扩展拼接成更大的矩阵。同理,列数与列数相同 的小矩阵可在行方向扩展拼接成更大的矩阵。 【例2.18】小矩阵拼成大矩阵。 >>A=[123:456:789],B=[98;76:54],C=[456:789] A- 2 3 4 5 6 7 8 9 B= 9 8 7 6 5 4 C= 4 5 6 7 8 9 >E=[A B;B A] 行列两个方向同时拼接,请留意行、列数的匹配问题 E= 2 8 4 5 6 6 > 9 S 1 3 7 6 S 6 5 9 >>F=[A;C] A、C列数相同,沿行向扩展拼接 1 2 3 4 5 6 7 9 4 5 6 7 9 4.函数法 MATLAB有许多函数可以生成矩阵,大致可分为基本函数和特殊函数两类。基本函数 主要生成一些常用的工具矩阵,如表2-8所示。特殊函数则生成一些特殊矩阵,如希尔伯 特矩阵、魔方矩阵、帕斯卡矩阵、范德蒙矩阵等,这些矩阵如表2-9所示。 表2-8常用工具矩阵生成函数 西 数 功能 zeros(m,n) 生成mxn阶的全0矩阵 ones(m.n) 生成mn阶的全1矩阵 ·36·
·36· MATLAB 基础及其应用教程 ·36· 的格式去抽取也是正确的,关键在于若要抽取出矩阵,就必须在单下标引用中的最外层加 上一对方括号,以满足 MATLAB 对矩阵的约定。另外,其中的分号也不能少。分号若改 写成逗号时,矩阵将变成向量,例如用 C=A([4:5,7,10:13])抽取,则结果为 C=[13 2 10 7 11 15 4]。 3. 拼接法 行数与行数相同的小矩阵可在列方向扩展拼接成更大的矩阵。同理,列数与列数相同 的小矩阵可在行方向扩展拼接成更大的矩阵。 【例 2.18】 小矩阵拼成大矩阵。 >> A=[1 2 3;4 5 6;7 8 9],B=[9 8;7 6;5 4],C=[4 5 6;7 8 9] A = 1 2 3 4 5 6 7 8 9 B = 9 8 7 6 5 4 C = 4 5 6 7 8 9 >> E=[A B;B A] %行列两个方向同时拼接,请留意行、列数的匹配问题 E = 1 2 3 9 8 4 5 6 7 6 7 8 9 5 4 9 8 1 2 3 7 6 4 5 6 5 4 7 8 9 >> F=[A;C] %A、C 列数相同,沿行向扩展拼接 1 2 3 4 5 6 7 8 9 4 5 6 7 8 9 4. 函数法 MATLAB 有许多函数可以生成矩阵,大致可分为基本函数和特殊函数两类。基本函数 主要生成一些常用的工具矩阵,如表 2-8 所示。特殊函数则生成一些特殊矩阵,如希尔伯 特矩阵、魔方矩阵、帕斯卡矩阵、范德蒙矩阵等,这些矩阵如表 2-9 所示。 表 2-8 常用工具矩阵生成函数 函 数 功 能 zeros(m,n) 生成 m×n 阶的全 0 矩阵 ones(m,n) 生成 m×n 阶的全 1 矩阵
第2章ATLAB语言基础 ·37· 续表 函数 功能 rand(m,n) 生成取值在0~1之间满足均匀分布的随机矩阵 randn(m,n) 生成满足正态分布的随机矩阵 eye(m,n) 生成mxn阶的单位矩阵 表2-9 特殊矩阵生成函数 函数 功能 函数 功能 compan Companion矩阵 magic 魔方矩阵 gallery Higham测试矩阵 pascal 帕斯卡矩阵 hadamard Hadamard矩阵 rosser 经典对称特征值测试矩阵 hankel Hankel矩阵 toeplitz Toeplitz矩阵 hilb Hilbert矩阵 vander 范德蒙矩阵 invhilb 反Hilbert矩阵 wilkinson Wilkinson's特征值测试矩阵 在表2-8的常用工具矩阵生成函数中,除了ye外,其他函数都能生成三维以上的多 维数组(2.4.2节将给出介绍),而eye(m,n)可生成非方阵的单位阵。 【例2.19】用函数生成矩阵。 >>A=ones(3,4),B=eye(3,4),C=magic(3) A= 1 1 1 1 1 1 1 1 1 1 B= 10 0 0 0 1 0 0 0 0 1 0 C= 8 6 3 5 4 9 >format rat;D=hilb(3),E=pascal(4) 号rat的数值显示格式可将小数用分数表示 D= 1 1/2 1/3 1/2 1/3 1/4 1/3 1/4 1/5 E- 1 1 1 1 1 3 4 1 3 6 10 1 4 10 20 n阶魔方矩阵的特点是每行、每列和两对角线上的元素之和各等于(n3+)/2。例如上例 中3阶魔方阵每行、每列和两对角线元素和为15。希尔伯特矩阵的元素在行、列方向和对 ·37
第 2 章 MATLAB 语言基础 ·37· ·37· 续表 函 数 功 能 rand(m,n) 生成取值在 0~1 之间满足均匀分布的随机矩阵 randn(m,n) 生成满足正态分布的随机矩阵 eye(m,n) 生成 m×n 阶的单位矩阵 表 2-9 特殊矩阵生成函数 函 数 功 能 函 数 功 能 compan Companion 矩阵 magic 魔方矩阵 gallery Higham 测试矩阵 pascal 帕斯卡矩阵 hadamard Hadamard 矩阵 rosser 经典对称特征值测试矩阵 hankel Hankel 矩阵 toeplitz Toeplitz 矩阵 hilb Hilbert 矩阵 vander 范德蒙矩阵 invhilb 反 Hilbert 矩阵 wilkinson Wilkinson's 特征值测试矩阵 在表 2-8 的常用工具矩阵生成函数中,除了 eye 外,其他函数都能生成三维以上的多 维数组(2.4.2 节将给出介绍),而 eye(m,n)可生成非方阵的单位阵。 【例 2.19】 用函数生成矩阵。 >>A=ones(3,4),B=eye(3,4),C=magic(3) A = 1 1 1 1 1 1 1 1 1 1 1 1 B = 1 0 0 0 0 1 0 0 0 0 1 0 C = 8 1 6 3 5 7 4 9 2 >> format rat;D=hilb(3),E=pascal(4) %rat 的数值显示格式可将小数用分数表示 D = 1 1/2 1/3 1/2 1/3 1/4 1/3 1/4 1/5 E = 1 1 1 1 1 2 3 4 1 3 6 10 1 4 10 20 n 阶魔方矩阵的特点是每行、每列和两对角线上的元素之和各等于(n 3 +n)/2。例如上例 中 3 阶魔方阵每行、每列和两对角线元素和为 15。希尔伯特矩阵的元素在行、列方向和对