当使用 QuTiP 绘制相干态的 Wigner 函数时出现奇怪的模式
When plotting the Wigner function of a coherent state using QuTiP strange patterns appear
今天在python中使用开源量子工具箱QuTiP绘制相干态的维格纳函数时,我注意到了一些奇怪的事情。
当我做这个情节时,我注意到这些奇怪的图案就在情节的边缘,这些图案本不应该存在的。我相信这只是某种数字错误,但我不知道如何摆脱或最小化它们,或者最重要的是:是什么导致了它们。
这是代码
# 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()
这是情节
您可以清楚地看到边缘周围的蓝点不应该存在!蓝点表示此时维格纳函数为负,但相干态应该有维格纳函数处处为正!
我还注意到,当我将 linspace 步数从 300 减少到 100 时,蓝色部分消失了。
如果有人能解释导致出现此问题的原因,将不胜感激。
这仅仅是由于截断。当使用有限数量的模式时(在您的情况下 N=60),Wigner 函数在某些时候会变为负数。
减少 linspace 步骤会使您在绘图上看到的负区域变为零值增量,并将这些区域显示为零。减少 linspace 步骤可能是解决问题的最佳方法。您的绘图只会与截断引入的错误一样准确,因此只需降低分辨率直到这些错误消失。
今天在python中使用开源量子工具箱QuTiP绘制相干态的维格纳函数时,我注意到了一些奇怪的事情。
当我做这个情节时,我注意到这些奇怪的图案就在情节的边缘,这些图案本不应该存在的。我相信这只是某种数字错误,但我不知道如何摆脱或最小化它们,或者最重要的是:是什么导致了它们。
这是代码
# 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()
这是情节
您可以清楚地看到边缘周围的蓝点不应该存在!蓝点表示此时维格纳函数为负,但相干态应该有维格纳函数处处为正!
我还注意到,当我将 linspace 步数从 300 减少到 100 时,蓝色部分消失了。
如果有人能解释导致出现此问题的原因,将不胜感激。
这仅仅是由于截断。当使用有限数量的模式时(在您的情况下 N=60),Wigner 函数在某些时候会变为负数。
减少 linspace 步骤会使您在绘图上看到的负区域变为零值增量,并将这些区域显示为零。减少 linspace 步骤可能是解决问题的最佳方法。您的绘图只会与截断引入的错误一样准确,因此只需降低分辨率直到这些错误消失。