Mathematik von T. Arens, F. Hettlich, Ch. Karpfinger, U. Kockelkorn, K. Lichtenegger, H. Stachel (zu Kapitel 18: Eigenwerte und Eigenvektoren)restart; Eigenwerte einer MatrixDie Eigenwerte einer Matrix erhalten wir durch den Befehl eigenvalues im Paket linalg. Geben wir z. B. die MatrixA:= 1/8*evalm(matrix(3,3,[43, -15, 3, 21, 15, -3, 30, -6, 14]));ein, so ergeben sich die drei Eigenwertewith(linalg):
eigenvalues(A);
Selbstverstaendlich haetten wir auch direkt vorgehen koennen, indem wir uns das charakteristische Polynom verschaffen und die Nullstellen bestimmen. Dazu koennen wir die uns schon bekannten Befehle det und solve nutzen.E:=array(identity,1..3,1..3);
p:=det(A-lambda*E);
EW:=[solve(p=0,lambda)];Fuer das charakteristische Polynom ist ein eigener Befehl charpoly im Paket linalg vorgesehen. Wir erhalten, wie oben schon berechnet,charpoly(A,lambda);Auch die Eigenvektoren lassen sich direkt durch das Kommando eigenvectors bestimmeneigenvectors(A);Der Befehl liefert eine Liste der Eigenwerte mit ihrer algebraischen Vielfachheit und einer Basis des zugehoerigen Eigenraums.Nun ueberpruefen wir noch die Aussage, dass die Summe der Diagonalelemente einer Matrix, die sogenannte Spur (trace), gerade die Summe der Eigenwerte ist.sum(EW[j],j=1..3);
trace(A);Bemerkung: Durch das Laden des Pakets linalg hat sich die Bedeutung des Kommandos trace geaendert. Ohne das Paket ist es ein Befehl zur Fehlersuche (debuggen) bei Prozeduren. Dieser Befehl wird durch das Paket linalg ueberschrieben.Verifizieren wir noch, dass das Produkt der Eigenwerte gleich der Determinante der Matrix ist: product(EW[j],j=1..3);
det(A);Die geometrische Bedeutung des Eigenwerts als Streckfaktor in Richtung der Eigenvektoren, koennen wir uns natuerlich veranschaulichen, indem wir einen Eigenvektor NiNJInhHNiI= herausgreifen und sein Bild unter der linearen Abbildung NiMvLUkmYWxwaGFHNiI2I0kieEdGJiomSSJBR0YmIiIiRihGKw== betrachten. x:=matrix(3,1,[1,5/3,2]);
y:=evalm(A&*x);
with(plots):
with(plottools):
p1:=plot3d(0,0..5,0..5,color=gray,style=patchnogrid,axes=boxed):
p2:=sphere([seq(x[j,1],j=1..3)],0.1,style=patchnogrid,color=blue):
p3:=sphere([seq(y[j,1],j=1..3)],0.1,style=patchnogrid,color=red):
p4:=line([0,0,0],[seq(y[j,1],j=1..3)],linestyle=1,color=black):
display(p1,p2,p3,p4);Wenn Sie das Bild mit der linken Maustaste anklicken, koennen Sie es drehen, um es sich besser dreidimensonal vorstellen zu koennen. Offensichtlich ist y (rot) der um den Faktor 3 gestreckte Vektor x (blau).Im Satz von Cayley-Hamilton wird festgestellt, dass wir die Nullmatrix erhalten, wenn wir NiNJIkFHNiI= in das charakteristische Polynom einsetzen. Versuchen wir dies: Zunaechst wandeln wir NiNJInBHNiI= in eine Funktion.p:=unapply(p,lambda);Setzen wir nun die Matrix NiNJIkFHNiI= als Argument in das Polynom ein und werten den Ausdruck als Matrix aus, so folgt, wie zu erwarten,evalm(p(A));Wie anschliessend im Buch auf Seite 595 erlaeutert, koennen wir daraus die Inverse zu NiNJIkFHNiI= bestimmen, indem wir NiNJIkFHNiI= aus NiMtSSJwRzYiNiNJIkFHRiU= ausklammern. Mitq:=unapply(simplify((24-p(lambda))/lambda),lambda);vergleichen wir evalm(1/24*q(A));undinverse(A); DiagonalisierbarkeitInwieweit eine Matrix diagonalisierbar ist, kann mit Hilfe des Befehls jordan ermittelt werden, der die Jordannormalform einer Matrix anzeigt (zur Vertiefung siehe den optionalen Abschnitt 18.8). In unserem Beispiel mit drei verschiedenen Eigenwerten ist die Matrix diagonalisierbar und wir erhalten die Diagonalmatrix mit den Eigenwerten auf der Diagonalen.J:=jordan(evalm(A));Geben wir im Befehl noch ein weiteres Argument an, etwa 'S', so wird der Variable S die Transformationsmatrix zugeordnet, d.h. es ist NiMvSSJKRzYiKigpSSJTR0YlLCQiIiIhIiJGKkkiQUdGJUYqRihGKg==jordan(evalm(A),'S'):
evalm(S);
evalm(inverse(S)&*A&*S);Betrachten wir noch ein anderes Beispiel:B:=matrix(3,3,[[2, 0, 0],[-2, 2, 3], [3, 0, -1]]);
jordan(evalm(B));
In diesem Fall ist die Matrix nicht diagonalisierbar. (Am unteren Jordanblock erkennt man, dass NiMvSSdsYW1iZGFHNiIiIiM= Eigenwert der Matrix ist mit algebraischer Vielfachheit 2 und geometrischer Vielfachheit 1) Fuer Matrizen ist auch die Exponentialfunktion (exponential) im Paket linalg vorgesehen. Ist die Matrix diagonalisierbar, so wird fuer die Matrix NiMpSSJlRzYiSSNBdEdGJQ== die explizite Darstellung mit den entsprechenden Eigenwerten und Eigenvektoren berechnet.exponential(A,t); Numerische Berechnung von EigenwertenWir schreiben uns ein eigenes Programm zur Vektoriteration, um den groessten Eigenwert einer Matrix zu approximieren.viter:=proc(A, v0, n)
local j, xn, vn, vmax, lambda, lambdalist;
vn := v0;
lambdalist := [];
for j to n do
xn := evalm(A&*vn);
vmax:=norm(vn,infinity);
member(vmax,[seq(vn[i,1],i=1..rowdim(vn))],'jmax');
lambda := evalf( xn[jmax,1]/vn[jmax,1], 3);
lambdalist := [op(lambdalist), lambda] ;
vn := evalm(xn);
od;
op(lambdalist)
end:Bemerkung: Mit dem Befehl op lassen sich die Operanden eines Ausdrucks, d.h. in diesem Fall die Eintraege in der Liste, ausgeben.Probieren wir nun das Programm aus mit der anfaenglichen Matrix A und dem Startvektor (1,1,1). Es ergibt sichA:= 1/8*evalm(matrix(3,3,[43, -15, 3, 21, 15, -3, 30, -6, 14]));
v0:=matrix(3,1,[[1],[1],[1]]);
viter(A,v0,20);Offensichlich konvergiert die Iteration. Deutlich ist in der Liste der Naeherungen an den Eigenwert die relativ langsame Konvergenzgeschwindigkeit zu sehen.Das am haeufigsten angewendete Verfahren zur Berechnung von Eigenwerten diagonalisierbarer Matrizen ist das QR-Verfahren, fuer dessen Beschreibung wir auf die Literatur zur Numerischen Mathematik verweisen. Es beruht auf einer Zerlegung der Matrix in das Produkt einer unitaeren Matrix Q und eine obere Dreiecksmatrix R. Diese Methode ist in Maple unter dem Kommando Eigenvals implementiert. evalf( Eigenvals( evalm(A) ) ); Aufgaben1. Bestimmen Sie die Eigenwerte und zugehoerige Eigenvektoren zuA:= evalm(matrix(3,3,[1, -3, 3, 3, -5, 3, 6, -6, 4]));indem Sie Nulllstellen des charakteristischen Polynoms bestimmen und die Eigenvektoren aus den entsprechenden linearen Gleichungssystemen berechnen. Ueberpruefen Sie ihr Ergebnis durch die Befehle eigenvalues und eigenvectors. LoesungZunaechst definieren wir das charakteristische Polynom.E:=array(identity,1..3,1..3);
p(lambda):=det(A-lambda *E);Die Eigenwerte erhalten wir aus den Nullstellen.EW:=[solve(p(lambda)=0,lambda)];Um die Eigenvektoren zu bekommen loesen wir die zugehoerigen linearen GleichungssystemeNull:=vector([0,0,0]):
ev:=[seq(linsolve(A-EW[j]*E,Null),j=1..3)];und suchen uns Eigenvektoren aus:EV:=[subs(_t[1]=1,ev[1]),subs(_t[1]=1,_t[2]=1,ev[2]),subs(_t[1]=-1,_t[2]=1,ev[3])];Zur Kontrolle verwenden wir den Befehl eigenvectors:eigenvectors(A);Beachten Sie, dass alle Linearkombinationen der Eigenvektoren zum Eigenwert -2 wieder Eigenvektoren sind. Dies erklaert die Diskrepanz in den Ergebnissen. Haetten wir oben _t[2]=0 statt _t[2]= -1 gewaehlt, waeren wir auf dieselben Eigenvektoren gekommen wie Maple. 2. a) Wir greifen Aufgabe 18.10 auf: Bestimmen Sie eine orthogonale Matrix S, sodass S^(-1)*A*S Diagonalmatrix ist mitA:= evalm(matrix(3,3,[10, 8, 8, 8, 10, 8, 8, 8, 10]));b) Pruefen Sie auch noch das Resultat in Aufgabe 18.9 (a) zur MatrixA:= evalm(matrix(2,2,[1, I, I, -1]));und berechnen Sie NiMqJEkiQUc2IiIiIw== .Loesunga) Mit dem Befehl jordan ergibt sich direkt das gesuchte Resultat:jordan(evalm(A),'S');Die Transformationsmatrix istevalm(S);und wir kontrollieren das Ergebnis durchevalm(inverse(S)&*A&*S);b) Im zweiten Beispiel ergibt sichA:= evalm(matrix(2,2,[1, I, I, -1]));
jordan(evalm(A),'S');mitevalm(S);Sie sehen die Matrix hat den Eigenwert 0 mit algebraischer Vielfacheit 2eigenvectors(evalm(A));Fuer das Quadrat der Matrix NiNJIkFHNiI= folgtevalm(A&*A);Eine Matrix mit der Eigenschaft NiMvKUkiQUc2Ikkia0dGJiIiIQ== heisst nilpotent (s. Abschnitt 18.8).3. Fuer welche reellen Zahlen NiNJImFHNiI= ist die Matrix A:= evalm(matrix(3,3,[1, 0, 0, 0, 3, a, 1, a, 3]));diagionalisierbar?LoesungZunaechst bestimmen wir die Eigenwerte der Matrixeigenvalues(A);Nun muessen wir vier Faelle unterscheiden: 1. Fall NiMvSSJhRzYiIiIh :eigenvectors(evalm(subs(a=0,evalm(A))));Die Matrix ist diagonalisier, da geometrische und algebraische Vielfachheit zu NiMvSSdsYW1iZGFHNiIiIiQ= gleich sind. Es ergibt sich die Diagonalmatrix jordan(evalm(subs(a=0,evalm(A))));2. Fall NiMvSSJhRzYiLCQiIiMhIiI= :eigenvectors(evalm(subs(a=-2,evalm(A))));Die Matrix ist nicht diagonalisier, da geometrische und algebraische Vielfachheit zu NiMvSSdsYW1iZGFHNiIiIiI= nicht gleich sind. Es ergibt sich jordan(evalm(subs(a=-2,evalm(A))));3. Fall NiMvSSJhRzYiIiIj :eigenvectors(evalm(subs(a=2,evalm(A))));Die Matrix ist nicht diagonalisier, da geometrische und algebraische Vielfachheit zu NiMvSSdsYW1iZGFHNiIiIiI= nicht gleich sind. Es ergibt sich analog zum 2. Falljordan(evalm(subs(a=-2,evalm(A))));4. Fall Wenn NiNJImFHNiI= weder 0,2, noch -2 ist, so ist die Matrix diagonalisierbar (alle Eigenwerte sind verschieden) und wir erhalten die Diagonalmatrixjordan(evalm(A),'S');Achtung: die beiden kritischen Faelle werden von Maple bei einfachem Anwenden des Befehls jordan nicht erkannt. Betrachten wir aber die Transformationsmatrixevalm(S);so ist offensichtlich, dass NiMvSSJhRzYiIiIj und NiMvSSJhRzYiLCQiIiMhIiI= auf keine sinnvolle Aehnlichkeitstransformation fuehren. Auch beim Befehl eigenvectors muss man in diesem Beispiel genau hinsehen, um die geometrischen Vielfacheiten in den Spezialfaellen zu erkennen.eigenvectors(A);