Python 3.x 当用量子点绘制相干态的维格纳函数时,会出现奇怪的图案

Python 3.x 当用量子点绘制相干态的维格纳函数时,会出现奇怪的图案,python-3.x,qutip,Python 3.x,Qutip,今天,当我使用python中的开源量子工具箱QuTiP绘制相干态的Wigner函数时,我注意到了一些奇怪的事情 当我画这幅图时,我注意到这些奇怪的图案就在这幅图的边缘,它们本不应该存在。我相信这只是某种数值上的错误,但我不知道如何消除或最小化它们,或者说最重要的:是什么导致了它们 这是密码 # import packages import numpy as np import matplotlib.pyplot as plt import matplotlib.colors as colors

今天,当我使用python中的开源量子工具箱QuTiP绘制相干态的Wigner函数时,我注意到了一些奇怪的事情

当我画这幅图时,我注意到这些奇怪的图案就在这幅图的边缘,它们本不应该存在。我相信这只是某种数值上的错误,但我不知道如何消除或最小化它们,或者说最重要的:是什么导致了它们

这是密码

# import packages
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors
import matplotlib as mpl
from matplotlib import cm
from qutip import *

N = 60 # number of levels in Hilbert space

# density matrix of a coherent state
rho_coherent = coherent_dm(N, 1-1j)

X = np.linspace(-3, 3, 300)
Y = np.linspace(-3, 3, 300)

# Wigner function
W = wigner(rho_coherent, X, Y, 'iterative', 2)

X, Y = np.meshgrid(X, Y)

# Color Normalization
class MidpointNormalize(colors.Normalize):
    def __init__(self, vmin=None, vmax=None, midpoint=None, clip=False):
        self.midpoint = midpoint
        colors.Normalize.__init__(self, vmin, vmax, clip)
    def __call__(self, value, clip=None):
        x, y = [self.vmin, self.midpoint, self.vmax], [0, 0.5, 1]
        return np.ma.masked_array(np.interp(value, x, y))

# contour plot
plt.subplot(111, aspect='equal')
plt.contourf(X, Y, W, 100, cmap = cm.RdBu_r, norm = MidpointNormalize(midpoint=0.))
plt.show()
下面是情节

你可以清楚地看到,边缘周围的蓝色斑点不应该在那里!蓝点表示Wigner函数在该点为负,但相干态的Wigner函数应该处处为正

我还注意到,当我将linspace步长从300减少到100时,蓝色部分消失了


如果有人能解释是什么原因导致出现此问题,我们将不胜感激。

这只是由于截断。当使用有限数量的模式时(在您的情况下,N=60),Wigner函数在某个点将变为负值

减少linspace步长会将您在绘图上看到的负区域带入零值增量,并将这些区域显示为零。减少linspace步骤可能是解决问题的最佳方法。您的绘图将只与截断引入的错误一样精确,因此只需降低分辨率,直到这些错误消失