找到 SymPy 中存在的奇异矩阵方程的答案
Finding an answer to a singular matrix equation if it exists in SymPy
假设我们有矩阵方程 A*x = b
,其中 A
是方阵但奇异的。那么一般来说,方程要么没有解,要么有无穷多个解。如果确实有解决方案,我想使用 SymPy 根据自由变量 symbolically 找到它们的形式。
我知道如果我们能找到一个特定的解决方案 x
,那么通过将 A
的零空间的向量添加到 x
我们可能会找到其余的,因此问题减少了只找到一个解决方案。在 Mathematica 中,函数 LinearSolve
将为您提供这样的解决方案,但不幸的是,在 SymPy 中,所有求解器似乎都要求 A 是非奇异的。
有谁知道我如何使用 SymPy 找到这样的解决方案(象征性地)?我一直在研究滚动我自己的算法来做到这一点,可能首先使用 A.rref()
将 A
放入简化的行阶梯格式,但我对我的线性代数没有足够的信心知道是否这会稳定地工作。另一种可能性可能是计算伪逆,但函数 pinv()
抱怨奇异矩阵。
以防万一有人遇到这个问题,答案是使用最新版本的 SymPy 中的 linsolve
函数,它具有此功能。
假设我们有矩阵方程 A*x = b
,其中 A
是方阵但奇异的。那么一般来说,方程要么没有解,要么有无穷多个解。如果确实有解决方案,我想使用 SymPy 根据自由变量 symbolically 找到它们的形式。
我知道如果我们能找到一个特定的解决方案 x
,那么通过将 A
的零空间的向量添加到 x
我们可能会找到其余的,因此问题减少了只找到一个解决方案。在 Mathematica 中,函数 LinearSolve
将为您提供这样的解决方案,但不幸的是,在 SymPy 中,所有求解器似乎都要求 A 是非奇异的。
有谁知道我如何使用 SymPy 找到这样的解决方案(象征性地)?我一直在研究滚动我自己的算法来做到这一点,可能首先使用 A.rref()
将 A
放入简化的行阶梯格式,但我对我的线性代数没有足够的信心知道是否这会稳定地工作。另一种可能性可能是计算伪逆,但函数 pinv()
抱怨奇异矩阵。
以防万一有人遇到这个问题,答案是使用最新版本的 SymPy 中的 linsolve
函数,它具有此功能。