gpt4 book ai didi

python - SymPy:求解超定线性方程组

转载 作者:行者123 更新时间:2023-12-05 07:25:02 28 4
gpt4 key购买 nike

我知道 SymPy 能够求解线性方程组的超定系统,但我遇到了以下问题:

让我们从有效的开始:

equation

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)}

现在有了一个额外的等式:

enter image description here

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 个变量,所以我不能去通过这个手动检查可以删除哪些方程式。 (它也不会像这个玩具示例中那样明显)

最佳答案

如果您允许它求解更多变量,它就会这样做。在这里,所有 A-D 都是允许的,但您也可以只允许 D:

>>> linsolve(matrix, (x,y,z)+var("A:D"))
{(-B/2 + D/2, B, C, -B/2 + D/2, B, C, D)}

您还可以使用 connected_components 来研究 solve 分离出不依赖于其他方程的方法。

关于python - SymPy:求解超定线性方程组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55102209/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com