6.1矩阵
6.1.6复制行和列:平铺
6.1.7删除行和列
6.1.8初等矩阵
6.1.9 特殊矩阵
6.1.10使用带有矩阵的MATLAB函数
有时生成一个所有行或列都相同的矩阵是有用的。这可以使用repmat函数完成,如下所示。如果a是行向量
>> clear
>> a =[1 2 3]
a =
1 2 3
>> repmat(a, [3 1])
ans =
1 2 3
1 2 3
1 2 3
在这个例子中,向量a为[1 2 3]。repmat函数用于将一个矩阵或向量重复多次,第一个参数为要重复的矩阵或向量,第二个参数为重复的次数。因此,repmat(a, [3 1])
表示将向量a重复3
次,每次沿着列
的方向重复1
次。具体来说,这个语句将返回一个大小为3x3的矩阵,其中第一行为[1 2 3],第二行为[1 2 3],第三行为[1 2 3],即将向量a沿着行的方向重复了3次。
repmat还有另一种语法:
repmat(a, 3, 1)
使用冒号操作符和空数组来删除整个行或列,例如:a(:,2) = [ ]
删除a的第二列。
你不能从矩阵中删除一个元素同时又保持它是一个矩阵,所以像a(1,2) = [ ]
导致错误。
但是,使用单个下标符号可以从矩阵中删除元素序列,并将剩余元素重新塑造成行向量,例如,如果
>> a =[1 2 3;4 5 6;7 8 9]
a =
1 2 3
4 5 6
7 8 9
>> a(2:2:6) = [ ]
a =
1 7 5 3 6 9
首先通过列展开a,[1 4 7 2 5 8 3 6 9], 然后删除第2、4、6个元素。得到[1 7 5 3 6 9]
还可以使用逻辑向量从矩阵中提取行或列的选择,例如,如果a是上面定义的原始3 × 3矩阵,则语句
>> a =[1 2 3;4 5 6;7 8 9]
a =
1 2 3
4 5 6
7 8 9
>> a(:, logical([1 0 1]))
ans =
1 3
4 6
7 9
在这个例子中,矩阵a的大小为3x3,即3行3列。a(:, logical([1 0 1]))
表示选择矩阵a的所有行,但只选择第1列和第3列。logical([1 0 1])将向量[1 0 1]转换为逻辑向量,其中1表示选择对应的列,0表示不选择。因此,这个语句将返回一个大小为3x2的矩阵,其中第一列和第三列的元素被选择,第二列的元素被排除。具体来说,返回的矩阵为:
1 3
4 6
7 9
注意,逻辑向量可以用于选择矩阵的行或列,以及选择向量的元素。
初等矩阵是一种特殊的方阵,通过对单位矩阵进行一次初等行变换得到。初等行变换包括交换两行、某一行乘以一个非零常数、某一行加上另一行的若干倍。
举例来说,函数zeros、ones和rand分别生成由0、1和随机数构成的矩阵。当只有一个参数n时,它们生成n×n
(方)矩阵。当有两个参数n和m时,它们生成n×m
矩阵。对于非常大的矩阵,repmat
函数通常比ones
和zeros
函数更快。
函数eye(n)
生成一个n×n
单位矩阵,即主“对角线”上为1,其他地方为0的矩阵.
举例说明,假设我们有一个 的单位矩阵:
I = eye(3)
输出结果为:
I =
1 0 0
0 1 0
0 0 1
可以使用以下函数来实现矩阵的初等变换:
可以使用 A([i j], :) = A([j i], :)
来交换矩阵 的第 行和第 行。例如,对于一个 的矩阵 :
A = [1 2 3; 4 5 6; 7 8 9];
可以使用以下代码交换第 1 行和第 3 行:
A([1 3], :) = A([3 1], :);
输出结果为:
A =
7 8 9
4 5 6
1 2 3
可以看到,我们交换了矩阵 的第 1 行和第 3 行。
可以使用 A(i, :) = k * A(i, :)
来将矩阵 的第 行乘以一个非零常数 。例如,对于一个 的矩阵 :
A = [1 2 3; 4 5 6; 7 8 9];
可以使用以下代码将第 2 行乘以 2:
A(2, :) = 2 * A(2, :);
输出结果为:
A =
1 2 3
8 10 12
7 8 9
可以看到,我们将矩阵 的第 2 行乘以了 2。
可以使用 A(i, :) = A(i, :) + k * A(j, :)
来将矩阵 的第 行加上第 行的 倍。例如,对于一个 的矩阵 :
A = [1 2 3; 4 5 6; 7 8 9];
可以使用以下代码将第 2 行加上第 1 行的 2 倍:
A(2, :) = A(2, :) + 2 * A(1, :);
输出结果为:
A =
1 2 3
6 9 12
7 8 9
可以看到,我们将矩阵 的第 2 行加上了第 1 行的 2 倍。
下面的函数可用于生成任意矩阵,当您无法自己生成矩阵运算时,可以使用这些函数来研究矩阵运算。它们是数学家发现的特殊矩阵,它们发现的动机和其他你不需要了解的细节。
函数pascal(n)
可以用来生成一个大小为n×n的帕斯卡矩阵。帕斯卡矩阵是一个特殊的三角形矩阵,其第i行第j列的元素为C(i-1,j-1),其中C(i,j)表示组合数,即从i个元素中选取j个元素的组合数。帕斯卡矩阵的第一列和主对角线上的元素都为1,其余元素为前一行和前一列对应元素之和。例如,pascal(4)生成的帕斯卡矩阵为:
>> pascal(4)
ans =
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20
magic(n)
是Matlab中的一个函数,用于生成一个 的幻方矩阵。幻方矩阵指的是在一个 的方阵内填入 的自然数,使得每行、每列和对角线上的数字之和相等。
具体来说,magic(n)
函数会生成一个 的幻方矩阵 ,其中 表示在第 行第 列的数字。例如,对于 ,magic(n)
的输出结果为:
>> magic(3)
8 1 6
3 5 7
4 9 2
可以看到,这个 的矩阵满足每行、每列和对角线上的数字之和都等于 。具体来说,第一行的数字和为 ,第二行的数字和为 ,第三行的数字和为 ,第一列的数字和为 ,第二列的数字和为 ,第三列的数字和为 ,主对角线的数字和为 ,副对角线的数字和为 。
需要注意的是,幻方矩阵只存在于 时,当 时不存在幻方矩阵。
当一个MATLAB数学或三角函数有一个矩阵参数时,这个函数作用于矩阵的每个元素,正如你所期望的那样。然而,许多其他MATLAB函数对矩阵逐列操作,例如
>> a =[1 0 1;1 1 1;0 0 1]
a =
1 0 1
1 1 1
0 0 1
>> all(a)
ans =
1×3 logical 数组
0 0 1
对于a中所有元素都为真(非零)的每一列,all返回1,否则返回0。因此,all在接受矩阵参数时返回一个逻辑向量。
>> all(all(a))
ans =
logical
0
要测试a的所有元素是否都为真,使用两次all。在这个例子中,all(all(a))
返回0,因为a中的一些元素是0.
>> any(a)
ans =
1×3 logical 数组
1 1 1
>> any(any(a))
ans =
logical
1
因为a的每一列至少有一个非零元素,any(any(a))返回1,因为a本身至少有一个非零元素。
联系客服