web-dev-qa-db-ja.com

sympyですべての係数を抽出する方法

Coeff()を使用して、特定の項の係数を取得できます。

x, a = symbols("x, a")
expr = 3 + x + x**2 + a*x*2
expr.coeff(x)
# 2*a + 1

ここでは、x、x ** 2(など)のすべての係数を抽出します。

# for example
expr.coefficients(x)
# want {1: 3, x: (2*a + 1), x**2: 1}

メソッドas_coefficients_dict()がありますが、これは私が望む方法で機能しないようです。

expr.as_coefficients_dict()
# {1: 3, x: 1, x**2: 1, a*x: 2}
expr.collect(x).as_coefficients_dict()
# {1: 3, x**2: 1, x*(2*a + 1): 1}
32
akai

最も簡単な方法は、Polyを使用することです

>>> a = Poly(expr, x)
>>> a.coeffs()
[1, 2*a + 1, 3]
28
asmeurer

all_coeffs()は、Polycoeffs()を使用するよりも優れている場合があります。違いは、これら両方の出力にあります。 coeffs()は、値を持つすべての係数を含むリストを返し、係数が_0_の係数を無視しますが、all_coeffs()は、係数がゼロの係数を含むすべての係数を返します。

_>>> a = Poly(x**3 + a*x**2 - b, x)
>>> a.coeffs()
[1, a, -b]

>>> a.all_coeffs()
[1, a, 0, -b]
_
37
Kundan

できることの1つは、次のような辞書の理解を使用することです。

dict = {x**p: expr.collect(x).coeff(x**p) for p in range(1,n)}

ここで、nは最大の累乗+1です。この場合、n = 3です。したがって、リストは[1,2]

これは与えるだろう

dict = {x: (2*a+1), x**2: 1}

次に、単一の用語を追加できます

dict[1] = 3

そう

 dict = {1:3,x:(2*a+1),x**2:1}

以下も試してみてください:

a = list(reversed(expr.collect(x).as_ordered_terms()))
dict = {x**p: a[p],coeff(x**p) for p in range(1,n)}
dict[1] = a[0] # Would only apply if there is single term such as the 3 in the example

ここで、nは最大電力+ 1です。

3
RDizzl3