The propagator is a function that specifies the probability amplitude for a particle to travel from one place to another in a given time (or to travel with a certain energy and momentum).
The propagator can be viewed as the expectation value of the time-evolution operator in the coordinate space:
$$K(x', t; x, t_0) = \langle x'\mid U(t, t_0)\mid x\rangle.$$
Using this propagator we can express the wave function at time $t$ as
$$\psi (x',t)=\int _{-\infty }^{\infty }\psi (x ,t_0)K(x',t;x,t_0)\,dx.$$
For a one dimensional free particle, the Hamiltonian is very simple:
$$\hat{H} = \frac{\hat{p}^2}{2m},$$
where $\hat{p}$ is the momentum operator and $m$ is the particle mass. This simple Hamiltonian is independent of time, so the time-evolution unitary operator is very simple. With some calculation the propagator is found to be
$$K(x', t; x, t_0)=\sqrt{{\frac {m}{2\pi i\hbar (t - t_0)}}}\exp{\left[-{\frac {m(x'-x)^{2}}{2i\hbar (t - t_0)}}\right]}.$$
Our goal in this project is to figure out what this complex function looks like.
import numpy as np
import matplotlib.pyplot as plt
def K(x, t):
'''
The propagator K(x', t; x, t0) = \sqrt{\frac{m}{2 \pi i \hbar (t - t0)}} \exp{frac{i m (x' - x)^2}{2 \hbar (t - t0)}}.
This function fixes m and hbar to be 1.
Author: Wenjie Chen
E-mail: wenjiechen@pku.edu.cn
args:
x : [double] Defined to be x' - x.
t : [double] Defined to be t - t0.
returns:
K : [complex] A complex value.
example:
K(0, 1)
'''
K = 1 / np.sqrt(2 * np.pi * 1j * t) * np.exp(1j * x**2 / t / 2)
return K
def plot_K_time(x, time_sequence, REAL_OR_IMAGINARY):
'''
Draw a series of the propagator function's real part or imaginary part at different time.
Author: Wenjie Chen
E-mail: wenjiechen@pku.edu.cn
args:
x : [list] The coordinates.
time_sequence : [list] A time sequence.
REAL_OR_IMAGINARY : [string] One string in ["Re", "Im", "Re&Im"], indicates which part is plotted.
returns:
[Figures] Several figures.
example:
x = np.linspace(-10,10,10000)
t = [0.25, 0.5, 1.0, 2.0, 5.0]
plot_time(x, t, "Re")
'''
for t in time_sequence:
[Re_K, Im_K] = [K(x, t).real, K(x, t).imag]
plt.figure(figsize=(10,5))
if REAL_OR_IMAGINARY == "Re":
plt.plot(x, Re_K)
plt.ylabel("$Re[K(x'-x, t - t_0)]$")
elif REAL_OR_IMAGINARY == "Im":
plt.plot(x, Im_K)
plt.ylabel("$Im[K(x'-x, t - t_0)]$")
elif REAL_OR_IMAGINARY == "Re&Im":
plt.plot(x, Re_K)
plt.plot(x, Im_K)
plt.ylabel("$K(x'-x, t - t_0)$")
plt.legend(["Re(K)", "Im(K)"])
plt.xlabel("$x' - x$")
plt.title("$t - t_0 = $" + str(t))
plt.show()
return
x = np.linspace(-10,10,10000)
t = [0.5, 2.0]
plot_K_time(x, t, "Re")
x = np.linspace(-10,10,10000)
t = [0.5, 2.0]
plot_K_time(x, t, "Im")
x = np.linspace(-10, 10, 10000)
t = [0.5, 2.0]
plot_K_time(x, t, "Re&Im")