我知道SymPy能够解决超定线性方程组,但我遇到了以下问题:
让我们从一些可行的内容开始:
在这个例子中,显然最后一个方程不需要用来求解x、y、z,但问题是我必须解决成千上万个这样的系统,每个系统最多有14个变量,所以我不能手动检查哪些方程可以被省略。(这并不像这个玩具例子中那么明显)
让我们从一些可行的内容开始:
from sympy import *
x, y, z = symbols('x y z')
matrix = Matrix([
[1, 0, 0, symbols('A')],
[0, 1, 0, symbols('B')],
[0, 0, 1, symbols('C')]])
linsolve(matrix, (x,y,z))
输出: {(A, B, C)}
现在加入一个额外的方程:
from sympy import *
x, y, z = symbols('x y z')
matrix = Matrix([
[1, 0, 0, symbols('A')],
[0, 1, 0, symbols('B')],
[0, 0, 1, symbols('C')],
[2, 1, 0, symbols('D')]])
linsolve(matrix, (x,y,z))
输出:EmptySet()
虽然显然仍然存在解决方案,但不再有任何输出。例如,Wolfram Alpha仍将呈现此解决方案:
输入:
1x+0y+0z=A, 0x+1y+0z=B, 0x+0y+1z=C, 2x+y=D
输出:
D = 2 A + B, x = A, y = B, z = C
在这个例子中,显然最后一个方程不需要用来求解x、y、z,但问题是我必须解决成千上万个这样的系统,每个系统最多有14个变量,所以我不能手动检查哪些方程可以被省略。(这并不像这个玩具例子中那么明显)
sympy.matrices.matrices.MatrixBase.gauss_jordan_solve
(https://docs.sympy.org/latest/modules/matrices/matrices.html?highlight=gauss_jordan_solve#sympy.matrices.matrices.MatrixBase.gauss_jordan_solve)会引发ValueError: Linear system has no solution
,而它应该能够解决欠定和超定系统(因此要么实现有问题,要么文档有误)。 - jdehesalinsolve
而不是rref
? - Rodrigo de Azevedo