This set of problems is designed to explore how wave functions change with time.
Do as many of this set of problems as you can get done in one week.
PRE-MICROLAB
The time-dependent Schrödinger equation is first order in time and second order in space. To solve it would be rather more complicated exercise than we have done so far. So in this set we will concentrate on energy eigenstates, whose time de pendence we know already, without having to solve that equation explicitly.
The complete wave function for an electron which is in an energy eigenstate is
Note that when you calculate the probability density
Note also, if you remember that
In any particular situation it is most unlikely that an atomic system will be in an eigenstate. In the usual way of things its energy is probably some value other that one of those very special values that just happen to fit the potential well it find s itself in. Under those conditions the wavefunction of the electron will be a compound state, a combination of two or more of the eigenfunctions (either discrete or continuous).
We will investigate only the simplest possible compound state, one consisting of the superposition of just two eigenstates
In any computation involving time you will have to pick a sensible time step, otherwise everything will happen too fast or too slowly. The natural time scale on which any wave function changes appreciably is equal to a small fraction of (h/E), where E is the typical energy difference between the states which make up a compound state. Therefore, since our computer program measures energies in units of
Make sure you can show that, in these units, the time dependence of an single eigenstate can be written
There are several important changes that will have to be made to the programs you have been working with so far.
(1) You are going to have to use complex arithmetic. In the program qm4.pas this has been done in the procedure SumToFormCompoundState. Make sure you can follow what has been done, because you will have to w
rite something similar yourself.
(2) The program is going to have to work with two eigenfunctions at once, in order to construct compound states. It will have to calculate and store both at the beginning, when you tell it what the appropriate energy eigenvalues are. If you want to exte nd the program to deal with more than two, you may start to run into memory problems if there are too many eigenfunctions.
When you first open qm4 and choose Part 3, you will see three new menu items. The serve the following purposes:
Construct: This allows you to select two eigenfunctions (you specify which ones by entering the energy eigenvalues on an input screen) and give them (real) coefficients. When you have entered the data, the program forms the com
pound state: a1.u1(x) + a2.u2(x). The same input screen allows you to input a starting time and a time step for use with the third menu item below.
Measure: This will calculate the expectation value of one of a choice of operators (to which you can add others) by calculating an overlap integral as in Part 2.
Develop: This will change the coefficients in the compound state for different times, starting at the initial time and incrementing by the time step that were entered on the input screen from the first menu item. It shows the c
hanges as an animated screen display.
QM4.1
(a) Work with the potential well you used in QM 2.1 - ie the square well. Use the well parameters:
The program as written already includes the necessary coding.
Start off with the coefficients a1 = 1 and a2 = 0. Demonstrate that the first state is normalized. Then change the coefficients to a1 = 0 and a2 = 1 and show that the second state is normalized.
Now put a1 = 1 and a2 = 1. Is the state normalized now? If not, find the correct value for a1 and a2 such that they are equal to one another and the wave function is normalized.
(b) Change the program as you did for QM3.2(a) to find <x> for this state. Is the result reasonable?
Verify that the value you get for <x> for either of the two eigenstates separately is zero. Why then do you get the result you just did?
QM4.2
(a) Take the program you used for QM4.1 and change it so that it calculates the real and imaginary parts of
(b) Observe the real and imaginary parts of
How does <x> change with time?
QM4.3
(a) The program as written has a menu choice called Develop. This has a REPEAT loop which continually increases t, but so far does nothing else.
Add the necessary code inside this loop so that it calculates and displays the compound state at each value of t. You should then be able to see how this state changes with time.
NOTE: You could animate this display simply by erasing the screen and redrawing each time you did a new calculation. However that would look crude because the screen would flicker each time you erased and redrew the wave functions. There are an number of simple procedures can be used to animate the resulting graphs for values of
Animate.lib. They are already included in the program, so you needn't bother learning about them if you don't want to.
QM4.4
(a) If you have time, repeat everything you did in QM4.2 & QM4.3, using the harmonic oscillator potential from QM2.4.
These procedures enable you to do simple animations. The appearance of movement is achieved by drawing on a "page", or "frame", which is out of sight. Only when the drawing is complete do you allow it to replace what is on the screen already. This mean s that the drawing appears very fast, and if you keep swapping frames like this, you get the effect of apparent motion you are used to in movies or on the television screen.
Note before you start that the idea of "drawing" on a screen which is not actually visible means that the computer has to put aside a section of memory in which to do this. And, since the screen consists of over 10,000 pixels, each of which needs three c olours for its "on" specification, this uses up a lot of memory. Hence not all graphics cards are capable of swapping pages in the necessary fashion. Multiple pages are only supported by EGA(256), VGA (Lo or Med) and Hercules graphics cards.
There are four different procedures in this library package:
SetForAnimation
This is the procedure which sets the graphics capabilities to allow for multiple pages. On the distribution disk it simply consists of two statements:
PROCEDURE SetForAnimation;
BEGIN
GraphDriver := 9;
GraphMode := 1;
END;
This puts a VGA graphics card into medium mode (649x350 colour). If you have a different graphics card you will have to write the appropriate statements yourself.
NOTE: This procedure must be called before you call the procedure MUPPETinit.
OpenFrame(FNum:Integer);
When you are ready to start drawing for animation, instead of calling OpenViewport, as you would normally do, you call this procedure. It copies everything that is currently on the monitor screen onto two "pages", one which is hidden, and o
ne which is visible. It then defines a viewport, number FNum, on both pages, and gets ready for you to draw onto the page which is hidden. What you see on the screen is unchanged.
NOTE: It is possible for you to draw in several viewports and animate the results. But only viewport 'fNum' will be cleared each time the pages are switched. It is your responsibility to clear any other viewports each time bef
ore drawing in them, and, each time before you call SwitchFrames, you should call
SelectViewport(fNum);
SwitchFrames;
When you have completed your drawing on the hidden page, you call this procedure. It merely displays what is on the page that was hidden, and makes the previously visible page invisible. It also clears the viewport on the page it has just hidden, read y for you to draw your next picture on that page. Repeated calling of this procedure therefore alternates between the two pages.
CloseFrame;
It is very important to call this procedure when you have finished animation. It resets the "correct" page as the one on which all further writing will be done, and releases the memory that the extra page used. If you don't call this procedure, you wil
l very likely get an "out of memory" error message.