Parameter Sweeps: Basic

Determining the dependence of physical observables on an external parameter is a common way to gain intuition for the properties and behavior of a system. Such parameter sweeps can be performed with scqubits on multiple levels:

  • at the level of a single qubit,

  • at the level of a composite quantum system.

At the single-qubit level, each qubit class provides several methods that enable producing parameter sweep data and plots. Central quantities of interest, in this case, are energy eigenvalues and matrix elements – in particular, their dependence on parameters like flux or offset charge.

The relevant methods available for every implemented qubit class are:

class method



for each provided value of a specified qubit parameter, compute eigenvalues and eigenvectors


for each provided value of a specified qubit parameter, compute matrix elements of a given operator w.r.t. the qubit eigenstates


plot the energy eigenvalues as a function of a specified qubit parameter


plot the matrix elements for a given operator as a function of a specified qubit parameter

The following code illustrates this functionality for the example of a fluxonium qubit.

fluxonium_qbt = scq.Fluxonium.create()
# define an array of flux values
fluxvals = np.linspace(0, 1, 80)
fluxonium_qbt.plot_evals_vs_paramvals(param_name='flux', param_vals=fluxvals);

Note: the argument param_name must be one of the parameters with which the qubit in question is initialized. (More flexibility can be achieved by using the ParameterSweep class below, using a Hilbert space composed just of the qubit by itself.)

To generate spectral data and return them in the form of a SpectrumData object, we may use:

specdata = fluxonium_qbt.get_spectrum_vs_paramvals(param_name='flux', param_vals=fluxvals);
< at 0x171f36f4520>

To retrieve eigenvalues and eigenvectors, one simply accesses the attributes <SpectrumData>.energy_table and <SpectrumData>.state_table. Furthermore, SpectrumData itself allows one to produce a plot of the eigenvalues from the generated data.

These are the lowest six eigenenergies (in GHz, by default) for the first flux value:

array([-4.28338463,  4.47506063,  4.69616798,  6.71864972, 12.64960539,

And this generates the eigenenergy plot:


In a similar manner, one can generate a plot of matrix elements as a function of a parameter value. (Since matrix elements are generally complex-valued, the absolute value is plotted by default. The mode argument allows for additional options.)

fluxonium_qbt.plot_matelem_vs_paramvals(operator='phi_operator', param_name='flux', param_vals=fluxvals);