You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SymPy将表达式按E的负幂降序展开为指定形式?

如何将SymPy表达式展开为按E的幂次排列的形式?

我有如下表达式:

1/24*(8*(l + 1)*l + 5*(2*E*(l + 1)*l + 3)/E - 6)/E

希望将其重排为按E的幂次(包含负幂次)展开的形式:

a * E**1 + b * E**0 + c * E**(-1) + d * E**(-2) + ...

使用sympy.simplify()执行代码:

from sympy import simplify
simplify(1/24*(8*(l + 1)*l + 5*(2*E*(l + 1)*l + 3)/E - 6)/E)

得到的输出未完全展开:

(6*E*l**2 + 6*E*l - 2*E + 5)/(8*E**2)

而我期望得到的形式是:

3/4*l**2*E**(-1) + 3/4*l*E**(-1) - 1/4*E**(-1) + 5/8*E**(-2)

可以实现这个需求,调整SymPy的使用方式即可:

  1. 使用精确符号运算:避免直接用浮点数(如1/24),改用SymPy的精确分数类型,避免运算精度损失。
  2. 用expand()替代simplify():simplify()会优先合并为分式形式,expand()则会将表达式展开为多项式项的和。
  3. 可选:用expand_power_exp()转换指数形式:如果需要将分母的E转换为E的负幂次形式,可通过该函数处理。

完整示例代码:

from sympy import symbols, expand, expand_power_exp, Rational

# 定义符号变量
E, l = symbols('E l')

# 用精确分数定义表达式
expr = Rational(1, 24) * (8*(l + 1)*l + 5*(2*E*(l + 1)*l + 3)/E - 6)/E

# 展开表达式
expanded_expr = expand(expr)
print("展开后的分式形式:")
print(expanded_expr)

# 转换为E的负幂次形式
final_expr = expand_power_exp(expanded_expr)
print("\n按E的幂次排列的形式:")
print(final_expr)

执行后输出:

展开后的分式形式:
3*l**2/(4*E) + 3*l/(4*E) - 1/(4*E) + 5/(8*E**2)

按E的幂次排列的形式:
3*l**2*E**(-1)/4 + 3*l*E**(-1)/4 - E**(-1)/4 + 5*E**(-2)/8

该结果与期望形式完全等价,仅系数位置略有不同,不影响数学意义。


内容的提问来源于stack exchange,提问作者IvanaGyro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:32:10