MATLAB矩阵处理-续

矩阵求值

向量和矩阵的范数

1)向量的 3 种常用范数

向量1—范数:向量元素的绝对值之和。

向量2—范数:向量元素平方和的平方根。

向量∞—范数:所有向量元素绝对值中的最大值。

norm(V) 或 norm(V, 2):计算向量 V 的 2—范数。

norm(V, 1):计算向量 V 的 1—范数。

norm(V, inf):计算向量 V 的 ∞—范数。

2)矩阵的范数

矩阵 A 的 1—范数:矩阵列元素绝对值之和的最大值。

矩阵 A 的 2—范数:A’A 矩阵的最大特征值的平方根。

矩阵 A 的 ∞—范数:所有矩阵行元素绝对值之和的最大值。

1
2
3
4
5
6
7
>> x = [2,0,1; -1,1,0; -3,3,0]
>> n = norm(x)
n =
4.7234
>> n = norm(x, 1)
n =
6

矩阵的条件数

矩阵 A 的条件数等于 A 的范数与 A 的逆矩阵的范数的乘积。

条件数越接近 1,矩阵的性能越好。

cond(A, 1):计算 A 的 1—范数下的条件数。

cond(A) 或 cond(A, 2):计算 A 的 2—范数下的条件数。

cond(A, inf):计算 A 的 ∞—范数下的条件数。

例如,求 2~10 阶希尔伯特矩阵的条件数。

1
2
3
4
5
for n = 2:10
c(n) = cond(hilb(n));
end
format long
c'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ans =

1.0e+13 *

0
0.000000000001928
0.000000000052406
0.000000001551374
0.000000047660725
0.000001495105864
0.000047536735691
0.001525757556663
0.049315340455101
1.602502816811318

矩阵的特征值与特征向量

E = eig(A):求矩阵 A 的全部特征值,构成向量 E。

[X, D] = eig(A):求矩阵 A 的全部特征值,构成对角阵 D,并产生矩阵 X,X 各列是相应的特征向量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
>> A = randi([1,10],3,3)
A =
2 3 2
8 5 10
4 1 10
>> B = randi([1,10],2,2)
B =
6 3
1 4
>> A1 = zeros(3,2)
A1 =
0 0
0 0
0 0
>> B1 = zeros(2,3)
B1 =
0 0 0
0 0 0
>> C = [A,A1;B1,B] # 或者直接C = [A,zeros(3,2); zeros(2,3),B]
C =
2 3 2 0 0
8 5 10 0 0
4 1 10 0 0
0 0 0 6 3
0 0 0 1 4
>> x1 = eig(A)
x1 =
13.9462
-1.1038
4.1576
>> x2 = eig(B)
x2 =
7
3
>> x = eig(C)
x =
13.9462
-1.1038
4.1576
7.0000
3.0000
>> [D1,E1]=eig(A)
D1 =
-0.2887 -0.7464 -0.5276
-0.8167 0.6308 -0.7002
-0.4996 0.2121 0.4811
E1 =
13.9462 0 0
0 -1.1038 0
0 0 4.1576
>> [D2,E2]=eig(B)
D2 =
0.9487 -0.7071
0.3162 0.7071
E2 =
7 0
0 3
>> [D,E]=eig(C)
D =
-0.2887 -0.7464 -0.5276 0 0
-0.8167 0.6308 -0.7002 0 0
-0.4996 0.2121 0.4811 0 0
0 0 0 0.9487 -0.7071
0 0 0 0.3162 0.7071
E =
13.9462 0 0 0 0
0 -1.1038 0 0 0
0 0 4.1576 0 0
0 0 0 7.0000 0
0 0 0 0 3.0000

MATLAB 提供了一个 eigshow 函数,可以演示单位圆上的向量 x 和 Ax 之间的关系。

稀疏矩阵

稀疏存储方式只存储矩阵的非零元素的值及其位置,即行号和列号。

