Erste Computerphysik: Quantenmechanik und lineare Algebra mit Python.

Erste Computerphysik: Physikalische Physik mit Python

Einführung

Wenn Sie die Quantenmechanik studieren, werden Sie feststellen, dass die lineare Algebra eine gute Darstellung der Quantenmechanik ist. Hamiltonian wird durch eine Matrix dargestellt, Energie wird durch einen Eigenwert dargestellt und Eigenzustand wird durch einen Eigenvektor dargestellt. Und die Schrödinger-Gleichung ergibt eine mehrjährige Gleichung. Im Labor für Theorie der physikalischen Eigenschaften wird die Gleichung unter Verwendung eines Computers gelöst, um die physikalischen Eigenschaften vorherzusagen (natürlich werden auch andere Dinge getan).

Erst nach dem Betreten des Labors werden Computer im Universitätsunterricht eingesetzt. Bevor ich dem Labor zugewiesen wurde, hoffe ich, dass es nützlich sein wird, um die Theorie der physikalischen Eigenschaften in der aktuellen Situation kennenzulernen, in der "ich Laborgeräte, aber keine Computer benutze".

Zweck

Der Zweck dieses Artikels besteht darin, das "lösbare" Problem, das Sie in einer Vorlesung im Klassenzimmer lernen, mit dem "numerisch gelösten" Problem zu verbinden, das Sie mit einem Computer lernen werden.

Inhaltsverzeichnis

  1. Bestätigung des Bildungsbeispiels "Drehoperator $ \ hat {S_z} $ und seines eindeutigen Werts" (Wenn Sie es wissen, überspringen Sie es)
  2. Lösen Sie pädagogische Beispiele numerisch
  3. Angenommene Situation
\def\bra#1{\mathinner{\left\langle{#1}\right|}} \def\ket#1{\mathinner{\left|{#1}\right\rangle}} \def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}} \def\bbraket#1#2#3{\mathinner{\left\langle{#1}\middle|#2\middle|#3\right\rangle}}

1. Bestätigung des Bildungsbeispiels "Spin Operator Sz und sein eindeutiger Wert"

Die Beziehung zwischen dem Spinoperator $ \ hat {S_z} $ und seinem Eigenzustand ist wie folgt angegeben.

\hat{S_z} \ket{\uparrow} = \frac{\hbar}{2} \ket{\uparrow} ,~~~~~\hat{S_z} \ket{\downarrow} = -\frac{\hbar}{2} \ket{\downarrow}

Wenn Sie diese in einer Matrix ausdrücken,

\frac{\hbar}{2}
\begin{pmatrix}
1 & 0 \\
0 & -1 
\end{pmatrix} 
\begin{pmatrix}
1 \\
0
\end{pmatrix}
= \frac{\hbar}{2} \begin{pmatrix}
1 \\
0
\end{pmatrix},~~~~~
\frac{\hbar}{2}
\begin{pmatrix}
1 & 0 \\
0 & -1 
\end{pmatrix} 
\begin{pmatrix}
0 \\
1
\end{pmatrix}
= \frac{-\hbar}{2} \begin{pmatrix}
0 \\
1
\end{pmatrix}

Es wird umgeschrieben als. Wie Sie auf dieser Anzeige sehen können

\begin{pmatrix}
a \\
b
\end{pmatrix} = a \ket{\uparrow} + b \ket{\downarrow}

Es spielt keine Rolle, welche Funktion $ \ ket {\ uparrow} $ tatsächlich ist, nur der Koeffizient wird berechnet. Dies basiert auf der Tatsache, dass "jede neue Basis unter Verwendung einer normalen orthogonalen Basis ausgedrückt werden kann".

Ist der Eigenzustand von $ \ hat {S_z} $ der Eigenzustand von $ \ hat {S_y} $? Natürlich nicht. Was passiert also, wenn Sie $ \ hat {S_y} $ auf $ \ ket {\ uparrow} $ einwirken lassen?

Dies kann vom Hubbetreiber verstanden werden. Das heißt, die folgende Gleichung

S^{+}\ket{\uparrow} = 0,~~~~~ S^{+}\ket{\downarrow} = \hbar \ket{\uparrow}\\
S^{-}\ket{\uparrow} = \hbar \ket{\downarrow},~~~~~S^{-} \ket{\downarrow} = 0

