您可以使用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()返回包含具有值的所有系数的列表并忽略其系数为的那些系数,0而all_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)
asm*_*rer 29
最简单的方法是使用 Poly
>>> a = Poly(expr, x)
>>> a.coeffs()
[1, 2*a + 1, 3]
Run Code Online (Sandbox Code Playgroud)
系数的集合可以用 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)
| 归档时间: |
|
| 查看次数: |
20357 次 |
| 最近记录: |