plot_population_dynamics
- qctrlvisualizer.plot_population_dynamics(sample_times, populations, *, figure=None)
Create a plot of the dynamics of the specified populations.
- Parameters:
sample_times (np.ndarray) – The 1D array of times in seconds at which the populations have been sampled.
populations (dict) – The dictionary of populations to plot, of the form
{"label_1": population_values_1, "label_2": population_values_2, ...}
. Each population_values_n is a 1D array of population values with the same length as sample_times and label_n is its label. Population values must lie between 0 and 1.figure (matplotlib.figure.Figure, optional) – A matplotlib Figure in which to place the plots. If passed, its dimensions and axes will be overridden.
Examples
Plot the Rabi oscillations of a single qubit with initial state \(|0\rangle\) under the Hamiltonian \(H = \omega \sigma_x\).
import matplotlib.pyplot as plt import numpy as np from qctrl import Qctrl from qctrlvisualizer import plot_population_dynamics qctrl = Qctrl() graph = qctrl.create_graph() omega = 2 * np.pi * 0.5e6 # rad/s duration = 2e-6 # s hamiltonian = graph.constant_pwc_operator( duration, omega * graph.pauli_matrix("X") ) sample_times = np.linspace(0.0, duration, 100) unitaries = graph.time_evolution_operators_pwc( hamiltonian=hamiltonian, sample_times=sample_times, name="unitaries" ) initial_state = graph.fock_state(2, 0)[:, None] evolved_states = unitaries @ initial_state evolved_states.name = "states" result = qctrl.functions.calculate_graph(graph=graph, output_node_names=["states"]) states = result.output["states"]["value"] qubit_populations = np.abs(states.squeeze()) ** 2 plot_population_dynamics( sample_times=sample_times, populations={rf"$|{k}\rangle$": qubit_populations[:, k] for k in [0, 1]}, )