A = sparse(S):将矩阵 S 转化为稀疏存储方式的矩阵 A。

S = full(A):将矩阵 A 转化为完全存储方式的矩阵 S。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>> A = sparse(eye(5))
A =
(1,1) 1
(2,2) 1
(3,3) 1
(4,4) 1
(5,5) 1
>> B = full(A)
B =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
>> whos
Name Size Bytes Class Attributes

A 5x5 128 double sparse
B 5x5 200 double

直接建立稀疏存储矩阵

sparse 函数的其他调用格式:

sparse(m, n):生成一个 m*n 的所有元素都是零的稀疏矩阵。

sparse(u, v, S):其中 u, v, S 是 3 个等长的向量。S 是要建立的稀疏存储矩阵的非零元素,u(i)、v(i) 分别是 S(i) 的行和列下标。

用 spconvert 函数直接建立稀疏存储矩阵,其调用格式为:B = spconvert(A)

A 为一个 m 3 或 m 4 的矩阵,其每行表示一个非零元素,m 是非零元素的个数。

A (i, 1) 表示第 i 个非零元素所在的行;

A (i, 2) 表示第 i 个非零元素所在的列;

A (i, 3) 表示第 i 个非零元素所在的实部;

A (i, 4) 表示第 i 个非零元素所在的虚部;

若矩阵的全部元素都是实数,则无须第 4 列。

1
2
3
4
5
6
7
8
9
10
>> A = [2,2,1;2,1,-1;2,4,3]
A =
2 2 1
2 1 -1
2 4 3
>> B = spconvert(A)
B =
(2,1) -1
(2,2) 1
(2,4) 3

带状稀疏矩阵的稀疏存储

稀疏矩阵有两种基本类型:无规则结构的稀疏矩阵与有规则结构的稀疏矩阵。

带状稀疏矩阵是指所有非零元素集中在对角线上的矩阵。

[B, d] = spdiags(A):从带状稀疏矩阵 A 中提取全部非零对角线元素赋给矩阵 B 及其位置向量 d。

A = spdiags(B, d, m, n):产生带状稀疏矩阵的稀疏存储矩阵 A。其中 m,n 为原带状稀疏矩阵的行数和列数,矩阵 B 的第 i 列即为原带状稀疏矩阵的第 i 条非零对角线,向量 d 为原带状稀疏矩阵的所有非零对角线的位置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
>> A = [11,0,0,12,0,0;0,21,0,0,22,0;0,0,31,0,0,32;41,0,0,42,0,0;0,51,0,0,52,0]
A =
11 0 0 12 0 0
0 21 0 0 22 0
0 0 31 0 0 32
41 0 0 42 0 0
0 51 0 0 52 0
>> [B, d] = spdiags(A)
B =
0 11 12
0 21 22
0 31 32
41 42 0
51 52 0
d =
-3
0
3
>> A = spdiags(B, d, 5, 6)
A =
(1,1) 11
(4,1) 41
(2,2) 21
(5,2) 51
(3,3) 31
(1,4) 12
(4,4) 42
(2,5) 22
(5,5) 52
(3,6) 32

单位矩阵的稀疏存储

speye(m, n) 返回一个 m * n 的稀疏存储单位矩阵。

1
2
3
4
5
>> speye(3)
ans =
(1,1) 1
(2,2) 1
(3,3) 1

avatar

1
2
3
4
5
6
7
8
kf1 = [1,1,2,1,0];
k0 = [2,4,6,6,1];
k1 = [0,3,1,4,2];
B = [kf1,k0,k1];
d = [-1;0;1];
A = spdiags(B, d, 5, 5);
f = [0,3,2,1,5];
x = A \ f

注意:当参与运算的数据对象不全是稀疏存储矩阵时,所得结果是完全存储形式。

Author

preccrep

Posted on

2020-07-15

Updated on

2020-07-15

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.
You need to set client_id and slot_id to show this AD unit. Please set it in _config.yml.