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

如何为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:06:01