Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python-dblquad实现复杂平面的面积积分_Python_Integration_Numerical_Plane - Fatal编程技术网

用python-dblquad实现复杂平面的面积积分

用python-dblquad实现复杂平面的面积积分,python,integration,numerical,plane,Python,Integration,Numerical,Plane,我的问题与量子光学有关。我试图确定Fock状态的Wigner函数,它涉及复杂平面中的积分。我的代码非常慢,所以我想问你是否可以帮助我提高速度 from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm import pylab import numpy as np import mpmath import sys mpmath.dps = 5 from sympy import laguerre_l import scipy

我的问题与量子光学有关。我试图确定Fock状态的Wigner函数,它涉及复杂平面中的积分。我的代码非常慢,所以我想问你是否可以帮助我提高速度

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import pylab
import numpy as np
import mpmath
import sys
mpmath.dps = 5
from sympy import laguerre_l
import scipy
from scipy.integrate import quad,dblquad

def complex_quadrature(func, a, b, **kwargs):
    def real_func(x,y):
    return scipy.real(func(complex(x,y)))
def imag_func(x,y):
    return scipy.imag(func(complex(x,y)))
real_integral = dblquad(real_func, a, b, lambda x: a, lambda x: b, **kwargs)
imag_integral = dblquad(imag_func, a, b, lambda x: a, lambda x: b, **kwargs)
return complex(real_integral[0], imag_integral[0])

f = lambda z: 1/(np.pi**2)*complex_quadrature(lambda x:scipy.exp(x.conjugate()*z-        x*z.conjugate())*complex(laguerre_l(1,0,abs(x)**2),0)*scipy.exp(-abs(x)**2), -5, 5)

fig = pylab.figure()
ax = Axes3D(fig)
X = np.arange(-4, 4, 0.1)
Y = np.arange(-4, 4, 0.1)
X, Y = np.meshgrid(X, Y)
xn, yn = X.shape
W = X*0

for xk in range(xn):
for yk in range(yn):
    try:
        z = complex(X[xk,yk],Y[xk,yk])
        print (f(z))
        w = abs(z)
                if w != w:
            raise ValueError
            W[xk,yk] = w
        except (ValueError, TypeError, ZeroDivisionError):
                pass

ax.plot_surface(X, Y, W, rstride=1, cstride=1, cmap=cm.jet,linewidth=0,alpha=.9)
pylab.show()
注意:其中大部分是从stackoverflow复制和修改的,所以我不主张所有权…

z=complex(X[xk,yk],Y[xk,yk])
z = complex(X[xk,yk],Y[xk,yk])
##  print (f(z))    ## <---- Commenting this line will solve your problem
w = abs(z)
##print(f(z))##
z=complex(X[xk,yk],Y[xk,yk])

##print(f(z))35;##我想把复杂平面映射到二维实空间要容易得多,至少要快得多w
?认真地此外,粘贴的代码需要更好的缩进。我想将复杂平面映射到二维实空间将更容易或至少更快w
?认真地粘贴的代码也需要更好的缩进