n*n矩阵方程组Ax=b,使用Eigen矩阵库常用解法介绍 - 详解

在使用 Eigen矩阵库求解n×n 线性方程组 Ax=b 时,有多种分解方式可供选择。不同的方法在精度、稳定性、速度和适用条件上各有优劣。

n×n 矩阵方程组 Ax = b 的 Eigen 常用解法(适用于 Microsoft Word)

在使用 EigenC++ 矩阵库求解线性方程组
A =
其中 A 是 n×n 矩阵, 和 是 n 维向量,有多种数值办法可供选择。以下是常用分解方法的对比与使用方式。

1. SVD 分解(最精确、最稳健)
  • 适用条件:任意矩阵(包括奇异、病态、秩亏)
  • 优点:数值最稳定,精度最高
  • 缺点:计算较慢(O(n³))

Eigen 代码:x = A.bdcSvd(ComputeThinU | ComputeThinV).solve(b);

数学原理:
对矩阵 A 进行奇异值分解:
A = UΣVᵀ
则解为:
= VΣ⁻¹Uᵀ

2. 列主元 QR 分解
  • 适用条件:满秩或接近满秩矩阵
  • 优点:精度高,稳定性好,速度较快
  • 缺点:比无主元 QR 稍慢

Eigen 代码:x = A.colPivHouseholderQr().solve(b);

数学原理:
A = QR(带列主元置换 P)
P⁻¹A = QR
解: = R⁻¹Qᵀ

3. 普通 QR 分解(无主元)
  • 适用条件:非病态满秩矩阵
  • 优点:速度快
  • 缺点:无主元,数值稳定性较差

Eigen 代码:x = A.householderQr().solve(b);

4. LU 分解(带全主元)
  • 适用条件:可逆矩阵
  • 优点:中等速度
  • 缺点:不如 QR/SVD 稳定

Eigen 代码:x = A.fullPivLu().solve(b);

5. LDLᵀ 分解(对称矩阵专用)
  • 适用条件:对称矩阵(正定或半正定)
  • 优点:速度快,内存少,专为对称矩阵优化
  • 缺点:仅适用于对称矩阵

Eigen 代码:x = A.ldlt().solve(b);

6. LLT 分解(Cholesky,正定专用)
  • 适用条件:对称正定矩阵
  • 优点:最快,精度高
  • 缺点:仅适用于正定矩阵,否则会失败

Eigen 代码:x = A.llt().solve(b);

选择建议(决策树)

  1. 是否对称正定? → 使用 LLTLDLT
  2. 是否对称但可能奇异? → 使用 LDLT
  3. 是否病态或条件数大? → 使用 SVD
  4. 一般情况,追求精度? → 使用 colPivHouseholderQr
  5. 追求速度且矩阵良好? → 使用 householderQr
posted @ 2025-09-17 14:46  yfceshi  阅读(25)  评论(0)    收藏  举报