矩阵变换:
(1) 对角阵
对角矩阵:只有对角线上有非零元素的矩阵。
数量矩阵:对角线上的元素相等的对角矩阵。
单位矩阵:对角线上的元素都为1的对角矩阵。
① 提取矩阵的对角线元素
diag(A):提取矩阵A主对角线元素,产生一个列向量。
diag(A,k):提取矩阵A第k对角线元素,产生一个列向量。
例如:
命令行窗口输入如下:
>> A=[1 0 0 0 0 ;0 3 0 0 0;0 0 2 0 0;0 0 0 5 0;0 0 0 0 6]
按下回车键,显示结果:(下面的命令输入和显示操作类似)
A =
1 0 0 0 0
0 3 0 0 0
0 0 2 0 0
0 0 0 5 0
0 0 0 0 6
>> diag(A)
ans =
1
3
2
5
6
>> A=[1 2 3 4 5;2 3 4 5 6;3 4 5 6 7;4 5 6 7 8;5 6 7 8 9]
A =
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
>> diag(A)
ans =
1
3
5
7
9
>> diag(A,2)
ans =
3
5
7
>> diag(A,-2)
ans =
3
5
7
② diag(V):以向量V为主对角线元素,产生对角矩阵。
diag(V,k):以向量V为第k条对角线元素,产生对角矩阵。
例如:
>> n
n =
1 2 3 4 5
>> diag(n)
ans =
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
>> diag(n,1)
ans =
0 1 0 0 0 0
0 0 2 0 0 0
0 0 0 3 0 0
0 0 0 0 4 0
0 0 0 0 0 5
0 0 0 0 0 0
>> diag(n,-1)
ans =
0 0 0 0 0 0
1 0 0 0 0 0
0 2 0 0 0 0
0 0 3 0 0 0
0 0 0 4 0 0
0 0 0 0 5 0
例:先建立5×5矩阵A,然后将A的第一行元素乘以1,第二行乘以2,……,第五行乘以5。
>> A=[7 0 1 0 5;3 5 7 4 1;4 0 3 0 2;1 1 9 2 3;1 8 5 2 9]
A =
7 0 1 0 5
3 5 7 4 1
4 0 3 0 2
1 1 9 2 3
1 8 5 2 9
>> D=diag(1:5);
>> D*A
ans =
7 0 1 0 5
6 10 14 8 2
12 0 9 0 6
4 4 36 8 12
5 40 25 10 45
(2) 三角阵
上三角阵:矩阵的对角线以下的元素全为零的矩阵。
下三角阵:对角线以上的元素全为零的矩阵。
① 上三角阵:triu函数
triu(A)提取矩阵A的主对角线以及以上的元素。
triu(A,k)提取矩阵A的第k条对角线以及以上的元素。
例如:
>> triu(ones(4),-1)
ans =
1 1 1 1
1 1 1 1
0 1 1 1
0 0 1 1
② 下三角矩阵
在MATLAB中,提取矩阵A的下三角矩阵的函数是tril,其用法与triu函数完全相同。
矩阵的转置:
转置运算符是小数点后面接单引号(.’)。
共轭转置,其运算符是单引号(’),它在转置的基础上还要取每个数的复共轭。
A =
1.0000 + 0.0000i 3.0000 + 0.0000i
3.0000 + 4.0000i 1.0000 - 2.0000i
>> A.'
ans =
1.0000 + 0.0000i 3.0000 + 4.0000i
3.0000 + 0.0000i 1.0000 - 2.0000i
>> A'
ans =
1.0000 + 0.0000i 3.0000 - 4.0000i
3.0000 + 0.0000i 1.0000 + 2.0000i
注:对于矩阵元素均为实数的情况下,A’和A.’两者所得的结果一样。
rot90(A,k):将矩阵A逆时针方向旋转90°的k倍,当k为1时可省略。
例如:
>> A=[1 3 2;-3 2 1;4 1 2]
A =
1 3 2
-3 2 1
4 1 2
>> rot90(A)
ans =
2 1 2
3 2 1
1 -3 4
>> rot90(A,2)
ans =
2 1 4
1 2 -3
2 3 1
矩阵的翻转:
fliplr(A):对矩阵A实施左右翻转;
flipud(A):对矩阵A实施上下翻转。
例:验证魔方阵的主对角线、副对角线元素之和相等。
>> 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
>> D1=diag(A);
>> sum(D1)
ans =
65
>> B=flipud(A);
>> D2=diag(B);
>> sum(D2)
ans =
65