如何为SymPy表达式中的每个三角函数添加pi/4相位偏移
SymPy 为表达式中所有三角函数添加相位偏移的实现方法
你需求的效果完全可以通过遍历表达式树的方式实现,SymPy 内置的方法已经封装了底层遍历逻辑,无需手动实现递归遍历,也可以手写递归遍历表达式树完成替换,两种实现方案如下:
方案1:使用内置replace方法(推荐)
直接调用SymPy表达式自带的replace方法,匹配所有sin、cos节点做替换即可:
import sympy as sy from sympy import cos, sin, pi theta = sy.symbols('theta') expr = 5*cos(theta) + sin(theta*2) + 3*cos(3*theta) # 执行替换 expr_shifted = expr.replace( lambda node: node.func in (sin, cos), lambda node: node.func(node.args[0] + pi/4) ) print(expr_shifted) # 输出:sin(2*theta + pi/4) + 5*cos(theta + pi/4) + 3*cos(3*theta + pi/4)
方案2:手动递归遍历表达式树
如果你需要更灵活的控制遍历逻辑,可以手写递归函数遍历整个表达式树:
def add_phase(expr, phase=pi/4): # 匹配到sin/cos节点时添加相位偏移 if expr.func in (sin, cos): return expr.func(expr.args[0] + phase) # 其他节点递归处理所有子参数后重构节点 return expr.func(*[add_phase(arg, phase) for arg in expr.args]) expr_shifted = add_phase(expr) print(expr_shifted) # 输出和方案1完全一致
内容的提问来源于stack exchange,提问作者justin
相关产品推荐
相关产品推荐

