Ing Mathematik: Numerisches Lösen von Eigenwertproblemen
Vorlage:Navigation zurückhochvor buch
Insbesondere bei Schwingungen sind Eigenwerte und -vektoren von Bedeutung (siehe z.B. Vorlage:W oder Hagedorn, Hochlenert: Technische Schwingungslehre. Harri Deutsch, 2012, ISBN 978-3-8171-1890-8). Aber auch die Hauptspannungen in der Festigkeitslehre können als Eigenwertproblem behandelt werden (siehe z.B. Vorlage:W und Hagedorn, Wallaschek: Technische Mechanik Bd.2, Festigkeitslehre. Europa, 5.Aufl., 2015, ISBN 978-3-8085-5691-7).
Eigenwerte und Eigenvektoren - Allgemeines
Es sei
mit .
mit als nxn-Einheitsmatrix.
Für nicht triviale Lösungen () muss gelten:
(charakteristische Gleichung oder Säkulargleichung).
. Die Lösungen dieses Polynoms heißen Eigenwerte.
Ein Polynom vom Grad n hat maximal n Nullstellen. D.h. es gibt auch höchstens n Eigenwerte. Die zu gehörenden Vektoren heißen Eigenvektoren.
Siehe auch Vorlage:W.
Ein Beispiel mit Python und SciPy:
import numpy as np
import scipy.linalg as la
A = np.array([[ 24, 54, -38, -8],
[-11, -27, 20, -2],
[ 0, -2, 3, -6],
[ 6, 14, -10, -1]])
w, v = la.eig(A)
# Eigenwerte
print(w)
# Eigenvektoren
print(v)
Ausgabe:
[-3.+0.j 2.+0.j 1.+0.j -1.+0.j] [[-9.05821627e-01 4.08248290e-01 -9.25820100e-01 9.17662935e-01] [ 3.39683110e-01 4.08248290e-01 1.54303350e-01 -2.29415734e-01] [-1.13227703e-01 8.16496581e-01 -3.08606700e-01 2.29415734e-01] [-2.26455407e-01 1.93235474e-14 -1.54303350e-01 2.29415734e-01]]
Siehe auch [1]
Spektrum einer Matrix
Die Menge der Eigenwerte nennt man das Spektrum . Der Spektralradius ist .
Vielfachheiten
- Algebraische Vielfachheit: (k-facher Eigenwert von )
- Geometrische Vielfachheit:
Mehrfache Nullstellen werden entsprechend ihrer Vielfachheit gezählt.
Symmetrische Matrizen
Für reelle, symmetrische Matrizen gilt:
- Eigenwerte sind reell
- Eigenvektoren stehen senkrecht aufeinander
- geometrische und algebraische Vielfachheit stimmen bei jedem Eigenwert überein.
Seien
- p ... Anzahl der positiven Eigenwerte der symmetrischen Matrix
- q ... Anzahl der negativen Eigenwerte der symmetrischen Matrix
- d ... Anzahl der Eigenwerte die Null sind.
Dann sind
- (p, q) ... Signatur von
- p-q ... Trägheitsindex von
- d ... Defekt von .
Eine symmetrische Matrix ist positiv definit, wenn alle ihre Eigenwerte > 0 sind.
Siehe auch Vorlage:W.
Diagonalisierbarkeit
Eine Matrix lässt sich diagonalisieren, wenn sie n linear unabhängige Eigenvektoren aufweist.
Jordansche Normalform

Nicht jede Matrix ist diagonalisierbar. Aber jede quadratisch komplexe Matrix lässt sich auf die jordansche Normalform bringen.
mit regulär komplex,
Wie man die Transformation auf die jordansche Normalform durchführt (Berechnung von aus gegebenen ), siehe z.B. Burg, Haf, Wille, Meister: Seite 237ff. Dies ist einigermaßen aufwendig. Umgekehrt ist das natürlich sehr einfach.
Shift - Verschieben von Eigenwerten
Sind die Eigenwerte der nxn-Matrix , so hat die Matrix die Eigenwerte . und die haben gleiche algebraische Vielfachheit.
Hessenbergmatrix
Eine (obere) Hessenbergmatrix ist eine quadratische Matrix , deren Einträge unterhalb der ersten Nebendiagonalen gleich Null sind, also für alle .
Siehe auch Vorlage:W.
Krylov-Verfahren
Das Krylov-Verfahren eignet sich nur für kleine Matrizen () (Quelle: Burg, Haf, Wille, Meister: Seite 249). Die Matrix habe nur unterschiedliche Eigenwerte. Das Verfahren ist ziemlich instabil. Es wird deshalb in der Praxis nur selten eingesetzt.
Gegeben sei eine 4x4-Matrix . Startvektor sei . Funktioniert das nicht, fährt man mit fort usw. Funktioniert das alles nicht, so lässt sich das Problem mit dem Krylov-Verfahren nicht lösen.
Python-Code (rudimentär):
import numpy as np
import scipy.linalg as la
import scipy.optimize as opt
import matplotlib.pyplot as plt
# 4x4-Matrix
A = np.array([[3, 1, -10, 5],
[1, -7, 1, 2],
[-10, 1, 3, -6],
[5, 2, -6, -1]])
n = A.shape[0]
z = np.zeros((n,n))
zn = np.zeros(n)
# Koeffizientenmatrix für lin. GS erstellen
z[:,0] = [ 1, 1, 1, 1]
for k in np.arange(1, n):
z[:,k] = A @ z[:,k-1]
zn = A @ z[:,3]
# Löse lin. GS
x = la.solve(z, -(-1)**4 * zn)
# Polynom erstellen
p = np.poly1d([1, x[3], x[2], x[1], x[0]])
# Nullwerte ermitteln
eigenwert = np.zeros(n)
for k in np.arange(0, n):
if k == n-1:
i = 15
else:
i = -10 + k*4
eigenwert[k] = opt.newton(p, i)
# Konsolenausgabe
for k in np.arange(0, n):
print(eigenwert[k])
# Grafik
x = np.arange(-12, 20, .1)
y = p(x)
x1 = np.arange(-10, 0, .1)
y1 = p(x1)
plt.plot(x, y)
for k in np.arange(0, n):
plt.plot(eigenwert[k], 0, "o")
plt.axes([0.3, 0.5, 0.25, 0.25])
plt.plot(x1, y1)
for k in np.arange(0, n-1):
plt.plot(eigenwert[k], 0, "o")
plt.grid()
plt.show()
Konsolenausgabe:
-9.125090927816691 -5.8570090791499965 -3.5129666875859895 16.49506669455273
Grafik:
Das charakteristische Polynom für dieses Beispiel lautet:
Jacobi-Verfahren
Dieses Verfahren eignet sich für kleine reelle symmetrische Matrizen. Es arbeitet mit Givens-Rotationen:
Damit folgt wieder die symmetrische Matrix . Führt man dies immer weiter durch, so ergibt sich eine Diagonalmatrix.
Siehe auch Vorlage:W, Burg, Haf, Wille, Meister: Seite 251ff, Hanke-Bourgeois: Seite 238ff oder [2].
Potenzmethode nach von Mises

