TFY4170 Obligatorisk Øving¶

Innleveringsfrist: Torsdag 9. april 2026 kl 23:59

Navn på gruppens medlemmer (1 - 3 studenter pr gruppe):

En ferdig kjørt notebook sendes som vedlegg på epost til Sofia (smfallaa@stud.ntnu.no), enten i HTML- eller PDF-format. Ett gruppemedlem leverer på vegne av gruppa.

Innledning¶

Vi legger opp til bruk av Python sammen med bibliotekene numpy, scipy og matplotlib for numerikk, vitenskapelige beregninger og plotting. Bruk disse bibliotekene for alt de er verdt! De er alle godt dokumentert på Internett.

I både Jupyter Notebook og Jupyter Lab er det mulig å bruke ulike backends for plotting med matplotlib. Dette er kort fortalt ulike underliggende "motorer" som bestemmer utseende og funksjonalitet til figurene som produseres. Avhengig av hvilket av disse to programmene du bruker, vil du erfare at en backend fungerer bedre enn andre. I Jupyter Notebook fungerer notebook-backenden best og uten behov for installasjon av ekstra programvare, men i Jupyter Lab må tillegget jupyter-matplotlib installeres for å få den optimale widget-backenden til å fungere. Begge programmene støtter også inline-backenden uten behov for tilleggsprogramvare, men denne produserer mindre fleksible figurer og bør kun brukes som reserveløsning. Prøv dere fram med backendene foreslått nedenfor og finn den som fungerer best for dere.

I oppgavene nedenfor er det nødvendig å prøve seg fram med ulike verdier for parametrene som inngår. Da kan det være hensiktsmessig å jobbe med et Python script (compex1.py) i et grensesnitt som f eks Spyder, i stedet for denne notebooken. Da har dere enklere tilgang til variablenes tallverdier til enhver tid.

In [4]:
# Uncomment ONE line to choose matplotlib backend
# if using Jupyter Notebook, use interactive "notebook" backend for best results
# if using Jupyter Lab, use interactive "widget" backend for best results
# if both fail, use static "inline" backend
%matplotlib notebook
#%matplotlib widget
#%matplotlib inline

# I et Python script kan alle linjene ovenfor kommenteres ut

import numpy as np
import scipy as sp
import matplotlib.pyplot as plt

Kort om enheter i numeriske beregninger¶

I numeriske beregninger må vi ta hensyn til den begrensede presisjonen og størrelsen til flyttallene som datamaskinen bruker for å representere reelle tall. I kvantemekanikken møter vi spesielt ofte på Plancks reduserte konstant ("hstrek") $\hbar \approx 1.05 \cdot 10^{-34} \text{ Js}$ og gjerne kvadratet $\hbar^2$. Det er i utgangspunktet ingenting i veien for å benytte SI-enheter for alle størrelser som opptrer i denne øvingen. Et alternativ er å benytte atomære enheter. Disse er skreddersydd for beregninger på atomært nivå. Her er $\hbar$, elektronmassen $m_e$, elementærladningen $e$ og konstanten i Coulombs lov $4\pi\varepsilon_0$ definert til å ha tallverdi $1$. Eksempelvis uttrykkes nå energier i enheten hartree, $E_h \equiv \hbar^2 / m_e a_0^2 \approx 4.36 \cdot 10^{-18} \text{ J}$, og lengder i enheten $a_0$, Bohrradien. En annen mulighet er å benytte enheter som $\text{nm}$ og $\text{eV}$ for lengder og energier. En hartree tilsvarer ca. 27.2 eV, dvs. det dobbelte av grunntilstandsenergien i hydrogenatomet.

Velg selv hensiktsmessige enheter til bruk i beregningene, men vær oppmerksom på den begrensede presisjonen til flyttall!

In [5]:
# Assign values to parameters that will not change, e.g., hbar = 1 etc (if you use atomic units)

Numerisk løsning av den tidsuavhengige Schrödingerligningen (TUSL)¶

Å løse den tidsuavhengige Schrödingerligningen $$ \hat{H} \psi = -\frac{\hbar^2}{2 m} \psi'' + V \psi = E \psi, $$ dvs å bestemme energiegenverdier $E$ og tilhørende energiegenfunksjoner $\psi(x)$ for et gitt potensial $V(x)$, er et sentralt problem i kvantemekanikk. Dette er ofte ingen enkel oppgave. Selv for potensialer som gir ligningen analytiske løsninger kreves det ofte betydelig innsats og bruk av spesielle teknikker for å komme fram til disse. Vi skal her se på en elegant og generell teknikk for å løse ligningen numerisk for et vilkårlig potensial (i en dimensjon). Metoden beskrives også i forelesningene.

