是否有一种简单的方法可以实现符号Hilbert变换,例如输入cos(x)会吐出sin(x)?
Sympy似乎没有将希尔伯特变换定义为符号积分(docs)。
我尝试根据其限制形式(来自Wikipedia)来定义它。我会在这里添加等式,但我没有足够的代表这样做。
我的同情尝试给了我一个“未实现的错误”:
from sympy import *
t, eps, tau = symbols('t eps tau')
limit(integrate( (sin(t+tau) - sin(t-tau))/tau, (tau, eps, oo) ), eps, 0)
有没有办法在同情中这样做?或者,是否有其他开源替代品可以实现这一目标?
更新
根据Stelios为符号变量添加约束确实解决了sin(x)的微不足道的情况,但是对于任何更复杂的问题都会遇到问题。
import sympy as sp
t, tau = sp.symbols('t, tau', real = True)
eps = sp.symbols('epsilon', positive = True)
u1 = lambda x: sp.sin(x)/x
u2 = lambda x: 1/(x**2 + 1)
sp.limit(sp.integrate( (u1(t+tau) - u1(t-tau))/tau, (tau, eps, sp.oo) ), eps, 0)
sp.limit(sp.integrate( (u2(t+tau) - u2(t-tau))/tau, (tau, eps, sp.oo) ), eps, 0)
使用u1时,计算会在发出相同的“未实现的错误”之前暂停一段时间,而使用u2时,它会输出0.是否有更通用的方法来实现转换?
答案 0 :(得分:0)
显然,sympy无法执行“一般”eps
的集成。但是,如果将eps
指定为正变量,则可以评估积分(至少对于您正在考虑的特定函数)
import sympy as sp
t, tau = sp.symbols('t, tau', real = True)
eps = sp.symbols('epsilon', positive = True)
u = sp.sin
sp.limit(sp.integrate( (u(t+tau) - u(t-tau))/tau, (tau, eps, sp.oo) ), eps, 0)
pi*cos(t)