Sie wird auch Vektoriteration oder Von-Mises-Iteration genannt und berechnet den betragsgrößten Eigenwert. Sie eignet sich besonders für dünnbesetzte Matrizen. Das Verfahren lässt sich den Krylow-Unterraum-Verfahren zuordnen.
Python-Code:
import numpy as np
A = np.array([[3, 1, -10, 5],
[1, -7, 1, 2],
[-10, 1, 3, -6],
[5, 2, -6, -1]])
r = [1,1,1,1]
for k in np.arange(0,50):
r = A@r
lam = np.max(np.absolute(r))
r = r/lam
print(lam)
Ausgabe:
16.495066694547337
Siehe auch Vorlage:W, Burg, Haf, Wille, Meister: Seite 254ff, Hanke-Bourgeois: Seite 218ff
Deflation
Siehe vorerst Vorlage:W und Burg, Haf, Wille, Meister: Seite 257f.
Wielandt-Iteration

Siehe vorerst Vorlage:W und Burg, Haf, Wille, Meister: Seite 258f.
Lanczos-Verfahren
Siehe vorerst Vorlage:W und Hanke-Bourgeois: Seite 259ff
Weitere Verfahren
- QR-Verfahren basierend auf der Hessenberg-Matrix (siehe auch Vorlage:W, und Hanke-Bourgeois: Seite 227ff)
- Hyman-Verfahren
Eigenwerte und -vektoren mit SciPy
Mit SciPy und Python lassen sich die Eigenwerte und -vektoren sehr einfach berechnen. Dazu gibt es eine Reihe von SciPy-Funktionen. Nachfolgend wird die Verwendung einiger dieser Funktionen gezeigt. Siehe dazu auch die SciPy-Dokumentation [3].
Python-Code (gegeben sei eine symmetrische Matrix):
import numpy as np
from scipy import linalg
a = np.array([[3, 1, -10, 5],
[1, -7, 1, 2],
[-10, 1, 3, -6],
[5, 2, -6, -1]])
ev1 = linalg.eigvals(a) # Eigenwerte für allgemeine Matrizen
ev2 = linalg.eigvalsh(a) # Eigenwerte für symmetrische/hermitesche Matrizen
w, vl = linalg.eig(a) # Eigenwerte und Eigenvektoren
print(ev1)
print("-"*75)
print(ev2)
print("-"*75)
print(w)
print("-"*75)
print(vl)
Ausgabe:
[16.49506669+0.j -9.12509093+0.j -5.85700908+0.j -3.51296669+0.j] --------------------------------------------------------------------------- [-9.12509093 -5.85700908 -3.51296669 16.49506669] --------------------------------------------------------------------------- [16.49506669+0.j -9.12509093+0.j -5.85700908+0.j -3.51296669+0.j] --------------------------------------------------------------------------- [ 0.63731292 0.33339446 0.64983438 -0.24575529] [ 0.03424931 -0.71822344 0.51243339 0.4694615 ] [-0.65183109 0.5045163 0.48861626 0.28606588] [ 0.40960403 0.34418968 -0.27637196 0.79835866]]
Gedruckte Werke (auszugsweise)
- Burg, Haf, Wille, Meister: Höhere Mathematik für Ingenieure, Band II: Lineare Algebra. 7. Auflage, Springer Vieweg, 2012, ISBN 978-3-8348-1853-9
- Hanke-Bourgeois: Grundlagen der Numerischen Mathematik und des Wissenschaftlichen Rechnens. 3. Aufl., Vieweg+Teubner, 2009, ISBN 978-3-8348-0708-3