Numeriske løsningsmetoder innebærer alltid en viss avgrensning og diskretisering for å gjøre problemet håndterbart for en datamaskin. Vi antar her at en partikkel er begrenset til å bevege seg mellom to posisjoner $x_0$ og $x_{N+1}$ og deler opp dette intervallet i punktene $x_0, x_1, \ldots, x_N, x_{N+1}$, med konstant avstand $\Delta x$ mellom nabopunkter. Utenfor dette området er potensialet $V(x \leq x_0) = V(x \geq x_{N+1}) = \infty$, slik at $\psi(x \leq x_0) = \psi(x \geq x_{N+1}) = 0$. Det betyr at det kun er bølgefunksjonens verdier i de $N$ posisjonene $x_1, \ldots, x_N$ som er ukjente og av interesse. Til hver posisjon tilordner vi verdiene $\psi_i = \psi(x_i)$ og $V_i = V(x_i)$ til hhv energiegenfunksjonene og potensialet, og vi refererer til verdiene av disse funksjonene i alle punktene ved hjelp av vektorene $\boldsymbol{V} = [V_1, \ldots, V_N]^T$ og $\boldsymbol{\psi} = [\psi_1, \ldots, \psi_N]^T$. (Der $T$ angir transponert.)

En intuitiv og enkel tilnærming av den deriverte av en funksjon er den sentrale differansen $$ \psi'(x) = \frac{\psi(x + \Delta x / 2) - \psi(x - \Delta x / 2)}{\Delta x}. $$ Om vi bruker denne tilnærmingen to ganger, kan vi også tilnærme den andrederiverte som $$ \psi''(x) = \frac{\psi'(x + \Delta x / 2) - \psi'(x - \Delta x / 2)}{\Delta x} = \frac{\psi(x + \Delta x) - 2 \psi(x) + \psi(x - \Delta x)}{\Delta x^2}.$$ Vi setter denne tilnærmingen inn i TUSL og får $$-\frac{\hbar^2}{2 m} \frac{\psi_{i+1} - 2 \psi_i + \psi_{i-1}}{{\Delta x}^2} + V_i \psi_i = E \psi_i \quad ; \quad i = 1, 2, \ldots, N.$$

Vi kan skrive disse $N$ ligningene på en kompakt form ved å innføre en $N \times N$ Hamiltonmatrise $H$ med elementer $$ H_{i j} = \begin{cases} \hbar^2 / (m \Delta x^2) + V_i & \text{for} \,\, i = j & \text{(på diagonalen)} \\ -\hbar^2 / (2 m \Delta x^2) & \text{for} \,\, i = j \pm 1 & \text{(på semidiagonalene)} \\ 0 & \text{ellers} \\ \end{cases} $$ og benytte vektoren $\boldsymbol{\psi} = [\psi_1, \ldots, \psi_N]^T$. Da kan vi skrive $$ H \boldsymbol{\psi} = E \boldsymbol{\psi}. $$ Energiene $E$ og energiegenfunksjonene $\boldsymbol{\psi}$ er dermed egenverdier og egenvektorer til matrisen $H$.

Numerikkbiblioteker har godt utprøvd funksjonalitet for å finne egenverdier og egenvektorer til vilkårlige matriser. De har gjerne også spesialiserte funksjoner som gjør dette mer effektivt for matriser med en spesiell form, for eksempel som den tridiagonale (samt reelle og symmetriske) formen til matrisen $H$.

Skriv en funksjon som beregner og returnerer alle energiegenverdiene $E$ og tilhørende energiegenfunksjoner $\boldsymbol{\psi}$ for en partikkel med masse $m$ som befinner seg i et gitt potensial $\boldsymbol{V}$. Funksjonen eigh_tridiagonal fra scipy.linalg er skreddersydd for vårt formål. Sjekk at egenfunksjonene danner et fullstendig og ortonormert sett.

In [ ]:
 

I resten av øvingen skal vi bruke denne numeriske løsningsmetoden på noen ulike potensialer. Der det er mulig skal vi sammenligne de numeriske verdiene med analytiske resultater. For å gjøre denne prosessen så enkel som mulig, foreslår vi at dere her skriver en generell plottefunksjon som kan brukes i alle oppgavene.

Skriv en funksjon som grafisk framstiller et potensial $\boldsymbol{V}$ og en eller flere energiegenverdier $E$ og energiegenfunksjoner $\boldsymbol{\psi}$ (eventuelt $|\boldsymbol{\psi}|^2$) som funksjon av $x$. Funksjonen skal også kunne brukes til å sammenligne numeriske og analytiske energier og bølgefunksjoner. Vi anbefaler at dere lager denne funksjonen parallelt med at dere gjør resten av oppgavene, slik at dere kan tilpasse framstillingen basert på behovene som oppstår.

In [ ]:
 

Partikkel i boks¶

Det første systemet vi tar for oss i forelesningene er partikkel i boks. Her er potensialet, de normerte energiegenfunksjonene og energiegenverdiene

$$ V(x) = \begin{cases}0 & \text{for}\,\, 0 \leq x \leq L \\ \infty & \text{ellers} \end{cases}, \quad \psi_n(x) = \sqrt{\frac{2}{L}} \sin{\frac{n \pi x}{L}}, \quad E_n = \frac{n^2 \pi^2 \hbar^2}{2 m L^2}, \quad \quad n = 1, 2, \ldots . $$