Und die Definition des Hubbetreibers $ S^{+} = \hat{S_x}+ i\hat{S_y},~~~~~ S^{-}= \hat{S_x} - i\hat{S_y} $ Wenn Sie $ \ hat {S_x} lösen, \ hat {S_y} $ umgekehrt,

\hat{S_x}\ket{\uparrow} = \frac{\hbar}{2} \ket{\downarrow}, ~~~~~\hat{S_x}\ket{\downarrow} = \frac{\hbar}{2} \ket{\uparrow}\\
\hat{S_y} \ket{\uparrow} = i\frac{\hbar}{2}\ket{\downarrow}, ~~~~~\hat{S_y} \ket{\downarrow} = -i\frac{\hbar}{2} \ket{\uparrow}

Wird erhalten. Sicherlich befand sich $ \ ket {\ uparrow} $ nicht im eindeutigen Zustand von $ \ hat {S_y} $.

Wie ist der eindeutige Status von $ \ hat {S_y} $? Sie können es vorhersagen, aber wagen wir es, es systematisch zu fragen. Zunächst ist die Matrixanzeige von $ \ hat {S_y} \ ket {\ uparrow} = i \ frac {\ hbar} {2} \ ket {\ downarrow} $

\frac{\hbar}{2}\begin{pmatrix}
0 & -i\\
i & 0
\end{pmatrix}
\begin{pmatrix}1\\0\end{pmatrix} = i\frac{\hbar}{2}\begin{pmatrix}0\\1\end{pmatrix}

Ist. Hier ist die Matrix auf der linken Seite $ \ sigma_y $ der Pauli-Matrix. Durch Diagonalisierung dieses $ \ sigma_y $ wird der eindeutige Zustand von $ \ hat {S_y} $ erhalten. Wenn $ \ sigma_y $ diagonalisiert ist, sind der Eigenwert und der Eigenvektor

\lambda_1=1, ~~ u_1=\frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ i \end{pmatrix}・ ・ ・(1)\\
\lambda_2=-1, ~~ u_2=\frac{1}{\sqrt{2}}\begin{pmatrix}-1\\i\end{pmatrix}・ ・ ・(2)

Wird sein. Wenn Sie überprüfen, ob es sich tatsächlich in einem eindeutigen Zustand befindet,

\hat{\sigma}_yu_1=\begin{pmatrix}
0 & -i\\
i & 0
\end{pmatrix}\frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ i \end{pmatrix}=
\frac{1}{\sqrt{2}}\begin{pmatrix}-i^2\\i\end{pmatrix} = 
\frac{1}{\sqrt{2}}\begin{pmatrix}1\\i\end{pmatrix} = \lambda_1\cdot u_1

Es wurde bestätigt, dass es sich in einem einzigartigen Zustand befand.

Berechnen wir den erwarteten Wert von $ \ sigma_x $ mit diesem Eigenzustand $ u_1 $.

\bbraket{u_1}{\sigma_x}{u_1} = \frac{1}{\sqrt{2}}\begin{pmatrix}1 & -i \end{pmatrix}
\begin{pmatrix}
0 & 1 \\
1 & 0 
\end{pmatrix}
\frac{1}{\sqrt{2}}\begin{pmatrix}1\\i\end{pmatrix}
=0

Daher ist der erwartete Wert 0.

2. Lösen Sie pädagogische Beispiele numerisch

Implementieren Sie die Analyseberechnung von 1. in Python.

  1. Definieren Sie eine $ \ sigma_y $ -Matrix
  2. Diagonale
  3. Geben Sie aus und prüfen Sie, ob sie mit der Analyselösung im vorherigen Abschnitt übereinstimmt
import numpy as np
sigma_y = np.array([
    [0,-1j],
    [1j,0]
])
eigenvalues, eigenvectors = np.linalg.eigh(sigma_y)
print(eigenvalues[0], end="  ") 
print(eigenvectors[0])
# output : -1.0  [-0.70710678+0.j -0.70710678+0.j]

Es passt nicht. Dies hängt davon ab, wie die Eigenvektoren gespeichert werden. Sie können es gut verstehen, indem Sie die folgenden Vorgänge ausführen.

print(eigenvectors @ sigma_y @ np.linalg.eigh(eigenvectors))
# output : [[-1           0.+1e-16j]
#           [ 0.+1e-16    1        ]]

