我认为你正在打破你的阴谋,因为你在为每一点都打电话。尝试在循环外调用 show (最后)。
import qutip as qt
import numpy as np
b = qt.Bloch()
theta = np.arange(0,np.pi,0.1)
for ii in range(len(theta)):
b.add_points([np.sin(theta[ii]),0,np.cos(theta[ii])])
b.show() # Changed here
编辑: 动画情节
考虑show
作为一个绝对命令来调用绘图。这不是一个绘图命令(或重绘)。如果您确实想每隔“n”秒左右显示一个图像,那么您需要clear
在再次调用它之前绘制该图。你可以试试这个:
import qutip as qt
import numpy as np
b = qt.Bloch()
theta = np.arange(0,np.pi,0.1)
for ii in range(len(theta)):
b.clear()
b.add_points([np.sin(theta[ii]),0,np.cos(theta[ii])])
b.show()
# wait time step and load new value from file.
,我当前的发行版中没有 QuTip,所以我无法真正测试它,但我打赌它主要基于 matplotlib。不过,我最好的建议是让您使用QuTiP文档中的动画公式。按照这个食谱:
from pylab import *
import matplotlib.animation as animation
from mpl_toolkits.mplot3d import Axes3D
fig = figure()
ax = Axes3D(fig,azim=-40,elev=30)
sphere=Bloch(axes=ax)
def animate(i):
sphere.clear()
sphere.add_vectors([sin(theta),0,cos(theta)])
sphere.add_points([sx[:i+1],sy[:i+1],sz[:i+1]])
sphere.make_sphere()
return ax
def init():
sphere.vector_color = ['r']
return ax
ani = animation.FuncAnimation(fig, animate, np.arange(len(sx)),
init_func=init, blit=True, repeat=False)
ani.save('bloch_sphere.mp4', fps=20, clear_temp=True)
,您应该能够修改 animate 函数以执行您需要的所有操作。