Python 球面贝塞尔变换的辛方法

Python 球面贝塞尔变换的辛方法,python,sympy,bessel-functions,Python,Sympy,Bessel Functions,我想写一个Python(带有SymPy lib)代码,它可以在函数的傅里叶变换(FT)和傅里叶逆变换(iFT)之间来回计算。假设有一个函数f(r),它的FTg(q)=FT[f(r)]和新函数的iFTf(r)=iFT[g(q)] 我使用Symphy的Python代码无法实现这一点,但一个简单的Mathematica代码可以轻松实现这一点 我的Python代码中是否遗漏了什么 或者Sympy不能做我想做的事 Python代码: import sympy as sym q, r, alpha =

我想写一个Python(带有SymPy lib)代码,它可以在函数的傅里叶变换(FT)和傅里叶逆变换(iFT)之间来回计算。假设有一个函数f(r),它的FTg(q)=FT[f(r)]和新函数的iFTf(r)=iFT[g(q)]

我使用Symphy的Python代码无法实现这一点,但一个简单的Mathematica代码可以轻松实现这一点

  • 我的Python代码中是否遗漏了什么
  • 或者Sympy不能做我想做的事
Python代码:

import sympy as sym

q, r, alpha = sym.symbols('q r alpha', positive=True)
def sph_bessel(n, r): 
    if r<>0:
        sph = sym.sqrt((sym.pi)/(2.*r))*sym.besselj(n + 1./2., r)
    elif n==0 and r==0:
        sph = 1
    elif n<>0 and r==0:
        sph = 0
    return sph

FT = lambda f, n, q, r: 4*sym.pi*sym.integrate(f*sph_bessel(n, q*r) * r**2, (r, 0, sym.oo))
invfunc = lambda q, alpha:  alpha**4/(alpha**2 + q**2)**2.

print "              f(r) = %s"%sym.N(func(r, alpha))
print "F(q) = FT(f(r))    = %s"%sym.simplify(sym.N(FT(func(r, alpha), 0, q, r)))
print "f(r) = invFT(F(q)) = %s"%sym.simplify(sym.N(invFT(invfunc(q, alpha), 0, q, r)))
输出:

f(r)=0.0397887357729738*alpha**3*exp(-alpha*r)
F(q)=FT(F(r))=1.0*alpha**4*(alpha**2+1.0*q**2)**(-2.0)
f(r)=invFT(f(q))=0.0397887357729738*alpha**3*exp(-alpha*r)

Symphy已经有了第一类球形贝塞尔函数jn。您是如何定义Symphy的
invFT
?另外,Symphy已经有了
fourier\u transform
inverse\u fourier\u transform
。感谢您的回答:首先,在返回我的问题之前:
jn()
Symphy给出了
jn(0,0)=nan
它应该
jn(0,0)=1
。第二,在看到你的评论之前,我确实来到了
jn
。我知道傅里叶变换和它的逆变换是存在的,但我想得到的是球坐标中的FT和invFT。我已经开始研究
jn(0,0)
问题。Symphy已经有了
jn
,第一类球面贝塞尔函数。你是如何定义Symphy的
invFT
?另外,Symphy已经有了
fourier\u transform
inverse\u fourier\u transform
。感谢您的回答:首先,在返回我的问题之前:
jn()
Symphy给出了
jn(0,0)=nan
它应该
jn(0,0)=1
。第二,在看到你的评论之前,我确实来到了
jn
。我知道傅里叶变换和它的逆变换是存在的,但我想得到的是球坐标系下的FT和invFT。我已经开始研究jn(0,0)问题。
FourierSphrTF =   Integrate[#1 SphericalBesselJ[#2, #4 #3] #3^2, {#3, 0, \[Infinity]},  Assumptions -> #5] &;
FourierSphericalT = 4 \[Pi] FourierSphrTF[#1, #2, #3, #4, #5] &;  InvFourierSphericalT =   1/(2 \[Pi]^2) FourierSphrTF[#1, #2, #3, #4, #5] &; 
FourierSphericalT[\[Alpha]^3 E^(-r \[Alpha])/(8 \[Pi] ) , 0, r, q,   q > 0 && \[Alpha] > 0]
InvFourierSphericalT[\[Alpha]^4/(q^2 + \[Alpha]^2)^2, 0, q, r,  r > 0 && \[Alpha] > 0]