Как получить коэффициенты в выражении sympy
b = sympy.Symbol('b')
a = sympy.Symbol('a')
x = sympy.Symbol('x')
y = 2*x**3 + a*x**2 +b*x
Результат должен быть:
coeff for x**3 =2
coeff for x**2 = a
coeff for x = b
Как получить коэффициенты в выражении sympy
b = sympy.Symbol('b')
a = sympy.Symbol('a')
x = sympy.Symbol('x')
y = 2*x**3 + a*x**2 +b*x
Результат должен быть:
coeff for x**3 =2
coeff for x**2 = a
coeff for x = b
Удивительно неудобно получить форму выражения членов в многочлене, но вы можете сделать это так:
In [28]: b = sympy.Symbol('b')
...: a = sympy.Symbol('a')
...: x = sympy.Symbol('x')
...:
...: y = 2*x**3 + a*x**2 +b*x
In [29]: p = Poly(y, x)
In [30]: p
Out[30]: Poly(2*x**3 + a*x**2 + b*x, x, domain='ZZ[a,b]')
In [31]: {x**m[0]:p.coeff_monomial(m) for m in p.monoms()}
Out[31]:
⎧ 2 3 ⎫
⎨x: b, x : a, x : 2⎬
⎩ ⎭
Хотя получить коэффициенты несложно
>>> y = 2*x**3 + a*x**2 + b
>>> p = Poly(y, x)
>>> p.coeffs()
[2, a, b]
>>> p.all_coeffs()
[2, a, 0, b]
привязка их к их моному является нереализованной/отсталой частью. @OscarBenjamin показал, как это сделать с мономами Poly. Вы также можете работать с выражением, не конвертируя его в Poly:
>>> dict(i.as_independent(x)[::-1] for i in Add.make_args(y))
{1: b, x**3: 2, x**2: a}
Было бы неплохо для SymPy включить ключевое слово mapping
в Poly.coeffs
, которое позволило бы вернуть этот словарь. В качестве альтернативы Expr.as_coefficients_dict
может быть задано необязательное ключевое слово variable
, которое позволит возвращать коэффициенты, не зависящие от каких-либо символов в variable
.
Это простое понимание словаря не удастся, если в выражении есть несобранные термины, такие как a*x + b*x
. Более надежная небольшая функция опубликована здесь.