符号希尔伯特转变为同情

时间:2017-04-18 08:55:40

标签: python sympy

是否有一种简单的方法可以实现符号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.是否有更通用的方法来实现转换?

1 个答案:

答案 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)