Temat: Zależne od czasu równanie Schrödingera. Ruch pakietów
falowych. Wartości własne.
Przykłady programów w JavaTM .
Przykłady programów w JavaTM .
Na podstawie: Internet
1 Ruch paczki falowej
Poniższy rysunek przedstawia stary sposób ilustrowania zjawiska ruchu paczki falowej w zadanym potencjale (w tym przypadku nad studnią prostokątna).Oto, jak np. robi to John L. Richardson z Silicon Graphics.
Oscylacje pakietu falowego w 1dim a tak Denis Rapaport:
1dim
2dim Które przedstawienie jest lepsze? Wydaje się, że ostatnia, chociaż jesli chcemy obejrzeć niektóre szczegóły ...
2 Leapfrog method
Jak możemy to zrealizować sami? Ponieważ nie jesteśmy pierwsi, zobaczmy co zrobili inni. Można skorzystać z metody opracowanej przez Visschera, [P.B. Visscher, Comp. in Phys. , 5 (1991) 596-598], którą można znaleźć także u Horbatscha [Horbatsch, QM]. [The time stepping algorithm is described also in: Richardson, John L., Visualizing quantum scattering on the CM-2 supercomputer, Computer Physics Communications 63 (1991) pp 84-94]. Diabli wiedzą kto był pierwszy. Dobrze jest zajrzeć do klasyków mechaniki kwantowej: L. Schiff, Mechanika kwantowa, wyd. PWN, Warszawa, 1977, str.102 oraz rozdział 12. Schiff cytuje też pracę z 1967r: A. Goldberg, H.M. Schey. J.L. Schwartz, Computer-Generated Motion Pictures of One-Dimensional Quantum Mechanical Transmission and Reflection Phenomena, Am. J. Phys , 35 (1967) 177. Jeszcze jedną interesującą publikacją jest: Galbraith, Ching, Abraham, Am. J. Phys. 52, (1984) 60-68. Metoda nosi nazwę leap frog czyli żabiego skoku. Polega ona na tym, że zespolona funkcja falowa ψ = ψR+ψI, jest zadana w chwili t0 i jej ewolucja, zgodnie z czasowym równaniem Schrödingera, wyznaczana jest poprzez obliczenia, na zmianę, raz wartości ψR, a raz ψI w kolejnych chwilach t0+∆t/2, t0+∆t), ... w odpowiedni sposób. Z równania Schrödingera mamy mianowicie
|
| (1) |
| (2) |
|
/* * Scheme of the Wave Packet program * (basis: Horbatsch, Maple progarm) * */ static double dt,dth, Time, dxsq; static int nx; static double[] xmesh, psiR, psiI, Vpot, Hpsi; // time discretization // time step dt = 1d/50d; // half time step dth = dt/2d; // space discretization // space step dx = 1d/5d; dxsq = 1d/(2*dx^2); // space extension xmax = 15d; // number of space points nx = (int)2*xmax/dx + 1; // x mesh for(int i=0;i<nx;i++) xmesh[i] = -xmax + (i-1)*dx; // initialize real and imaginary parts of Psi // at t = 0 and t = dt/2 respectively w0 = 1d/2d; x0 = -10d; p0 = 2d; for(int i;i<nx;i++) { psiR[i] = pack(xmesh[i], 0,x0,p0,w0).Re(); // at t= 0 psiI[i] = pack(xmesh[i],dth,x0,p0,w0).Im(); // at t=dth } // picture psiR[i], psiI[i] // and the density |psiR[i]+psiI[i]|^2 // ... // Hamiltonian on the mesh // Kinetic energy couples nearest neighbours // Potential energy is local // Potential; square well for(int i=0;i<nx;i++) Vpot[i] = Math.abs(xmesh[i]) <= 2 ? -4 : 0; // picture Vpot[i] // Calculate H psiR(0), H psiI(dth) doHpsi(psiR); doHpsi(PsiI); // doHpsi public void doHpsi(double[] args) { // calculates H psiR or HpsiI for(int i=1;i<nx-1;i++) Hpsi[i] = -dxsq * (args[1][i+1]+args[1][i-1]-2*args[1][i]) +Vpot[i]*args[1][i]; Hpsi[0] = -dxisq*(args[1][2]-2*args[1][1])+Vpot[1]*args[1][1]; Hpsi[nx] = -dxisq*(args[1][nx-1]-2*args[1][nx]) +Vpot[nx]*args[1][nx]; } /* * The basic time evolution step for the real and imaginary * parts of the wavefunction. It assumes that the imaginary * part is a half-step ahead of the real part. */ public void timeStep() { for(int i=0;i<nx-1;i++) { psiR[i] = psiR[i] + dt*Hpsi[i]; psiI[i] = psiI[i] - dt*Hpsi[i]; } // Time:=Time+dt; } /* * Set up the time-loop. */ while ( go ) { timeStep(); // plot xmesh[i],psiR[i]^2+psiI[i]^2],psiR[i],psiI } // "go" is true if the process is running and false otherwise class complex { double re, im; complex() { re = 0; im = 0; } complex(double x, double y){ re = x; im = y; } public void add(complex a, complex b){ re = a.re + b.re; im = a.im + b.im; } public void mult(complex a, complex b){ re = a.re * b.re - a.im * b.im; im = a.re * b.im + a.im * b.re; } public void set(complex a){ re = a.re; im = a.im; } } .
3 Metoda NCGF rozwiązywania równania Schrödingera
Metoda NCGF (Numerova-Cowella-Goodwina-Foxa) nadaje się do rozwiązywania specjalnych zagadnień własnych. Metoda Numerowa-Cowella
Z a d a n i e 1.
Napisz program NCGF w
JavaTM
. Zastosuj go do rozwiązania równań
rozpatrywanych w zadaniach 1-4
zamieszczonych w części Metoda NCGF ....
Jeśli rozpatrujemy rozpad stanów rezonansowych, to przybliżone
położenie energii stanów rezonansowych (przy założeniu, że
Γ << E) można oszacować rozwiązując równanie
Schrödingera metodą NCGF.