我正在自学Python的SymPy,我被卡住了。我有一个表达式f = x**3-7*x+7
,我需要计算f(1/x+1)
。
我试过了
x = symbols('x')
f = x**3-7*x+7
f_new = f.subs(x, (1/(x+1)))
simplify(f_new)
结果是x/(x+1)**4+7-7/(x+1)+(x+1)**(-4)
。但我需要得到f_new
的系数。即使是尝试evalf
和eval
似乎也不起作用。我知道它将x+1
“锁定”为新的x
,所以它没有进行正确的计算。
有没有用x=1/x+1
形式计算表达式f(x)
的另一种方法
发布于 2019-12-11 22:17:50
您可以将表达式拆分为分数,然后获得分子和分母的系数:
from sympy import *
x = symbols('x')
f = x**3-7*x+7
f_new = f.subs(x, (1/(x+1)))
numerator, denominator = fraction(together(f_new))
print(numerator)
print(denominator)
print(Poly(numerator).coeffs())
print(Poly(denominator).coeffs())
输出:
7*(x + 1)**3 - 7*(x + 1)**2 + 1
(x + 1)**3
[7, 14, 7, 1]
[1, 3, 3, 1]
当还需要零系数时,请使用all_coeffs
而不是coeffs
。
如果只想将多项式写成展开形式,请使用numerator = expand(numerator)
。
我尝试使用simplify(f_new).as_numer_denom()
,但这种方法在分子和分母中都留下了多余的(x + 1)**2
因子。
PS:正如@asmeurer在评论中提到的,您可以使用cancel
来编写规范形式的分数。
https://stackoverflow.com/questions/59265823
复制相似问题