Ejemplo n.º 1
0
def test_messy():
    from sympy import (laplace_transform, Si, Shi, Chi, atan, Piecewise,
                       acoth, E1, besselj, acosh, asin, And, re,
                       fourier_transform, sqrt)
    assert laplace_transform(Si(x), x, s) == ((-atan(s) + pi/2)/s, 0, True)

    assert laplace_transform(Shi(x), x, s) == (acoth(s)/s, 1, True)

    # where should the logs be simplified?
    assert laplace_transform(Chi(x), x, s) == \
        ((log(s**(-2)) - log((s**2 - 1)/s**2))/(2*s), 1, True)

    # TODO maybe simplify the inequalities?
    assert laplace_transform(besselj(a, x), x, s)[1:] == \
        (0, And(S(0) < re(a/2) + S(1)/2, S(0) < re(a/2) + 1))

    # NOTE s < 0 can be done, but argument reduction is not good enough yet
    assert fourier_transform(besselj(1, x)/x, x, s, noconds=False) == \
        (Piecewise((0, 4*abs(pi**2*s**2) > 1),
                   (2*sqrt(-4*pi**2*s**2 + 1), True)), s > 0)
    # TODO FT(besselj(0,x)) - conditions are messy (but for acceptable reasons)
    #                       - folding could be better

    assert integrate(E1(x)*besselj(0, x), (x, 0, oo), meijerg=True) == \
        log(1 + sqrt(2))
    assert integrate(E1(x)*besselj(1, x), (x, 0, oo), meijerg=True) == \
        log(S(1)/2 + sqrt(2)/2)

    assert integrate(1/x/sqrt(1 - x**2), x, meijerg=True) == \
        Piecewise((-acosh(1/x), 1 < abs(x**(-2))), (I*asin(1/x), True))
Ejemplo n.º 2
0
def test_messy():
    from sympy import (laplace_transform, Si, Shi, Chi, atan, Piecewise, acoth,
                       E1, besselj, acosh, asin, And, re, fourier_transform,
                       sqrt)
    assert laplace_transform(Si(x), x, s) == ((-atan(s) + pi / 2) / s, 0, True)

    assert laplace_transform(Shi(x), x, s) == (acoth(s) / s, 1, True)

    # where should the logs be simplified?
    assert laplace_transform(Chi(x), x, s) == \
        ((log(s**(-2)) - log((s**2 - 1)/s**2))/(2*s), 1, True)

    # TODO maybe simplify the inequalities?
    assert laplace_transform(besselj(a, x), x, s)[1:] == \
        (0, And(S(0) < re(a/2) + S(1)/2, S(0) < re(a/2) + 1))

    # NOTE s < 0 can be done, but argument reduction is not good enough yet
    assert fourier_transform(besselj(1, x)/x, x, s, noconds=False) == \
        (Piecewise((0, 4*abs(pi**2*s**2) > 1),
                   (2*sqrt(-4*pi**2*s**2 + 1), True)), s > 0)
    # TODO FT(besselj(0,x)) - conditions are messy (but for acceptable reasons)
    #                       - folding could be better

    assert integrate(E1(x)*besselj(0, x), (x, 0, oo), meijerg=True) == \
        log(1 + sqrt(2))
    assert integrate(E1(x)*besselj(1, x), (x, 0, oo), meijerg=True) == \
        log(S(1)/2 + sqrt(2)/2)

    assert integrate(1/x/sqrt(1 - x**2), x, meijerg=True) == \
        Piecewise((-acosh(1/x), 1 < abs(x**(-2))), (I*asin(1/x), True))
Ejemplo n.º 3
0
Archivo: core.py Proyecto: bcbnz/lcapy
    def fourier(self):
        """Attempt Fourier transform"""

        F = sym.fourier_transform(self.expr, self.var, f)

        if hasattr(self, '_fourier_conjugate_class'):
            F = self._fourier_conjugate_class(F)
        return F
Ejemplo n.º 4
0
def fourier_sympy(expr, t, f):

    result = sym.fourier_transform(expr, t, f)
    if expr != 0 and result == 0:
        # There is a bug in SymPy where it returns 0.
        raise ValueError('Could not compute Fourier transform for ' +
                         str(expr))

    return result
Ejemplo n.º 5
0
def verify_5a(answer):

    import sympy

    x = sympy.Symbol('x', real=True)
    k = sympy.Symbol('k', real=True)
    func = sympy.exp(-x**2)

    solution = sympy.fourier_transform(func, x, k)
    return answer == solution
Ejemplo n.º 6
0
def fourier_sympy(expr, t, f):

    result = sym.fourier_transform(expr, t, f)
    if expr != 0 and result == 0:
        # There is a bug in SymPy where it returns 0.
        raise ValueError('Could not compute Fourier transform for ' + str(expr))

    if isinstance(result, sym.FourierTransform):
        raise ValueError('Could not compute Fourier transform for ' + str(expr))
    
    return result
