正定矩阵(Positive Definite Matrix)

正定矩阵(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),如果它同时满足以下两个条件:

  1. 对称性 :矩阵 A A A 是对称的,即 A = A T A = A^T A=AT

  2. 正定性 :对于任意的非零向量 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)=31+31=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 AAT 计算如下: ( 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 (AAT)T=(AT)TAT=AAT其中 ( A ⋅ A T ) T (A \cdot A^T)^T (AAT)T 是矩阵 A ⋅ A T A \cdot A^T AAT 的转置,根据矩阵乘法的性质,它等于原矩阵 A ⋅ A T A \cdot A^T AAT。因此, A ⋅ A T A \cdot A^T AAT 是对称矩阵。

让我们以一个矩阵 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 AAT 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} AAT=(1324)(1234)=(11+2231+4213+2433+44)=(5111125)
我们看到:
A ⋅ A T = ( 5 11 11 25 ) A \cdot A^T = \begin{pmatrix} 5 & 11 \\ 11 & 25 \end{pmatrix} AAT=(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 (AAT)T=AT(AT)T=AAT

单位矩阵

单位矩阵 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)=11+11=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]
因为:

  1. I ′ I' I 仍然是一个方阵,且大小为 2x2。

  2. I ′ I' I 的主对角线上的元素是 1。

  3. 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 ab=a∥∥bcosθ
其中 ∥ 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()
### 解决矩阵正定问题的方法 在数值计算或机器学习算法中遇到矩阵正定时,可以采取多种策略来解决问题。以下是几种常见的解决方案: #### 方法一:调整矩阵使其接近正定 可以通过向矩阵添加一个小的扰动项来使它更接近正定形式。具体来说,在矩阵 \( A \) 的对角线上加上一个小的正值常数 \( \epsilon I \),其中 \( I \) 是单位矩阵,\( \epsilon \) 是一个非常小的正实数。这种方法通常被称为 **Tikhonov 正则化** 或 **岭回归**。 \[ A_{\text{new}} = A + \epsilon I \] 这一步骤能够有效改善条件数并减少病态行为[^1]。 #### 方法二:使用共轭梯度法处理正规方程 如果原始矩阵不是正定的,则可以考虑将其转换为正规方程的形式 \( A^T A x = A^T b \)。由于 \( A^T A \) 总是一个对称半正定矩阵,因此即使原矩阵 \( A \) 不满足正定性质,也可以利用此特性应用共轭梯度法求解线性系统。 需要注意的是,尽管这种做法解决了非正定问题,但它可能放大噪声的影响,特别是在数据存在较大误差的情况下。 #### 方法三:引入正则化技术 为了防止过拟合以及应对非正定情况下的优化困难,可以在目标函数中加入 L2 范数惩罚项作为正则化手段。这样做的效果相当于隐式地改变了 Hessian 矩阵结构,从而帮助其变得更为稳定和易于收敛[^5]。 例如,在最小二乘问题中增加如下约束: \[ J(\theta) = \|X\theta - y\|^2_2 + \lambda \|\theta\|_2^2 \] 这里的参数 \( \lambda > 0 \) 控制着正则化的强度大小。 #### 方法四:采用稳健的数值方法替代传统方式 对于某些特定应用场景而言,直接修改输入矩阵并非最佳选择;此时可以选择更加鲁棒性强的技术代替标准操作流程。比如运用奇异值分解(SVD)或者特征值分解(Eigenvalue Decomposition)重构新的基底空间表示,进而规避掉因不良定义而导致的一系列麻烦事项[^3]。 另外还可以尝试其他高级迭代方案如预调节子(preconditioner)-辅助型 CG 法等进一步提升稳定性表现水平。 ```python import numpy as np # Example implementation using regularization technique def solve_with_regularization(A, b, epsilon=1e-8): n = A.shape[1] identity_matrix = np.eye(n) adjusted_A = A.T @ A + epsilon * identity_matrix solution_x = np.linalg.solve(adjusted_A, A.T @ b) return solution_x ``` 上述代码片段展示了如何通过简单地改变系数矩阵实现基本版本的修正过程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二分掌柜的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值