*Mike Steel*, 2017, modification by *James Tocknell* 2018

(Double-click cell above and fill out your name)

N.B. Generally it's a really good idea to make each of your answers self contained so that *all* the code necessary for the answer is in cells under the exercise heading. Use comments or text cells to document your work as necessary.

A narrow wave packet in space must be composed of a broad range of momenta.

How does this explain the spreading of a wave packet in empty space?

Write your answer here

Using the heisengberg uncertainty principle, having a small uncertainty in relation to the position of the particle, implies a large uncertainty in relation the momentum of the particle. In this instance, having a narrow wave packet in space implies a larger spread of momentum of the wave. Since momentum is mv, therefore, the larger the spread of momenta, the larger the velocity of the spread

By slight alteration of the code above, solve and plot the evolution of a wave packet with a *smaller* initial width of $w=0.25$.

Comment on your result: is the wave packet spreading faster or slower for the smaller width initial wave packet? Explain this physically.

In [58]:

# write your code here from math import * import numpy as np import matplotlib.pyplot as plt import phys201quantum as phys201q %matplotlib inline psi0 = phys201q.make_psi0([-8, 8], 250, 'gaussian', .25, 0, 0) V = phys201q.make_piecewise_potential([[-8, 0], [8, 0]]) psi_evol = phys201q.schro_evolve(psi0, V, tmax=1.5) phys201q.plot_psi_at(psi_evol)

Doing 363 steps of size 0.004129 with sigma=dt/(4dx^2)=0.250000
Outputting 100 time slices separated by 3 dt=0.012387

(<Figure size 432x288 with 2 Axes>,
<matplotlib.axes._subplots.AxesSubplot at 0x7f46b104dc50>)

Now perform the same evolution but with a `supergaussian`

input wave function. (Here 'super-gaussian') means the form $\exp(-x^4)$. Choose a `tmax`

of at least 5.

How is the result different? Can you explain this behaviour at all?

In [59]:

# write your code here psi0 = phys201q.make_psi0([-8, 8], 250, 'supergaussian', .25, 0, 0) V = phys201q.make_piecewise_potential([[-8, 0], [8, 0]]) psi_evol = phys201q.schro_evolve(psi0, V, tmax=7) phys201q.plot_psi_at(psi_evol) fig, axs = plt.subplots(1, 2) phys201q.plot_psi_pcolor(psi_evol, ax=axs[0]) phys201q.plot_psi_pcolor(psi_evol, show_phase=1, ax=axs[1]) phys201q.animate_psi(psi_evol) #This is because the domain of the simulation acts as an infinite well/barrier. So the waveform is perfectly reflected off the boundaries, and interferes with itself, creating an interference pattern, which is what can be seen different

Doing 1695 steps of size 0.004129 with sigma=dt/(4dx^2)=0.250000
Outputting 100 time slices separated by 16 dt=0.066063

(<Figure size 432x288 with 2 Axes>,
<matplotlib.axes._subplots.AxesSubplot at 0x7f46b03017f0>)

Now excite a Gaussian wave packet of width 2 but initial momentum `p0=2`

.

You may wish to shift the starting point on the $x$ axis to keep the beam in the simulation domain.

Do the results make sense? Explain.

In [60]:

# write your code here psi0 = phys201q.make_psi0([-8, 8], 250, 'gaussian', 2, 0, 2) V = phys201q.make_piecewise_potential([[-8, 0], [8, 0]]) psi_evol = phys201q.schro_evolve(psi0, V, tmax=1.5) phys201q.plot_psi_at(psi_evol) phys201q.animate_psi(psi_evol) #Since we increased the momentum from 0 to 2, the particle now has a veloicty, so the wave packet also has a velocity, and hence moves over time.

Doing 363 steps of size 0.004129 with sigma=dt/(4dx^2)=0.250000
Outputting 100 time slices separated by 3 dt=0.012387

(<Figure size 432x288 with 2 Axes>,
<matplotlib.axes._subplots.AxesSubplot at 0x7f46abd5b828>)

Return to a simulation of a wave packet with initial width 0.25, zero momentum and a domain width of 20, but this time let the evolution run until $t=8$.

Display the result with an animation.

Explain what is going on here? Is the behaviour physical? How can it be fixed?

In [61]:

# write your code here psi0 = phys201q.make_psi0([-10,10], 250, 'gaussian', .5, 0, 0) V = phys201q.make_piecewise_potential([[-8, 0], [8, 0]]) psi_evol = phys201q.schro_evolve(psi0, V, tmax=8) phys201q.animate_psi(psi_evol) # print('Once again, the wave function spreads until reaching the boundaries,then hitting the boundaries and being reflected back and causing an interference pattern. This is not a physical phenomenon, and can be fixed by extending the boundaries"domain" to larger numbers')

Doing 1240 steps of size 0.006452 with sigma=dt/(4dx^2)=0.250000
Outputting 100 time slices separated by 12 dt=0.077418