DEMO: Quantum Waves#

import numpy as np
import matplotlib.pyplot as plt
from ipywidgets.widgets import interact, interactive

%matplotlib inline
%config InlineBackend.figure_format = 'retina'

Linear superspositions and time dependence#

def psi_n(x, n):
    """Time-independent wavefunction for a particle in a box."""
    L = 1 # set box length

    return np.sqrt(2/L) * np.sin(n * np.pi * x / L)

def T_n(t, n):
    """Time dependence factor for the wavefunction."""
    L = 1 # set box length
    m, hbar = 1, 1 # set atomic units
    En = n**2 * np.pi**2 * hbar**2 / (2 * m * L**2)

    return np.exp(-1j * En * t / hbar)

def psi_combined(x, t, L, c1=1, c2=1, n1=1, n2=2):
    """Time-dependent wavefunction for a linear superposition of two states of PIB"""

    return c1 * psi_n(x, n1) * T_n(t, n1) + c2 * psi_n(x, n2) * T_n(t, n2)

Plot time dependent quantum wavefunctions#

def plot_wavefunction(t=0, c1=1, c2=1, n1=1, n2=1):

    L = 1.0
    x = np.linspace(0, L, 1000)

    psi_squared_x = np.abs(psi_combined(x, t, c1, c2, n1, n2))**2

    plt.plot(x, psi_squared_x )

    plt.title(f"Probability density at t={t:.2f} with c1={c1:.2f} and c2={c2:.2f}")
    plt.xlabel('x')
    plt.ylabel('$|\Psi(x, t)|^2$')
    plt.grid(True)
    plt.ylim([0, 10])  # Adjust the y limit to suit the range of the probability density
    plt.show()
plot_wavefunction(t=1, c1=1, c2=1, n1=1, n2=1)
../_images/460655654f5d9e51239a7e9f59778bcb40c3558b56ab65dfe440cc08bf4d7b5a.png
interact(plot_wavefunction, t=(0, 10, 0.1), c1=(-1.5, 1.5, 0.1), c2=(-1.5, 1.5, 0.1), n1=(1,5), n2=(1,5))
<function __main__.plot_wavefunction(t=0, c1=1, c2=1, n1=1, n2=1)>