kapitel-18maple.mw

Mathematik

von T. Arens, F. Hettlich, Ch. Karpfinger, U. Kockelkorn, K. Lichtenegger,  H. Stachel

(zu Kapitel 18:  Eigenwerte und Eigenvektoren)

> restart;

Eigenwerte einer Matrix

Die Eigenwerte einer Matrix erhalten wir durch den Befehl eigenvalues  im Paket linalg .  Geben wir z. B. die Matrix

> A:= 1/8*evalm(matrix(3,3,[43, -15, 3, 21, 15, -3, 30, -6, 14]));

A := 1/8*matrix([[43, -15, 3], [21, 15, -3], [30, -6, 14]])

ein, so ergeben sich die drei Eigenwerte

> with(linalg):
eigenvalues(A);

Warning, the protected names norm and trace have been redefined and unprotected

2, 3, 4

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)];

E := array(identity, 1 .. 3, 1 .. 3, [])

p := 24-26*lambda+9*lambda^2-lambda^3

EW := [2, 3, 4]

Fuer das charakteristische Polynom ist ein eigener Befehl charpoly  im Paket linalg vorgesehen. Wir erhalten, wie oben schon berechnet,

> charpoly(A,lambda);

-24+26*lambda-9*lambda^2+lambda^3

Auch die Eigenvektoren lassen sich direkt durch das Kommando   eigenvectors   bestimmen

> eigenvectors(A);

[3, 1, {vector([1, 5/3, 2])}], [2, 1, {vector([1, 3, 6])}], [4, 1, {vector([1, 1, 4/3])}]

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);

9

9

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);

24

24

Die geometrische Bedeutung des Eigenwerts als Streckfaktor in Richtung  der Eigenvektoren, koennen wir uns natuerlich  veranschaulichen, indem wir einen Eigenvektor x herausgreifen und sein Bild unter der linearen Abbildung alpha(x) = A*x  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);

x := matrix([[1], [5/3], [2]])

y := matrix([[3], [5], [6]])

Warning, the name changecoords has been redefined

Warning, the assigned name arrow now has a global binding

[Plot]

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 A in das charakteristische Polynom einsetzen. Versuchen wir dies: Zunaechst wandeln wir p in eine Funktion.

> p:=unapply(p,lambda);

p := proc (lambda) options operator, arrow; 24-26*lambda+9*lambda^2-lambda^3 end proc

Setzen wir nun die Matrix A als Argument in das Polynom ein und werten den Ausdruck als Matrix aus, so folgt, wie zu erwarten,

> evalm(p(A));

matrix([[0, 0, 0], [0, 0, 0], [0, 0, 0]])

Wie anschliessend im Buch auf Seite 595 erlaeutert, koennen wir daraus die Inverse zu A bestimmen, indem wir A  aus  p(A) ausklammern. Mit

> q:=unapply(simplify((24-p(lambda))/lambda),lambda);

q := proc (lambda) options operator, arrow; 26-9*lambda+lambda^2 end proc

vergleichen wir

> evalm(1/24*q(A));

matrix([[1/8, 1/8, 0], [(-1)/4, 1/3, 1/8], [(-3)/8, (-1)/8, 5/8]])

und

> inverse(A);

matrix([[1/8, 1/8, 0], [(-1)/4, 1/3, 1/8], [(-3)/8, (-1)/8, 5/8]])

>

Diagonalisierbarkeit

Inwieweit 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));

J := matrix([[2, 0, 0], [0, 3, 0], [0, 0, 4]])

Geben wir im Befehl noch ein weiteres Argument an, etwa 'S',  so wird der Variable S die Transformationsmatrix zugeordnet, d.h. es ist  J = S^(-1)*A*S

> jordan(evalm(A),'S'):
evalm(S);

evalm(inverse(S)&*A&*S);

matrix([[(-1)/8, (-9)/8, 9/4], [(-3)/8, (-15)/8, 9/4], [(-3)/4, (-9)/4, 3]])

matrix([[2, 0, 0], [0, 3, 0], [0, 0, 4]])

Betrachten wir noch ein anderes  Beispiel:

> B:=matrix(3,3,[[2, 0, 0],[-2, 2, 3], [3, 0, -1]]);
jordan(evalm(B));

B := matrix([[2, 0, 0], [-2, 2, 3], [3, 0, -1]])

matrix([[-1, 0, 0], [0, 2, 1], [0, 0, 2]])

In diesem Fall ist die Matrix  nicht diagonalisierbar. (Am unteren Jordanblock erkennt man, dass lambda = 2 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  e^At die explizite Darstellung mit den entsprechenden Eigenwerten und Eigenvektoren berechnet.

> exponential(A,t);

matrix([[-1/8*exp(2*t)-9/8*exp(3*t)+9/4*exp(4*t), -9/4*exp(4*t)+21/8*exp(3*t)-3/8*exp(2*t), 3/4*exp(4*t)-9/8*exp(3*t)+3/8*exp(2*t)], [-15/8*exp(3*t)-3/8*exp(2*t)+9/4*exp(4*t), -9/8*exp(2*t)-9/4*exp(4*...

>

Numerische Berechnung von Eigenwerten

Wir 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 sich

> A:= 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);

A := 1/8*matrix([[43, -15, 3], [21, 15, -3], [30, -6, 14]])

v0 := matrix([[1], [1], [1]])

3.88, 4.16, 3.96, 3.89, 3.88, 3.89, 3.90, 3.92, 3.94, 3.95, 3.96, 3.97, 3.98, 3.98, 3.99, 3.99, 3.99, 3.99, 4.00, 4.00

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) ) );

vector([4.000000013, 2.999999989, 1.999999999])

>

Aufgaben

1. Bestimmen Sie die Eigenwerte und zugehoerige Eigenvektoren zu

> A:= evalm(matrix(3,3,[1, -3, 3, 3, -5, 3, 6, -6, 4]));

A := matrix([[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.

>

Loesung

2. a) Wir greifen Aufgabe 18.10 auf: Bestimmen Sie eine orthogonale Matrix S, sodass S^(-1)*A*S Diagonalmatrix ist mit

> A:= evalm(matrix(3,3,[10, 8, 8, 8, 10, 8, 8, 8, 10]));

A := matrix([[10, 8, 8], [8, 10, 8], [8, 8, 10]])

b) Pruefen Sie auch noch das  Resultat in Aufgabe 18.9 (a) zur Matrix

> A:= evalm(matrix(2,2,[1, I, I, -1]));

A := matrix([[1, I], [I, -1]])

und berechnen Sie A^2 .

>

Loesung

3. Fuer welche reellen Zahlen a ist die Matrix

> A:= evalm(matrix(3,3,[1, 0, 0, 0, 3, a, 1, a, 3]));

A := matrix([[1, 0, 0], [0, 3, a], [1, a, 3]])

diagionalisierbar?

Loesung

>

>