Sammenlign numeriske og analytiske verdier for et utvalg av energier (gjerne i en tabell) og energiegenfunksjoner (i en figur) for et elektron i en boks. Hva blir energidifferansen mellom grunntilstanden og første eksiterte tilstand hvis elektronet befinner seg i en smal boks med bredde 1 nm? Hva blir samme energidifferanse for et elektron i en bred boks med bredde 1 $\mu$m? Bruk enhet meV (millielektronvolt). Hva må temperaturen i systemet være i hhv den smale og den brede boksen for at termisk energi pr partikkel, $k_B T$, ikke skal overstige energidifferansen mellom grunntilstanden og 1. eksiterte tilstand?

In [ ]:
 

Harmonisk oscillator¶

Et annet standard kvantemekanisk problem er den harmoniske oscillatoren med $$ V(x) = \frac{1}{2}m \omega^2 x^2, \quad \psi_n(x) = \frac{1}{\sqrt{2^n n!}} \cdot \left(\frac{m \omega}{\pi \hbar}\right)^{1/4} \cdot \exp{\left(-\frac{m \omega x^2}{2 \hbar}\right)} \cdot H_n\left(\sqrt{\frac{m \omega}{\hbar}}x\right), \quad E_n = \left(n+\frac{1}{2}\right)\hbar \omega, \quad \quad n = 0, 1, 2, \ldots $$ Funksjonene $H_n(y)$ (med dimensjonsløs $y$) kalles (fysikerens) Hermitepolynomer. De er tilgjengelige i numerikkbiblioteker, men kan også beregnes fra rekursjonsrelasjonen $$ H_n(x) = 2 x H_{n-1}(x) - 2 (n-1) H_{n-2}(x), \quad H_0(x) = 1, \quad H_1(x) = 2 x.$$

Den harmoniske oscillatoren er spesielt interessant i topartikkelsystemer, der et problem med for eksempel to atomer med masse $m_1$ og $m_2$ i et toatomig molekyl reduseres til et ekvivalent enpartikkelproblem med redusert masse $m = m_1 m_2 / (m_1 + m_2)$. Den reduserte massen $m$ og vinkelfrekvensen $\omega$ fastlegger fjærkonstanten som beskriver vibrasjonsbevegelsen til de to atomene.

Sammenlign numeriske og analytiske verdier for noen energier og energiegenfunksjoner i en harmonisk oscillator. Den effektive fjærkonstanten i et nitrogenmolekyl (N$_2$) er 2.3 kN/m. Hva er den tilsvarende vinkelfrekvensen $\omega$? Sammenlign energidifferansen $\hbar\omega$ mellom molekylets kvantiserte vibrasjonstilstander med tilgjengelig termisk energi $k_B T$ pr molekyl ved romtemperatur og begrunn hvorfor molar varmekapasitet $C_V$ for nitrogengass ved romtemperatur er $5R/2$, og ikke $7R/2$ som forventet ifølge det klassiske ekvipartisjonsprinsippet.

In [ ]:
 

Partikkel i endelige brønnpotensialer¶

Et tredje velkjent eksempel er enkeltbrønnen $$V(x) = \begin{cases} -V_0 & \text{for}\,\, 0 < x < w \\ 0 & \text{ellers} \end{cases}$$ med bredde $w$ og brønndybde $V_0 > 0$. I dette potensialet finnes ingen analytiske løsninger for de bundne stasjonære tilstandenes energiegenverdier.

Enkeltbrønnen kan generaliseres til et periodisk potensial bestående av $N_w$ slike enkeltbrønner plassert ved siden av hverandre, med barrierer med fast bredde $b$ (og potensial $V=0$) mellom brønnene. Dette er en enkel modell for det periodiske potensialet som et elektron opplever i et fast stoff med en regulær krystallinsk struktur, enten det dreier seg om et metall, en halvleder eller en isolator.

Framstill grafisk de bundne tilstandene for et elektron, både i en enkeltbrønn og i et periodisk potensial bestående av flere brønner. Velg brønndybde og -bredde slik at det blir 3-4 bundne tilstander i enkeltbrønnen. Hvordan distribueres energinivåene i det periodiske potensialet sammenlignet med enkeltbrønnen? Kan du ut fra dette forklare hva vi mener med båndstrukturen til et fast stoff, ved hjelp av begrepene båndbredde og båndgap?

In [ ]:
 

Frivillig ekstraoppgave:

Bruk (for eksempel) et bokspotensial med stor bredde og null potensial og lag en gaussformet og normert starttilstand $\Psi(x,0)$ sentrert ved en passende posisjon $x_0$ og med en passende gruppefart og tilhørende impuls. Uttrykk $\Psi(x,0)$ som en lineærkombinasjon av (samtlige) stasjonære tilstander og beregn utviklingskoeffisientene $c_n$ ($n=1,2,\dots,N$). Beregn deretter $\Psi(x,t)$ for noen tidspunkter $t$ og framstill bølgepakken grafisk ved hvert tidspunkt. Bruk enten Re $\Psi$, Im $\Psi$, $|\Psi|$ eller $|\Psi|^2$. Seiler bølgepakken fram og tilbake mellom de to harde veggene omtrent som en klassisk partikkel? For de ambisiøse: Lag en animasjon av bølgepakkens bevegelse.

In [ ]: