如何用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/24),改用SymPy的精确分数类型,避免运算精度损失。 - 用
expand()替代simplify():simplify()会优先合并为分式形式,expand()则会将表达式展开为多项式项的和。 - 可选:用
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
相关产品推荐
相关产品推荐

