J.R. Johansson and P.D. Nation
For more information about QuTiP see http://qutip.org
Animation with qutip and matplotlib: decaying qubit visualized in a Bloch sphere. (Animation with matplotlib does not work yet in python3)
import matplotlib.pyplot as plt
import numpy as np
from qutip import Bloch, about, basis, mesolve, sigmam, sigmax, sigmay, sigmaz
from qutip.ipynbtools import plot_animation
%matplotlib inline
def qubit_integrate(w, theta, gamma1, gamma2, psi0, tlist):
# operators and the hamiltonian
sx = sigmax()
sy = sigmay()
sz = sigmaz()
sm = sigmam()
H = w * (np.cos(theta) * sz + np.sin(theta) * sx)
# collapse operators
c_op_list = []
n_th = 0.5 # temperature
rate = gamma1 * (n_th + 1)
if rate > 0.0:
c_op_list.append(np.sqrt(rate) * sm)
rate = gamma1 * n_th
if rate > 0.0:
c_op_list.append(np.sqrt(rate) * sm.dag())
rate = gamma2
if rate > 0.0:
c_op_list.append(np.sqrt(rate) * sz)
# evolve and calculate expectation values
output = mesolve(H, psi0, tlist, c_op_list, [sx, sy, sz])
return output
w = 1.0 * 2 * np.pi # qubit angular frequency
theta = 0.2 * np.pi # qubit angle from sigma_z axis (toward sigma_x axis)
gamma1 = 0.5 # qubit relaxation rate
gamma2 = 0.2 # qubit dephasing rate
# initial state
a = 1.0
psi0 = (a * basis(2, 0) + (1 - a) * basis(2, 1)) / \
(np.sqrt(a**2 + (1 - a) ** 2))
tlist = np.linspace(0, 4, 150)
result = qubit_integrate(w, theta, gamma1, gamma2, psi0, tlist)
def plot_setup(result):
fig = plt.figure(figsize=(8, 8))
axes = fig.add_subplot(111, projection="3d", elev=30, azim=-40)
return fig, axes
sphere = None
def plot_result(result, n, fig=None, axes=None):
global sphere
if fig is None or axes is None:
fig, axes = plot_setup(result)
if not sphere:
sphere = Bloch(axes=axes)
sphere.vector_color = ["r"]
sphere.clear()
sphere.add_vectors([result.expect[0][n],
result.expect[1][n],
result.expect[2][n]])
sphere.add_points(
[
result.expect[0][: n + 1],
result.expect[1][: n + 1],
result.expect[2][: n + 1],
],
meth="l",
)
sphere.make_sphere()
return axes.artists
# You can choose your own writer and codec here.
# Setting codec=None sets the codec to the standard
# defined in matplotlib.rcParams['animation.codec']
plot_animation(plot_setup, plot_result, result, writer="ffmpeg", codec=None)
about()
QuTiP: Quantum Toolbox in Python ================================ Copyright (c) QuTiP team 2011 and later. Current admin team: Alexander Pitchford, Nathan Shammah, Shahnawaz Ahmed, Neill Lambert, Eric Giguère, Boxi Li, Jake Lishman, Simon Cross and Asier Galicia. Board members: Daniel Burgarth, Robert Johansson, Anton F. Kockum, Franco Nori and Will Zeng. Original developers: R. J. Johansson & P. D. Nation. Previous lead developers: Chris Granade & A. Grimsmo. Currently developed through wide collaboration. See https://github.com/qutip for details. QuTiP Version: 5.1.0.dev0+50fc9b7 Numpy Version: 1.22.4 Scipy Version: 1.13.0 Cython Version: 3.0.10 Matplotlib Version: 3.5.2 Python Version: 3.10.4 Number of CPUs: 4 BLAS Info: Generic INTEL MKL Ext: False Platform Info: Linux (x86_64) Installation path: /usr/share/miniconda3/envs/test-environment/lib/python3.10/site-packages/qutip ================================================================================ Please cite QuTiP in your publication. ================================================================================ For your convenience a bibtex reference can be easily generated using `qutip.cite()`