lsEigenvalue[H_] := Module[{emax, emaxspace, emin, eminspace, es},
es = Sort[Eigenvalues[H], Re[#1] < Re[#2] &];
emin = First[es];
emax = Last[es];
eminspace =
Orthogonalize[NullSpace[H - emin*IdentityMatrix[Length[H]]];
emaxspace =
Orthogonalize[NullSpace[H - emax*IdentityMatrix[Length[H]]];
Return[{{emin, eminspace}, {emax, emaxspace}}]
]
plotNR[A_, n_] :=
Module[{t = 0., td = 2 \[Pi]/n, Ht, Kt, points = {},
segment = {} , emax , emaxspace, emin, eminspace, vp, vm, Q,
R},
PrintTemporary[ProgressIndicator[Dynamic[t], {0, 2 \[Pi]}]];
While[t < 2 \[Pi],
Ht = (Exp[-I t]*A + Exp[I t]*ConjugateTranspose[A])/2;
{emax, emaxspace} = Last[lsEigenvalue[Ht]];
which[(* One dimensional eigenspace *)
Length[emaxspace] == 1,
vp = First[emaxspace];
AppendTo[points, Conjugate[vp].A.vp],
Length[emaxspace] > 1,
Kt = (Exp[-I t]*A - Exp[I t]*ConjugateTranspose[A])/(2 I);
Q = Transpose[emaxspace];
R = ConjugateTranspose[Q].Kt.Q;
{{emin, eminspace}, {emax, emaxspace}} = lsEigenvalue[R];
vp = Q.First[emaxspace];
vm = Q.First[eminspace];
AppendTo[segments, {Conjugate[vm].A.vm, Conjugate[vp].A.vp}],
(* Fail *)
Ture,
Print["Error"]
];
t = t + td;
];
Return {DeleteDuplicates[points], DeleteDuplicates[segments]}]
]
此代码如何输入矩阵进行计算?