Как извлечь аргументы?

Работаю с Sympy для решения линейных уравнений.

Что происходит:

  1. Я задаю координаты
x, y, z, d = sym.symbols('x, y, z, d')

A1 = np.array([x-1, y-2, z-3])
A2 = np.array([1-1, 3-2, 3-3])
A3 = np.array([0-1, 10-2, 5-3])
A4 = np.array([0, 3, 0])
  1. После чего решаю матрицу:
M = sym.Matrix([A1, A2, A3])
  1. Она решается, я нахожу ее детерминат:
Md = M.det()
  1. Он выдает мне следующее:
2? + ? − 5

Это то, что мне нужно, но только на половину – мне необходимо извлечь из них аргументы, типа у икса это 2, y игрека - 0, у "z" это 1 и как то осознать свободный член, что он -5.

Как я могу это сделать?


Ответы (2 шт):

Автор решения: MaxU
In [240]: x_coef = Md.coeff(x)

In [241]: y_coef = Md.coeff(y)

In [242]: z_coef = Md.coeff(z)

In [243]: print(x_coef, y_coef, z_coef)
2 0 1

или так:

In [254]: [Md.coeff(var) for var in [x, y, z]]
Out[254]: [2, 0, 1]
→ Ссылка
Автор решения: Danis
import sympy as sym
import numpy as np

def get(n, args):
    n = str(n)
    dict_ = {arg: 0 for arg in args}
    for i in n.split():
        for arg in args:
            if arg in i:
                if i == arg:
                    count = 1
                else:
                    count = i.split("*")[0]
                    
                dict_[arg] += int(count)
                break
    return dict_
    
x, y, z = sym.symbols("x y z")

A1 = np.array([x-1, y-2, z-3])
A2 = np.array([1-1, 3-2, 3-3])
A3 = np.array([0-1, 10-2, 5-3])
A4 = np.array([0, 3, 0])

M = sym.Matrix([A1, A2, A3])

print(get(M.det(), ["x", "y", "z"]))
→ Ссылка