zu Aufgabe (6)
> | restart:with(linalg): |
Warning, the protected names norm and trace have been redefined and unprotected
Die gegebene Matrix lautet:
> | A := matrix([[-2/3, 1/3, -2/3], [1/3, -2/3, -2/3], [-2/3, -2/3, 1/3]]); |
(a) Berechnung der Drehachse:
Dazu berechne ich Eig(A, 1)=Lös(A-E, 0).
> | E:=matrix(3,3,[1,0,0,0,1,0,0,0,1]); |
> | `A-E`:=evalm(A-E); |
Multiplikation mit 3 erleichtert die Rechnung:
> | B:=evalm(3*`A-E`); |
> | addrow(addrow(B,2,1,5),2,3,2); |
> | addrow(mulrow(%,3,-1/6),3,1,12); |
Nun sieht man bereits, dass der Vektor den Eigenraum aufspannt. Dieser ist (Eigenwert 1 !!) die Drehachse.
Probe:
> | a := vector([1, 1, -2]): |
> | evalm(A&*a); |
Um den zugehörigen Drehwinkel zu bestimmen, normiere ich den obigen Eigenvektor und erweitere ihn zu einer ONB.
> | #v[1]:=evalm(1/norm(a,2)*a);norm(v[1],2); |
> | P:=concat(op(GramSchmidt([a,vector([1,0,0]),vector([0,1,0])],normalized)));; |
Probe
> | evalm(transpose(P)&*P); |
Nun führe ich den entsprechenden Basiswechsel durch und erhalte als neue Matrixdarstellung der Drehung:
> | Aneu:=evalm(transpose(P)&*A&*P); |
Dabei geht die ursprüngliche Drehachse über in den Aufspann von . Die Matrix Aneu hat die Struktur Aneu=diag(1,D1) mit der Drehmatrix
> | D1:=matrix(2,2,[-1,0,0,-1]); |
Der entsprechende Drehwinkel ist:
> | convert(arccos(evalf(D1[1,1])),units,radian,degree); |
Wär hätte das gedacht, nur eine schlichte Drehung in der 2,3-Ebene um 180 Grad !
(b) Berechnung "der" Euler'schen Winkel.
Ich lege diese hier wie folgt fest:
ist der Winkel der Drehung Di um die -Achse, =1,2,3,
und die Reihenfolge der Drehungen sie durch die Darstellung
A =
festgelegt.
Bevor ich rechne, zuerst eine kleine Prozedur zur Generierung von elementaren Drehungen.
> | eD:=proc(i,j,a,b,n) local M; if i=j then ERROR("i darf nicht gleich j sein") fi: M:=evalm(array(1..n,1..n,identity)); M[i,i]:=a/sqrt(a^2+b^2):M[i,j]:=b/sqrt(a^2+b^2):M[j,i]:=-b/sqrt(a^2+b^2):M[j,j]:=a/sqrt(a^2+b^2): evalm(M); end: |
Nun ergeben sich die elementaren Drehungen D3,D2,D1 mit der EIgenschaft ganz leicht:
> | D3:=eD(1,2,A[1,1],A[2,1],3); |
> | A3:=evalm(D3&*A); |
> | D2:=eD(1,3,A3[1,1],A3[3,1],3); |
> | A32:=evalm(D2&*A3); |
> | D1:=eD(2,3,A32[2,2],A32[3,2],3); |
> | evalm(D1&*A32); |
Ergebnis: Mit den oben angegebenen Matrizen D1,D2,D3 gilt demnach wie gewünscht:
A = .
Eulerscher Drehwinkel für D1 (bzw. ) in Grad:
> | alpha[1]:=convert(arccos(evalf(D1[2,2])),units,radian,degree); |
Eulerscher Drehwinkel für D2 in Grad:
> | alpha[2]:=convert(arccos(evalf(D2[1,1])),units,radian,degree); |
Eulerscher Drehwinkel für D3 in Grad:
> | alpha[3]:=convert(arccos(evalf(D3[1,1])),units,radian,degree); |
> |