我从表达式x*(A*x*x + B*x + C*x)
开始,之后
进行替换x -> r + sqrt(s)
我想收集术语,以便
它的格式为a + sqrt(s)*b
,其中a
没有任何sqrt(s)
条款。然后,我想提取表达式a
和b
。
我想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 -> s
和Z*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*s
和Z*Z -> s
合并为一个?例如,如果多项式具有更高的阶数并且我需要降低Z
的高次幂,那将很方便。