正定矩阵(Positive Definite Matrix)
flyfish
Positive(正数) :在数学和统计学中,通常指大于零的数。在矩阵理论中,一个矩阵被称为正定,是因为它的性质类似于正数的性质。
Definite(定) :在这里,“definite” 指的是矩阵具有确定的、明确的性质。具体地说,正定矩阵是指对于所有非零向量
x
x
x,都有
x
T
A
x
>
0
x^T A x > 0
xTAx>0 成立,其中
A
A
A 是正定矩阵。
一个矩阵
A
A
A 是正定矩阵(Positive Definite Matrix),如果对于任意的非零向量
x
x
x,都有:
x
T
A
x
>
0
x^T A x > 0
xTAx>0
对称正定矩阵
一个矩阵 A A A 是对称正定矩阵(Symmetric Positive Definite Matrix),如果它同时满足以下两个条件:
-
对称性 :矩阵 A A A 是对称的,即 A = A T A = A^T A=AT。
-
正定性 :对于任意的非零向量 x x x,有 x T A x > 0 x^T A x > 0 xTAx>0。
正定性
x
T
A
x
>
0
x^T A x > 0
xTAx>0对于一个矩阵
A
A
A,我们希望它是正定的。这意味着对于任意的非零向量
x
x
x,向量
x
x
x 通过矩阵
A
A
A 变换后与自身的内积是正的,即:
x
T
A
x
>
0
x^T A x > 0
xTAx>0
其中:
-
x x x 是一个列向量。
-
x T x^T xT 是 x x x 的转置,即行向量。
-
A A A 是待检查是否正定的矩阵。
这个条件确保了矩阵 A A A 在所有非零向量的方向上都是正的,从而保证了正定性。
x T A x > 0 x^T A x > 0 xTAx>0 看一个具体的例子。假设矩阵 A A A 为: A = ( 2 1 1 2 ) A = \begin{pmatrix} 2 & 1 \\ 1 & 2 \end{pmatrix} A=(2112)并且向量 x x x 为: x = ( 1 1 ) x = \begin{pmatrix} 1 \\ 1 \end{pmatrix} x=(11)现在我们计算 x T A x x^T A x xTAx: x T = ( 1 1 ) x^T = \begin{pmatrix} 1 & 1 \end{pmatrix} xT=(11) x T A = ( 1 1 ) ( 2 1 1 2 ) = ( 3 3 ) x^T A = \begin{pmatrix} 1 & 1 \end{pmatrix} \begin{pmatrix} 2 & 1 \\ 1 & 2 \end{pmatrix} = \begin{pmatrix} 3 & 3 \end{pmatrix} xTA=(11)(2112)=(33) x T A x = ( 3 3 ) ( 1 1 ) = 3 ⋅ 1 + 3 ⋅ 1 = 6 x^T A x = \begin{pmatrix} 3 & 3 \end{pmatrix} \begin{pmatrix} 1 \\ 1 \end{pmatrix} = 3 \cdot 1 + 3 \cdot 1 = 6 xTAx=(33)(11)=3⋅1+3⋅1=6我们看到 x T A x = 6 > 0 x^T A x = 6 > 0 xTAx=6>0,这说明对于向量 x x x,矩阵 A A A 是正定的。
对称性
设 A A A 是一个任意矩阵,那么 A T A^T AT 是它的转置矩阵。矩阵 A ⋅ A T A \cdot A^T A⋅AT 计算如下: ( A ⋅ A T ) T = ( A T ) T ⋅ A T = A ⋅ A T (A \cdot A^T)^T = (A^T)^T \cdot A^T = A \cdot A^T (A⋅AT)T=(AT)T⋅AT=A⋅AT其中 ( A ⋅ A T ) T (A \cdot A^T)^T (A⋅AT)T 是矩阵 A ⋅ A T A \cdot A^T A⋅AT 的转置,根据矩阵乘法的性质,它等于原矩阵 A ⋅ A T A \cdot A^T A⋅AT。因此, A ⋅ A T A \cdot A^T A⋅AT 是对称矩阵。
让我们以一个矩阵
A
A
A 为例:
A
=
(
1
2
3
4
)
A = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}
A=(1324)计算
A
T
A^T
AT:
A
T
=
(
1
3
2
4
)
A^T = \begin{pmatrix} 1 & 3 \\ 2 & 4 \end{pmatrix}
AT=(1234)现在计算
A
⋅
A
T
A \cdot A^T
A⋅AT:
A
⋅
A
T
=
(
1
2
3
4
)
(
1
3
2
4
)
=
(
1
⋅
1
+
2
⋅
2
1
⋅
3
+
2
⋅
4
3
⋅
1
+
4
⋅
2
3
⋅
3
+
4
⋅
4
)
=
(
5
11
11
25
)
A \cdot A^T = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} \begin{pmatrix} 1 & 3 \\ 2 & 4 \end{pmatrix} = \begin{pmatrix} 1 \cdot 1 + 2 \cdot 2 & 1 \cdot 3 + 2 \cdot 4 \\ 3 \cdot 1 + 4 \cdot 2 & 3 \cdot 3 + 4 \cdot 4 \end{pmatrix} = \begin{pmatrix} 5 & 11 \\ 11 & 25 \end{pmatrix}
A⋅AT=(1324)(1234)=(1⋅1+2⋅23⋅1+4⋅21⋅3+2⋅43⋅3+4⋅4)=(5111125)
我们看到:
A
⋅
A
T
=
(
5
11
11
25
)
A \cdot A^T = \begin{pmatrix} 5 & 11 \\ 11 & 25 \end{pmatrix}
A⋅AT=(5111125)这个矩阵是对称的,因为矩阵的转置
(
A
⋅
A
T
)
T
=
A
T
⋅
(
A
T
)
T
=
A
⋅
A
T
(A \cdot A^T)^T = A^T \cdot (A^T)^T = A \cdot A^T
(A⋅AT)T=AT⋅(AT)T=A⋅AT。
单位矩阵
单位矩阵
I
I
I 是一个对角矩阵,其对角线上所有元素都是1,其他元素都是0。对于单位矩阵
I
I
I,我们有:
x
T
I
x
=
x
T
x
=
∑
i
=
1
n
x
i
2
x^T I x = x^T x = \sum_{i=1}^n x_i^2
xTIx=xTx=∑i=1nxi2因为向量
x
x
x 的每个元素的平方都是非负的,并且至少有一个元素是非零的(因为
x
x
x 是非零向量),所以
∑
i
=
1
n
x
i
2
>
0
\sum_{i=1}^n x_i^2 > 0
∑i=1nxi2>0。因此,对于任何非零向量
x
x
x,都有
x
T
I
x
>
0
x^T I x > 0
xTIx>0,这说明单位矩阵是正定的。
将单位矩阵乘以一个正数,并加到一个对称矩阵上,可以使原矩阵的特征值增加,从而保证矩阵的正定性。
考虑单位矩阵
I
I
I:
I
=
(
1
0
0
1
)
I = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}
I=(1001)对于任意向量
x
x
x,例如:
x
=
(
1
1
)
x = \begin{pmatrix} 1 \\ 1 \end{pmatrix}
x=(11)我们计算
x
T
I
x
x^T I x
xTIx:
x
T
=
(
1
1
)
x^T = \begin{pmatrix} 1 & 1 \end{pmatrix}
xT=(11)
x
T
I
=
(
1
1
)
(
1
0
0
1
)
=
(
1
1
)
x^T I = \begin{pmatrix} 1 & 1 \end{pmatrix} \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} = \begin{pmatrix} 1 & 1 \end{pmatrix}
xTI=(11)(1001)=(11)
x
T
I
x
=
(
1
1
)
(
1
1
)
=
1
⋅
1
+
1
⋅
1
=
2
x^T I x = \begin{pmatrix} 1 & 1 \end{pmatrix} \begin{pmatrix} 1 \\ 1 \end{pmatrix} = 1 \cdot 1 + 1 \cdot 1 = 2
xTIx=(11)(11)=1⋅1+1⋅1=2因为对任意非零向量
x
x
x,
x
T
I
x
x^T I x
xTIx 都大于 0,所以单位矩阵
I
I
I 是正定的。
考虑一个 2x2 的单位矩阵:
I
=
[
1
0
0
1
]
I = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}
I=[1001]如果将 0 和 1 的位置互换,得到的矩阵仍然是单位矩阵:
I
′
=
[
0
1
1
0
]
I' = \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix}
I′=[0110]
因为:
-
I ′ I' I′ 仍然是一个方阵,且大小为 2x2。
-
I ′ I' I′ 的主对角线上的元素是 1。
-
I ′ I' I′ 的其它位置上的元素都是 0。
因此,虽然元素的具体排列顺序发生了改变,但这并不影响矩阵是否满足单位矩阵的定义。因此, I ′ I' I′ 也被认为是一个单位矩阵。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 生成一个随机的对称正定矩阵
def generate_spd_matrix(n):
A = np.random.rand(n, n)
A = np.dot(A, A.T) # 生成对称矩阵
A += n * np.eye(n) # 保证正定性
return A
# 生成 5x5 的对称正定矩阵
n = 5
spd_matrix = generate_spd_matrix(n)
# 获取矩阵中所有唯一的数值,并为每个数值分配一个唯一的颜色
unique_values = np.unique(spd_matrix)
num_unique = len(unique_values)
color_palette = sns.color_palette("viridis", num_unique)
color_map = {value: color_palette[i] for i, value in enumerate(unique_values)}
# 根据数值映射颜色
colors_mapped = [[color_map[value] for value in row] for row in spd_matrix]
# 绘制热图
plt.figure(figsize=(8, 6))
sns.heatmap(spd_matrix, annot=True, fmt=".2f", cmap=color_palette, cbar_kws={'label': 'Matrix Value'})
plt.title("Symmetric Positive Definite Matrix Heatmap")
plt.show()
点积
点积 :是内积的一种具体形式,专门应用于欧几里得空间。给定两个向量
a
\mathbf{a}
a 和
b
\mathbf{b}
b,它们的点积定义为:
a
⋅
b
=
∥
a
∥
∥
b
∥
cos
θ
\mathbf{a} \cdot \mathbf{b} = \|\mathbf{a}\| \|\mathbf{b}\| \cos \theta
a⋅b=∥a∥∥b∥cosθ
其中
∥
a
∥
\|\mathbf{a}\|
∥a∥ 和
∥
b
∥
\|\mathbf{b}\|
∥b∥ 分别是向量
a
\mathbf{a}
a 和
b
\mathbf{b}
b 的长度,
θ
\theta
θ 是它们之间的夹角。
垂直向量:点积为零,余弦值为 0。
同方向向量:点积为正且最大,余弦值为 1。
反方向向量:点积为负且最大,余弦值为 -1。
import numpy as np
import matplotlib.pyplot as plt
# 定义向量
a = np.array([3, 4])
b = np.array([4, -3]) # 与 a 垂直
c = np.array([3, 4]) # 与 a 同方向
d = np.array([-3, -4]) # 与 a 反方向
# 计算点积
dot_ab = np.dot(a, b)
dot_ac = np.dot(a, c)
dot_ad = np.dot(a, d)
# 计算夹角的余弦值
cos_ab = dot_ab / (np.linalg.norm(a) * np.linalg.norm(b))
cos_ac = dot_ac / (np.linalg.norm(a) * np.linalg.norm(c))
cos_ad = dot_ad / (np.linalg.norm(a) * np.linalg.norm(d))
# 绘图
fig, axs = plt.subplots(1, 3, figsize=(18, 6))
# 情况 1: 垂直
axs[0].quiver(0, 0, a[0], a[1], angles='xy', scale_units='xy', scale=1, color='r', label='a')
axs[0].quiver(0, 0, b[0], b[1], angles='xy', scale_units='xy', scale=1, color='b', label='b (perpendicular)')
axs[0].set_xlim(-5, 5)
axs[0].set_ylim(-5, 5)
axs[0].set_aspect('equal')
axs[0].grid(True)
axs[0].legend()
axs[0].set_title(f'Perpendicular: a·b = {dot_ab}, cosθ = {cos_ab:.2f}')
# 情况 2: 同方向
axs[1].quiver(0, 0, a[0], a[1], angles='xy', scale_units='xy', scale=1, color='r', label='a')
axs[1].quiver(0, 0, c[0], c[1], angles='xy', scale_units='xy', scale=1, color='g', label='c (same direction)')
axs[1].set_xlim(-5, 5)
axs[1].set_ylim(-5, 5)
axs[1].set_aspect('equal')
axs[1].grid(True)
axs[1].legend()
axs[1].set_title(f'Same direction: a·c = {dot_ac}, cosθ = {cos_ac:.2f}')
# 情况 3: 反方向
axs[2].quiver(0, 0, a[0], a[1], angles='xy', scale_units='xy', scale=1, color='r', label='a')
axs[2].quiver(0, 0, d[0], d[1], angles='xy', scale_units='xy', scale=1, color='m', label='d (opposite direction)')
axs[2].set_xlim(-5, 5)
axs[2].set_ylim(-5, 5)
axs[2].set_aspect('equal')
axs[2].grid(True)
axs[2].legend()
axs[2].set_title(f'Opposite direction: a·d = {dot_ad}, cosθ = {cos_ad:.2f}')
plt.show()