Simulating Quantum Systems with Qutip: A Deep Dive

Mihirsinh Chauhan
4 min readSep 10, 2023


Welcome to Day 10 of an exciting journey into the quantum realm! In today’s exploration, we’ll be delving deep into the fascinating world of quantum simulation using Qutip, a powerful Python library that serves as a gateway to understanding quantum behavior. Throughout this blog, we’ll unravel the physics and mathematics behind quantum simulations and provide practical examples along with their results.

Simulation 1: Quantum Harmonic Oscillator

Our first stop is the realm of the quantum harmonic oscillator. This system is a cornerstone of quantum mechanics and is defined by the Hamiltonian:


  • H is the Hamiltonian operator.
  • ℏ is the reduced Planck constant.
  • ω is the angular frequency.
  • a† and a are the creation and annihilation operators.

Creation operators and annihilation operators are mathematical operators that have widespread applications in quantum mechanics, notably in the study of quantum harmonic oscillators and many-particle systems. An annihilation operator (usually denoted a) lowers the number of particles in a given state by one. A creation operator (usually denoted a†) increases the number of particles in a given state by one, and it is the adjoint of the annihilation operator.

In this simulation, we create the Hamiltonian for a 5-level harmonic oscillator, calculate its energy levels, and visualize them.

import qutip as qt
import numpy as np
import matplotlib.pyplot as plt

# Define parameters
omega = 1.0 # Angular frequency

# Create the Hamiltonian for the quantum harmonic oscillator
H = omega * (qt.destroy(5).dag() * qt.destroy(5) + 0.5 * qt.qeye(5))

# Calculate energy levels and eigenstates
energies, states = H.eigenstates()

# Visualize energy levels
plt.plot(range(len(energies)), energies, marker='o', linestyle='-')
plt.xlabel('Energy Level')
plt.title('Energy Levels of Quantum Harmonic Oscillator')


By running this code, you’ll see a plot displaying the energy levels of the quantum harmonic oscillator. These energy levels are evenly spaced, which is a characteristic feature of a harmonic oscillator.

Simulation 2: Two-Qubit System

In this simulation, we work with a two-qubit system. We create a Bell state, which is an entangled state, and apply a Hadamard gate to one qubit. The mathematics involves using quantum gates to manipulate the quantum state of the system.

import qutip as qt

# Define two-qubit basis states
qubit_0 = qt.basis(2, 0) # |0⟩
qubit_1 = qt.basis(2, 1) # |1⟩

# Create a Bell state (entangled state)
bell_state = (qt.tensor(qubit_0, qubit_0) + qt.tensor(qubit_1, qubit_1)).unit()

# Apply a quantum gate (Hadamard gate) to the first qubit
hadamard_gate = qt.hadamard_transform()
result_state = qt.tensor(hadamard_gate, qt.qeye(2)) * bell_state

# Calculate the density matrix
density_matrix = qt.ket2dm(result_state)

# Display the density matrix
print("Density Matrix:")


Density Matrix:
Quantum object: dims = [[2, 2], [2, 2]], shape = (4, 4), type = oper, isherm = True
Qobj data =
[[ 0.25 0.25 0.25 -0.25]
[ 0.25 0.25 0.25 -0.25]
[ 0.25 0.25 0.25 -0.25]
[-0.25 -0.25 -0.25 0.25]]

Simulation 3: Quantum Measurements

In this simulation, we perform a measurement on a qubit in the Z-basis. The outcome of a quantum measurement in the Z-basis can be either |0⟩ or |1⟩. The mathematics involves using the measurement operator σz​ and the Born rule to calculate the measurement outcome probabilities.

import qutip as qt

# Define a qubit in an arbitrary state
psi = qt.basis(2, 0) # |0⟩

# Perform a measurement in the Z-basis
result = qt.measurement.measure(psi, qt.sigmaz())

# Display the measurement result
print("Measurement Result (Z-basis):", result[0])


Measurement Result (Z-basis): 1.0

After running this code, you’ll get either “Measurement Result (Z-basis): 0” or “Measurement Result (Z-basis): 1” as the outcome. This represents the result of a quantum measurement in the Z-basis of the initial qubit state. It’s a fundamental aspect of quantum mechanics that measurements can yield probabilistic outcomes.


In this blog, we embarked on a journey into the heart of quantum simulations with Qutip. Each simulation provided valuable insights into different facets of quantum systems, from energy levels to state transformations and measurement outcomes. Armed with an understanding of the physics, mathematics, and practical implementation of quantum simulations, you’re now better equipped to explore the intricacies of the quantum world. As we continue our journey, more complex quantum systems and exciting quantum applications await. Stay tuned for more quantum adventures!

#Day10 of #Quantum30 day challenge



Mihirsinh Chauhan

《Quantum computing Enthusiast |Future Innovator》《Under grad at SVNIT | ML| Buisness Amateur》