Happiness said:
TL;DR Summary: Does the wave function get updated instantly, or is there a lag?
Suppose we have in a box a particle that is travelling left and right at some speed, bouncing off the walls of the box. The wall on the right is then removed such that the particle would be free to escape the box.
Does the wave function of the particle get "updated" instantly the moment the wall is removed, or does it take some time for the wave function to be updated (eg, after the time for light to travel from the right wall to the particle's position has elapsed)?
This sounds like a scenario where, after some time T, the Hamiltonian (not the wavefunction) is updated and the wavefunction proceeds to evolve under this new Hamiltonian. If you have python installed, the attached script is my interpretation of your Q. It simulates a particle in a finite well, and plots the density associated with the wavefunction. After a fixed time, one side of the well is instantaneously shifted to the right. Note that this does not induce an instantaneous change in the wavefunction. Instead, the wavefunction smoothly evolves into the new space available.
[CODE lang="python" title="time-dependent schroedinger"]import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
def solve_schrodinger_dynamic_step():
hbar = 1.0
m = 1.0
L = 10.0
V0 = 10.0
step_left = 1.0
step_right = 5.0
step_right_initial = 5.0
step_right_final = 9.0
N = 8192
dx = L / N
x = np.linspace(0, L, N)
dt = 0.005
t_steps = 10000
transition_point = int(t_steps * 0.05)
k = 2.0 * np.pi * np.fft.fftfreq(N, dx)
sigma = 0.7
x0 = (step_left + step_right) / 2
p0 = 0.0
psi = np.exp(-((x - x0) ** 2) / (4 * sigma**2)) * np.exp(1j * p0 * x / hbar)
psi = psi / np.sqrt(np.sum(np.abs(psi) ** 2) * dx)
T = np.exp(-1j * hbar * k**2 * dt / (2 * m))
psi_t = []
V_t = []
for t in range(t_steps):
if t < transition_point:
step_right = step_right_initial
else:
step_right = step_right_final
V = V0 * (
1 - 0.5 * (np.tanh((x - step_left) * 5) - np.tanh((x - step_right) * 5))
)
psi = np.fft.ifft(T * np.fft.fft(psi))
psi = np.exp(-1j * V * dt / hbar) * psi
if t % 100 == 0:
psi = psi / np.sqrt(np.sum(np.abs(psi) ** 2) * dx)
if t % 10 == 0:
psi_t.append(np.abs(psi) ** 2)
V_t.append(V)
return x, np.array(psi_t), np.array(V_t)
x, psi_t, V_t = solve_schrodinger_dynamic_step()
fig, ax1 = plt.subplots(1, 1, figsize=(10, 8))
fig.tight_layout(pad=3.0)
(line1,) = ax1.plot([], [], "b-", label="|ψ|²", linewidth=2)
(potential_line,) = ax1.plot([], [], "r--", label="V(x)/20", alpha=0.5)
ax1.set_xlim(0, 10)
ax1.set_ylim(0, 0.8)
ax1.set_xlabel("Position", fontsize=12)
ax1.set_ylabel("Probability Density", fontsize=12)
ax1.set_title("Dynamic Finite Well: Time Evolution", fontsize=14)
ax1.legend(fontsize=10)
ax1.grid(True, alpha=0.3)
potential_height = []
def animate(frame):
line1.set_data(x, psi_t[frame])
potential_line.set_data(x, V_t[frame] / 20)
potential_height.append(np.max(V_t[frame]))
return line1, potential_line
ani = FuncAnimation(fig, animate, frames=len(psi_t), interval=50, blit=True)
plt.show()
[/CODE]