Sortieren des Eigensystems einer symbolischen Matrix
Meine symbolische Matrix $A$ liest
\ begin {Gleichung *} \ left (\ begin {array} {ccc} a \ left (x ^ 2 + y ^ 2 + z ^ 2 \ right) & von z + ivx & -ivy \\ von zi vx & a \ left (x ^ 2 + y ^ 2 + z ^ 2 \ right) & bx y + ivz \\ ivy & bx yi vz & a \ left (x ^ 2 + y ^ 2 + z ^ 2 \ right) \\ \ end {array} \ right), \ end {Gleichung *} wobei$a,b,v$ sind nichtnegative reelle Zahlen und $x,y,z$ bezeichnen kartesische Koordinaten.
$Assumptions = Element[{a, v, b}, Reals] && v >= 0 && b >= 0 && a >= 0;
A = ConstantArray[0, {3, 3}];
diagm = {a (x^2 + y^2 + z^2), a (x^2 + y^2 + z^2),
a (x^2 + y^2 + z^2)}; nondiagm = {I v x + b z y , -I v y ,
b x y + I v z};
A[[1, 1]] = diagm[[1]];
A[[2, 2]] = diagm[[2]];
A[[3, 3]] = diagm[[3]];
A[[1, 2]] = nondiagm[[1]];
A[[2, 1]] = Conjugate[A[[1, 2]]];
A[[1, 3]] = nondiagm[[2]];
A[[3, 1]] = Conjugate[A[[1, 3]]];
A[[2, 3]] = nondiagm[[3]];
A[[3, 2]] = Conjugate[A[[2, 3]]];
Af = ComplexExpand /@ A // Simplify;
Af // MatrixForm
evals = Eigenvalues[Af, Cubics -> True];
Mit Eigensystemkann ich die Eigenwerte und Eigenvektoren meiner Matrix berechnen. Für ein bestimmtes $ a, b, v, x, y, z $ stelle ich fest, dass die Eigenwerte nicht sortiert sind. Ich kann versuchen, diese bestimmte Matrix mit diesem und diesem Thread zu sortieren
Aftmp = Af /. {z -> 2, x -> 2, y -> 2, v -> 1, b -> 0.5, a -> 0.2} // Simplify;
Transpose@SortBy[Transpose[Eigensystem[Aftmp]], N]
Meine Frage ist nun, wie ich diese bestimmte Reihenfolge numerischer Eigensysteme auf meine symbolische Matrix anwenden kann. Da ich im Rest meines Skripts ein geordnetes Eigensystem für verschiedene Matrizen verwenden muss, wird ein nicht fest codierter Ansatz sehr geschätzt.
Antworten
Wenn ich Sie richtig verstehe, glauben Sie, dass die Eigenwerte für jede Auswahl von Parametern gleich sortiert werden. Das klingt für mich höchst zweifelhaft, aber wer weiß.
Ich bin mir nicht sicher, was Sie unter "nicht fest codiert" verstehen, da Sie angeben, dass Sie "diese bestimmte Reihenfolge" möchten. Also hätte ich dich vielleicht völlig missverstanden.
Sie können die Reihenfolge einer Liste nach dem passenden Namen erhalten Ordering. Beispielsweise,
orig = {1, 5, 4};
Part[orig, Ordering[orig]]
(*{1,4,5}*)
Für eine müssen EigensystemSie Mapsowohl über die Eigenwerte als auch über die Eigenvektoren ordnen. Eine Lösung ist (mit Ihrer Wahl der Parameter als Vertreter)
orderedEigensystem =
Module[{ord =
Ordering@
Eigenvalues[
Af /. {z -> 2, x -> 2, y -> 2, v -> 1, b -> 0.5, a -> 0.2}]},
Map[Part[#, ord] &, Eigensystem[#]] &];
orderedEigensystem[Af]
Dies gibt Ihnen das symbolische Eigensystem, das als die von Ihnen vorgeschlagene Reihenfolge geordnet ist.