正定矩阵(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()