Mit anderen Worten, der durch np.linalg.eigh () erhaltene Eigenvektor ist eine Form, in der zwei Eigenvektoren vertikal angeordnet sind.

eigenvectors[0] =[u1(x1),u2(x1)]
eigenvectors[1] =[u1(x2),u2(x2)]

Wird sein. Die durch np.linalg.eigh () erhaltenen Eigenvektoren müssen also transponiert werden.

import numpy as np
sigma_y = np.array([
    [0,-1j],
    [1j,0]
])
eigenvalues, eigenvectors = np.linalg.eigh(sigma_y)
evs = np.transpose(eigenvectors)
print(eigenvalues[0], end="  ") 
print(evs[0])
# output : -1.0   [-0.71+0.j     0.+0.71j]  ( 1/sqrt(2)=0.71 )

Dies entspricht dem Eigenwert und dem Eigenvektor von (2) von $ \ sigma_y $, die analytisch berechnet wurden.

3. Angenommene Situation

Die Diagonalisierung der Matrix findet in verschiedenen physikalischen Situationen statt. Versuchen wir hier als Beispiel, "den Grundzustand mit einem eindimensionalen Zwei-Stellen-Modell mit Spin zu finden".

Als Hamiltonianer

H=H_{kin}+H_{\mu}+H_{U}\\
H_{kin} = -t\sum_{\sigma}(c^{*}_{2,\sigma}c_{1,\sigma}+c^{*}_{1,\sigma}c_{2,\sigma})\\
H_{\mu} =  \sum_{\sigma}\sum_{i=1,2}(-\mu_i)c^*_{i,\sigma}c_{i,\sigma}\\
H_{U} = U\sum_{i=1,2}n_{i,\uparrow}n_{i,\downarrow}

Betrachten Sie als Zustand "Halbfüllung, bei der die Anzahl der Partikel und der Spin erhalten bleiben, ein Upspin und ein Downspin". Zu diesem Zeitpunkt gibt es vier mögliche Zustände.

\psi_1 = |(\uparrow\downarrow)_1,(0)_2>\\
\psi_2 = |(0)_1,(\uparrow\downarrow)_2>\\
\psi_3 = |(\uparrow)_1,(\downarrow)_2>\\
\psi_4 = |(\downarrow)_1,(\uparrow)_2>

Es wird davon ausgegangen, dass jeder Zustand standardisiert ist.

$ \ psi_1 $ befindet sich im folgenden Zustand.

Sei $ \ phi $ der Zustand, der mit diesen Zuständen dargestellt wird, und stelle ihn wie folgt dar. Natürlich kann dieses $ \ phi $ alle Zustände darstellen.

\phi=a\psi_1+b\psi_2+c\psi_3+d\psi_4=\begin{pmatrix}a \\ b \\ c \\ d \end{pmatrix}

Jedoch,|a|^2+|b|^2+|c|^2+|d|^2=1.. In diesem Moment,

H\phi=\begin{pmatrix}
-2\mu_1+U & 0        & -t & -t \\
    0     &-2\mu_2+U & -t & -t \\
-t & -t & -\mu_1-\mu_2 & 0 \\
-t & -t & 0 & -\mu_1-\mu_2
\end{pmatrix}\phi

Hamiltonianer können in einer Matrix wie in angezeigt werden. Durch Diagonalisierung dieser Matrix ermitteln wir den Eigenzustand von $ \ phi $. Was zu tun ist, ist dasselbe wie in Abschnitt 2.

import numpy as np
#Berechnungsbedingung
mu_1 = 0.1
mu_2 = 0.4
t = 1.0
U = 3.0

H = np.array([
    [-2*mu_1 + U,           0,          -t,            -t],
    [          0,  -2*mu_2 + U,          -t,             -t],
    [         -t,          -t, -mu_1 - mu_2,            0],
    [         -t,          -t,            0, -mu_1 - mu_2]
])
eigenvalues, eigenvectors = np.linalg.eigh(H)
evs = np.transpose(eigenvectors)
for i in range(4):
    print(eigenvalues[i], end="  ") 
    print(evs[i])

# output
# -1.51  [ 0.29    0.34   0.63   0.63 ]
# -0.50  [ 1e-17  1e-17  -0.71   0.71 ]
#  2.44  [ 0.54   -0.83   0.10   0.10 ]
#  3.57  [-0.79   -0.44   0.30   0.30 ]

