如何提取同情中的所有系数

aka*_*kai 32 python sympy

您可以使用coeff()获得特定术语的系数;

x, a = symbols("x, a")
expr = 3 + x + x**2 + a*x*2
expr.coeff(x)
# 2*a + 1
Run Code Online (Sandbox Code Playgroud)

在这里,我想提取x,x**2(等等)的所有系数,如;

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

有一个方法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}
Run Code Online (Sandbox Code Playgroud)

小智 38

all_coeffs()可有时比使用更好coeffs()Poly.不同之处在于这两者的产出.coeffs()返回包含具有值的所有系数的列表并忽略其系数为的那些系数,0all_coeffs()返回包括系数为零的系数的所有系数.

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

>>> a.all_coeffs()
[1, a, 0, -b]
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.我的裤子被`coeffs()`忽略了归零系数.还值得注意的是`numpy`使用反向排序,因此当使用`numpy`多项式时,值得做`a.reverse()` (3认同)

asm*_*rer 29

最简单的方法是使用 Poly

>>> a = Poly(expr, x)
>>> a.coeffs()
[1, 2*a + 1, 3]
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这隐藏了零。如果你执行“Poly(x**2 + 1).coeffs()”,你会得到“[1,1]”而不是“[1,0,1]”。 (2认同)

smi*_*chr 7

系数的集合可以用 Poly 处理,然后可以用以下方法将单项式分离成依赖部分和独立部分Expr.as_independent

def codict(expr, *x):
  collected = Poly(expr, *x).as_expr()
  i, d = collected.as_independent(*x, as_Add=True)
  rv = dict(i.as_independent(*x, as_Mul=True)[::-1] for i in Add.make_args(d))
  if i:
      assert 1 not in rv
      rv.update({S.One: i})
  return rv

>>> var('a x z y')
(a, x, z, y)
>>> expr = 3 + x + x**2 + a*x*2
>>> codict(expr, x)
{x**2: 1, x: 2*a + 1, 1: 3}
>>> codict(expr+y+z, x)
{x**2: 1, x: 2*a + 1, 1: y + z + 3}
>>> codict(expr+y+z, x,y)
{y: 1, x**2: 1, x: 2*a + 1, 1: z + 3}
>>> codict(expr+y+z, x,y,z)
{y: 1, z: 1, x**2: 1, x: 2*a + 1, 1: 3}
Run Code Online (Sandbox Code Playgroud)