Sympy使用simplify结合欧拉公式化简表达式失效问题咨询
原因说明
SymPy的通用simplify函数通过多规则加权的方式判断化简收益,仅当调整后的表达式在运算步数、字符长度等维度的综合复杂度明显低于原式时,才会执行对应变换。当指数和结构外层存在乘法系数x时,simplify不会默认主动拆分乘积结构对内层做专项匹配,判定两种形式的复杂度差异不大,因此直接返回输入表达式。
无外层系数时,输入结构可以直接命中欧拉公式的化简规则,因此可以正常输出2*cos(varphi)的结果。
可用解决方案
以下三种方案都可以得到你期望的2xcosφ化简结果:
- 直接用
rewrite方法指定将表达式重写为余弦形式,匹配效率最高,无多余计算:
from sympy import * x, phi = symbols("x varphi", real=True) expr = x * (E**(I*phi) + E**(-I*phi)) print(expr.rewrite(cos))
- 先拆分乘积结构再执行通用化简:
print(simplify(expr.expand()))
- 使用针对三角/复数指数场景优化的
trigsimp函数完成化简:
print(trigsimp(expr))
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