Ejemplo n.º 7
0
from sympy import Piecewise, Abs
from sympy.abc import W, n
from matplotlib.backend_bases import KeyEvent
import matplotlib.pyplot as plt


def on_key(event:KeyEvent):
    if event.key == 'escape':
        plt.close()


#%% DTFT
# 三角波序列
xn = Piecewise((0, (n < -1) | (n > 1)), (n+1, n < 0), (1-n, n >= 0))
# xW = fourier.dtft(xn)
xW = sy.fourier_transform(xn, n, W) # 因为dtft不能计算,使用ft来绘图
print('xn: ', [xn.subs(n, j).evalf() for j in range(5)])
print('xW: ', [Abs(xW.subs(W, j).evalf()) for j in range(5)])
fig = plt.figure('Discrete Time Fourier Transform')
fig.canvas.mpl_connect('key_press_event', on_key)
ax = fig.add_subplot(1, 2, 1)
xn_range = np.linspace(-2, 2, 51)
xn_points = [xn.subs(n, j).evalf() for j in xn_range]
ax.stem(xn_range, xn_points, linefmt='g-', basefmt='o', use_line_collection=True)
ax = fig.add_subplot(1, 2, 2)
xW_range = (np.linspace(-2*5, 2*5, 255))
xW_points = [Abs(xW.subs(W, j).evalf()) for j in xn_range]*5
ax.plot(xW_range, xW_points)
ax.set_xlabel(r'$|X(e^{j\Omega})|-\Omega$')

plt.show()
Ejemplo n.º 8
0
 def update_spectrum(self):
     self.spectrum = fourier_transform(self.autocorrelation, tau, omega/(2*pi))
Ejemplo n.º 9
0
# In[130]:

w = sympy.symbols("omega")

# In[131]:

f = sympy.exp(-a * t**2)

# In[132]:

help(sympy.fourier_transform)

# In[133]:

F = sympy.fourier_transform(f, t, w)

# In[134]:

F

# In[135]:

sympy.inverse_fourier_transform(F, w, t)

# ## Versions

# In[136]:

get_ipython().magic(u'reload_ext version_information')
Ejemplo n.º 10
0
h = ax.plot_surface(x,y,z, cmap = 'jet', edgecolor='k')
plt.colorbar(h)

ax.set_xlabel('X', fontweight='bold', fontsize=14)
ax.set_ylabel('Y', fontweight='bold', fontsize=14)
ax.set_zlabel('Z', fontweight='bold', fontsize=14)

ax.set_title('Spherical Bessel function', fontweight='bold', fontsize=16)
plt.show()


import sympy as sp
from sympy import fourier_transform, exp,symbols 
from sympy.abc import x, k

a=fourier_transform(exp(-x**2), x, k)
s=symbols('s') 
Ori=(s)*exp(-(x**2)/(s**2)) 
FT=fourier_transform(Ori,x,k)
 
a.subs({k:1}).evalf()


from scipy.special import legendre
 
N = 1000
xval = np.linspace(-1,1,N)
def frank(x,n):
    leg = legendre(n)
    P_n = leg(x)
    return  P_n
Ejemplo n.º 11
0
g2t_con = conjugate(g2t)
g3t_con = conjugate(g3t)

# 高斯函数前三阶导数的能量归一化因子
C0 = sqrt(1 / integrate(g0t * g0t_con, (t, -oo, +oo)))
C1 = sqrt(1 / integrate(g1t * g1t_con, (t, -oo, +oo)))
C2 = sqrt(1 / integrate(g2t * g2t_con, (t, -oo, +oo)))
C3 = sqrt(1 / integrate(g3t * g3t_con, (t, -oo, +oo)))

# 能量归一化后的高斯小波
gauss0 = C0 * g0t
gauss1 = (-1)**2 * C1 * g1t
gauss2 = (-1)**3 * C2 * g2t
gauss3 = (-1)**4 * C3 * g3t

# 能量归一化后的高斯小波的傅里叶变换
ftg0 = fourier_transform(gauss0, t, f)
ftg1 = fourier_transform(gauss1, t, f)
ftg2 = fourier_transform(gauss2, t, f)
ftg3 = fourier_transform(gauss3, t, f)

# 能量归一化后的高斯小波的中心频率
fc0 = integrate(f * ftg0 * conjugate(ftg0),
                (f, 0, +oo)) / integrate(ftg0 * conjugate(ftg0), (f, 0, +oo))
fc1 = integrate(f * ftg1 * conjugate(ftg1),
                (f, 0, +oo)) / integrate(ftg1 * conjugate(ftg1), (f, 0, +oo))
fc2 = integrate(f * ftg2 * conjugate(ftg2),
                (f, 0, +oo)) / integrate(ftg2 * conjugate(ftg2), (f, 0, +oo))
fc3 = integrate(f * ftg3 * conjugate(ftg3),
                (f, 0, +oo)) / integrate(ftg3 * conjugate(ftg3), (f, 0, +oo))