SymPy: решение переопределенной системы линейных уравнений - PullRequest
2 голосов
/ 11 марта 2019

Я знаю, что 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 переменных, поэтому я не могу перейти через это вручную, чтобы проверить, какие уравнения могут быть отброшены. (Это было бы не так очевидно, как в этом примере с игрушкой)

...