首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用变量替换在python上计算表达式

使用变量替换在python上计算表达式
EN

Stack Overflow用户
提问于 2019-12-10 19:07:06
回答 1查看 94关注 0票数 2

我正在自学Python的SymPy,我被卡住了。我有一个表达式f = x**3-7*x+7,我需要计算f(1/x+1)

我试过了

代码语言:javascript
运行
复制
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的系数。即使是尝试evalfeval似乎也不起作用。我知道它将x+1“锁定”为新的x,所以它没有进行正确的计算。

有没有用x=1/x+1形式计算表达式f(x)的另一种方法

EN

回答 1

Stack Overflow用户

发布于 2019-12-11 22:17:50

您可以将表达式拆分为分数,然后获得分子和分母的系数:

代码语言:javascript
运行
复制
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())

输出:

代码语言:javascript
运行
复制
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来编写规范形式的分数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59265823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档