Betrachtet man die Berechnungsergebnisse, so beträgt der Zustand mit dem kleinsten Eigenwert, dh dem Grundzustand, $ [0,29 ~ ~ 0,34 ~ ~ 0,63 ~ ~ 0,63] $. Da die Berechnungsbedingung eine große Coulomb-Kraft hat, sind viele $ \ psi_3 und \ psi_4 $ enthalten. Die Art und Weise, wie $ \ psi_1 und \ psi_2 $ gemischt werden, ist nicht 1: 1, da die Site-Energie unterschiedlich ist.

Recommended Posts

Erste Computerphysik: Quantenmechanik und lineare Algebra mit Python.
Lineare Unabhängigkeit und Basis: Lineare Algebra in Python <6>
Einheitsmatrix und inverse Matrix: Lineare Algebra in Python <4>
Inneres Produkt und Vektor: Lineare Algebra in Python <2>
Matrixberechnung und lineare Gleichungen: Lineare Algebra in Python <3>
Einführung in Vektoren: Lineare Algebra in Python <1>
Lineare Suche in Python
"Lineare Regression" und "Probabilistische Version der linearen Regression" in Python "Bayes lineare Regression"
Einführung in die lineare Algebra mit Python: A = LU-Zerlegung
Peeping in Python, keine beängstigende Quantenmechanik 1: Unendliches Potenzial vom Typ Well
Stapel und Warteschlange in Python
Peeping in Python, keine gruselige Quantenmechanik 2: endliches Potential vom Typ Well
Erfassen Sie lineare Algebra-Bilder mit Python (Translokation, inverse Matrix, Produkt von Matrizen)
Unittest und CI in Python
Online lineare Regression in Python
Liste der in Python verfügbaren Löser und Modellierer für lineares Design (LP)
Pakete, die MIDI mit Python Midi und Pretty_Midi verarbeiten
Unterschied zwischen list () und [] in Python
Erste einfache Regressionsanalyse in Python
Unterschied zwischen == und ist in Python
Zeigen Sie Fotos in Python und HTML an
Sortieralgorithmus und Implementierung in Python
Bearbeiten Sie Dateien und Ordner in Python
Über Python und Cython dtype
Zuweisungen und Änderungen in Python-Objekten
Überprüfen und verschieben Sie das Verzeichnis in Python
Verschlüsselung mit Python: IND-CCA2 und RSA-OAEP
Hashing von Daten in R und Python
Funktionssynthese und Anwendung in Python
Exportieren und Ausgeben von Dateien in Python
Reverse Flat Pseudonym und Katakana in Python2.7
Lesen und Schreiben von Text in Python
[GUI in Python] PyQt5-Menü und Symbolleiste-
Der erste Schritt von Python Matplotlib
Erstellen und lesen Sie Messagepacks in Python
Finden Sie die allgemeinen Begriffe der Tribonacci-Sequenz in linearer Algebra und Python
Überlappende reguläre Ausdrücke in Python und Java
Generieren Sie eine erstklassige Sammlung in Python
Unterschied in der Authentizität zwischen Python und JavaScript
Hinweise zur Verwendung von cChardet und python3-chardet in Python 3.3.1.
Module und Pakete in Python sind "Namespaces"
Vermeiden Sie verschachtelte Schleifen in PHP und Python
Lineare Regression in Python (Statmodelle, Scikit-Learn, PyMC3)
Unterschiede zwischen Ruby und Python im Umfang
AM-Modulation und Demodulation mit Python Part 2
Unterschied zwischen Anweisungen (Anweisungen) und Ausdrücken (Ausdrücken) in Python
Warteschlangen- und Python-Implementierungsmodul "deque"
Gefaltetes Liniendiagramm und Skalierungslinie in Python
Online lineare Regression in Python (Robuste Schätzung)
Implementieren Sie den FIR-Filter in Python und C.
Unterschiede zwischen Python- und Java-Syntax
Überprüfen und empfangen Sie die serielle Schnittstelle in Python (Portprüfung)
Unterschied zwischen @classmethod und @staticmethod in Python
Unterschied zwischen Anhängen und + = in der Python-Liste
Unterschied zwischen nicht lokal und global in Python
Schreiben Sie die O_SYNC-Datei in C und Python
Umgang mit "Jahren und Monaten" in Python