使用 numpy 求解 Gram 矩阵上的线性方程
Solve linear equations on a Gram matrix with numpy
考虑这样一种情况,给定一个 MxM 矩阵 A 和一个向量 b,我想求解 inv(A @ A.T) @ b
形式的问题(我知道 A 是可逆的)。
据我所知,使用 solve_*
总是比 inv
更快。还有一些变体可以更有效地求解 PSD 矩阵(A @ A.T
必须是),使用 Cholesky 分解。
我的问题 - 因为我正在构建矩阵 A @ A.T
只是为了立即将其丢弃 - 是否有更专门的程序来使用 A 的克矩阵求解线性方程而无需构建它?
您可以计算 A
的因式分解,然后用它来求解您的系统。
假设我们要求解
A A^T x = b
对于 x
。
计算 A=LU
的因式分解。
然后解决 Ay=b
为 y
。
然后解决 A^T x = y
为 x
.
这样您就不必计算矩阵 A^T A
。
请注意,如果对 A=LU
进行因式分解,则可以有效地求解 Ax=b
以及 A^T x=b
x
。
这是因为 A^T=U^T L^T
又是下三角矩阵乘以上三角矩阵的因式分解。
考虑这样一种情况,给定一个 MxM 矩阵 A 和一个向量 b,我想求解 inv(A @ A.T) @ b
形式的问题(我知道 A 是可逆的)。
据我所知,使用 solve_*
总是比 inv
更快。还有一些变体可以更有效地求解 PSD 矩阵(A @ A.T
必须是),使用 Cholesky 分解。
我的问题 - 因为我正在构建矩阵 A @ A.T
只是为了立即将其丢弃 - 是否有更专门的程序来使用 A 的克矩阵求解线性方程而无需构建它?
您可以计算 A
的因式分解,然后用它来求解您的系统。
假设我们要求解
A A^T x = b
对于 x
。
计算 A=LU
的因式分解。
然后解决 Ay=b
为 y
。
然后解决 A^T x = y
为 x
.
这样您就不必计算矩阵 A^T A
。
请注意,如果对 A=LU
进行因式分解,则可以有效地求解 Ax=b
以及 A^T x=b
x
。
这是因为 A^T=U^T L^T
又是下三角矩阵乘以上三角矩阵的因式分解。