提取“ sqrt(s)”的系数

时间:2019-04-13 03:09:04

标签: python sympy

我从表达式x*(A*x*x + B*x + C*x)开始,之后 进行替换x -> r + sqrt(s)我想收集术语,以便 它的格式为a + sqrt(s)*b,其中a没有任何sqrt(s) 条款。然后,我想提取表达式ab

我想sympy减少s**(3/2)s*sqrt(s)使其成为 b表达式的一部分。

我已经尝试了以下方法。我可以提取sqrt(s)的系数,但其中不包含s**3/2项:

In [1]: import sympy as sp

In [2]: r, A, B, C, a, b, c, x = sp.symbols("r A B C a b c x")

In [3]: s = sp.Symbol("s", positive=True)

In [4]: f1 = x*(A*x*x + B*x + C)

In [5]:  f2 = f1.subs(x, r + sp.sqrt(s)).expand()

In [6]: f2
Out[6]: A*r**3 + 3*A*r**2*sqrt(s) + 3*A*r*s + A*s**(3/2) + B*r**2 + 2*B*r*sqrt(s) + B*s + C*r + C*sqrt(s)

In [7]: f2.coeff(sp.sqrt(s))
Out[7]: 3*A*r**2 + 2*B*r + C

更新:我发现我可以通过处理表达式来得到想要的答案 作为另一个变量Z中的多项式,然后进行替换 Z*Z -> sZ*Z*Z -> Z*s,例如:

r, s, A, B, C, a, b, c = sp.symbols("r s A B C a b c")
Z = sp.symbols("Z")
f1 = x*(A*x*x + B*x + C)
f2 = f1.subs(x, r+Z).expand().subs(Z**3, Z*s).subs(Z**2, s)

然后f2.coeff(Z)将返回我想要的内容。我想我仍然想要 知道如何将两个替换Z*Z*Z -> Z*sZ*Z -> s合并为一个?例如,如果多项式具有更高的阶数并且我需要降低Z的高次幂,那将很方便。

0 个答案:

没有答案