对角矩阵:主对角线之外的元素皆为0的矩阵。
数量矩阵:主对角线上的元素相等的对角矩阵。
单位矩阵:主对角线上的元素都为1的对角矩阵。
1. 提取矩阵的对角线元素(得到一个一维矩阵)
diag(A):提取矩阵A主对角线元素,产生一个列向量。
diag(A,k):提取矩阵A第k条对角线的元素,产生一个列向量。
>> A=rand(4)
A =
0.8147 0.6324 0.9575 0.9572
0.9058 0.0975 0.9649 0.4854
0.1270 0.2785 0.1576 0.8003
0.9134 0.5469 0.9706 0.1419
>> diag(A)
ans =
0.8147
0.0975
0.1576
0.1419
>> diag(A,1)
ans =
0.6324
0.9649
0.8003
2. 构造对角矩阵(得到一个二维矩阵)
diag(V):以向量V为主对角线元素,产生对角矩阵。
diag(V,k):以向量V为第k条对角线元素,产生对角矩阵。
>> V=[1:5];
>> A=diag(V)
A =
1 0 0 0 0
0 2 0 0 0
0 0 3 0 0
0 0 0 4 0
0 0 0 0 5
>> B=diag(1:4,1)
B =
0 1 0 0 0
0 0 2 0 0
0 0 0 3 0
0 0 0 0 4
0 0 0 0 0
例1:建立5×5矩阵A,然后将A的第一行元素乘以1,第二行乘以2,…,第五行乘以5。
>> A=rand(5)
A =
0.8147 0.0975 0.1576 0.1419 0.6557
0.9058 0.2785 0.9706 0.4218 0.0357
0.1270 0.5469 0.9572 0.9157 0.8491
0.9134 0.9575 0.4854 0.7922 0.9340
0.6324 0.9649 0.8003 0.9595 0.6787
>> B=diag(1:5)
B =
1 0 0 0 0
0 2 0 0 0
0 0 3 0 0
0 0 0 4 0
0 0 0 0 5
>> C=B*A //这里使用B乘A
C = //左乘行变换,右乘列变换
0.8147 0.0975 0.1576 0.1419 0.6557
1.8116 0.5570 1.9412 0.8435 0.0714
0.3810 1.6406 2.8715 2.7472 2.5474
3.6535 3.8300 1.9415 3.1688 3.7360
3.1618 4.8244 4.0014 4.7975 3.3937
如果是想让矩阵A的第一列乘1,第二列乘2,第n列乘n,可以用右乘(相对A而言),即A*B。
上三角阵:triu函数 (triangle+up)
下三角阵:tril函数
triu(A):提取矩阵A的主对角线及以上的元素。
triu(A,k):提取矩阵A的第k条对角线及以上的元素。
tril函数同理。
>> triu(ones(4))
ans =
1 1 1 1
0 1 1 1
0 0 1 1
0 0 0 1
>> C=randn(4)
C =
1.0347 -0.7873 -0.8095 -0.7549
0.7269 0.8884 -2.9443 1.3703
-0.3034 -1.1471 1.4384 -1.7115
0.2939 -1.0689 0.3252 -0.1022
>> tril(C,-1)
ans =
0 0 0 0
0.7269 0 0 0
-0.3034 -1.1471 0 0
0.2939 -1.0689 0.3252 0
转置运算符是小数点后面接单引号(.’)。
共轭转置,其运算符是单引号(’),它在转置的基础上还要取每个数的复共轭。(复数矩阵才用)
>> A=[1:3;4:6;7:9]
A =
1 2 3
4 5 6
7 8 9
>> A.'
ans =
1 4 7
2 5 8
3 6 9
rot90函数
rot90(A,k):将矩阵A逆时针方向旋转90°的k倍,当k为1时可省略。
>> A
A =
1 2 3
4 5 6
7 8 9
>> rot90(A)
ans =
3 6 9
2 5 8
1 4 7
flipIr(A):对矩阵A实施左右翻转。
flipud(A):对矩阵A实施上下翻转。
左右翻转是指第一列和最后一列交换,第二列和倒数第二列交换…依次类推。
>> A
A =
1 2 3
4 5 6
7 8 9
>> fliplr(A)
ans =
3 2 1
6 5 4
9 8 7
>> flipud(A)
ans =
7 8 9
4 5 6
1 2 3
例2:验证魔方阵的主对角线、副对角线元素之和相等。
>> A=magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> sum(diag(A))
ans =
65
>> B=fliplr(A)
B =
15 8 1 24 17
16 14 7 5 23
22 20 13 6 4
3 21 19 12 10
9 2 25 18 11
>> sum(diag(B))
ans =
65
切记:求逆是针对方阵而言的
对于一个方阵A,如果存在一个与其同阶的方阵B,使得AB=BA=为单位矩阵,则称B为A的逆矩阵,当然, A也是B的逆矩阵。
inv函数
>> A
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> B=inv(A)
B =
-0.0049 0.0512 -0.0354 0.0012 0.0034
0.0431 -0.0373 -0.0046 0.0127 0.0015
-0.0303 0.0031 0.0031 0.0031 0.0364
0.0047 -0.0065 0.0108 0.0435 -0.0370
0.0028 0.0050 0.0415 -0.0450 0.0111
>> A*B
ans =
1.0000 -0.0000 -0.0000 -0.0000 -0.0000
0.0000 1.0000 0 0 0.0000
0.0000 -0.0000 1.0000 0.0000 -0.0000
0.0000 -0.0000 0.0000 1.0000 0.0000
-0.0000 0.0000 0.0000 0.0000 1.0000
det(A):求方阵A所对应的行列式的值。
rank(A):求矩阵A的秩。
>> A=[3,2,1;3,1,5;3,2,3]
A =
3 2 1
3 1 5
3 2 3
>> det(A)
ans =
-6
>> rank(A)
ans =
3