diagonalization
- To: mathgroup at smc.vnet.net
- Subject: [mg31296] diagonalization
- From: Mitsuhiro Arikawa <arikawa at mpipks-dresden.mpg.de>
- Date: Sat, 27 Oct 2001 01:08:04 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Hello,
I have one question about "diagonalization".
There is a case which the eigenvectors are not orthogonal in helmite matrix
diagonalization. In principle the eigenvectors in hermite matrix should be
orthogonal. Such a case may occur in the case there is degeneracy.
The below program is the example. To make a hermite matrix needs a long
procedure.(Now this is not so important.) Anyway this procedure makes a
hermite matrix "h", which depends on real number "t" and "alpha".
(In this exapmle, I will fix "t=1" and "alpha=0.2")
This program check hermite property and shows the inner product of the
eigenvectors. It should be unit matrix but result by mathematica is not.
I would like to know how to solve this problem and
the function "Eigensystem" is too blackbox (I do not know what happens in
the calculation). I want to know how to control the accuracy. As far as I
know, there is no option on that.
It will be helpful to provide me advices.
Sincerely yours,
Mitsuhiro Arikawa
arikawa at mpipks-dresden.mpg.de
MPIPKS-Dresden
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Off[General::spell, General::spell1];
Clear[z];
sites = 4;
particles = 2;
spinup = 1;
spindown = particles - spinup;
left = Permutations[Table[If[j <= spinup, 1, 0], {j, sites}]];
right = Permutations[Table[If[j <= spindown, 1, 0], {j, sites}]];
index = Flatten[
Table[{left[[i]], right[[j]]}, {i, Length[left]}, {j, Length[right]}],
1];
end = Length[index];
plus[k_, sigma_][arg_] := ReplacePart[arg, 1, {sigma, k}]
minus[k_, sigma_][arg_] := ReplacePart[arg, 0, {sigma, k}]
sign[k_, sigma_,
arg_] := (-1)^(spinup*(sigma - 1))*(-1)^(Sum[
arg[[sigma, j]], {j, k - 1}])
cdagger[sites + 1, sigma_][any_] := cdagger[1, sigma][any]
c[sites + 1, sigma_][any_] := c[1, sigma][any]
cdagger[k_, sigma_][0] := 0
c[k_, sigma_][0] := 0
cdagger[k_, sigma_][factor_. z[arg_]] :=
factor*(1 - arg[[sigma, k]])*sign[k, sigma, arg]*z[plus[k, sigma][arg]]
c[k_, sigma_][factor_. z[arg_]] :=
factor*arg[[sigma, k]]*sign[k, sigma, arg]*z[minus[k, sigma][arg]]
nop[k_, sigma_][0] := 0
nop[sites + 1, sigma_][any_] := nop[1, sigma][any]
nop[k_, sigma_][factor_. z[arg_]] := factor*arg[[sigma, k]]*z[arg]
n[sites + 1, sigma_][any_] := n[1, sigma][any]
n[k_, sigma_][ z[arg_]] :=
arg[[sigma, k]] (*This function n[] was modified from original *)
scalarproduct[a_, 0] := 0
scalarproduct[a_, b_ + c_] := scalarproduct[a, b] + scalarproduct[a, c]
scalarproduct[z[arg1_], factor_. z[arg2_]] := factor*If[arg1 == arg2, 1, 0]
bar[sigma_] := 3 - sigma
realspin[sisma_] := -2sigma + 3 (* 1 -> 1, 2 -> -1*)
H[vector_] = Expand[-t*Sum[
Exp[
I*realspin[sigma]*
alpha (n[k, bar[sigma]][vector] +
n[k + 1, bar[sigma]][vector])]*
cdagger[k, sigma][c[k + 1, sigma][vector]] +
Exp[-I*realspin[sigma]*
alpha (n[k, bar[sigma]][vector] +
n[k + 1, bar[sigma]][vector])]*
cdagger[k + 1, sigma][c[k, sigma][vector]], {k, sites}, {sigma,
2}]
];
h = (hlist = Table[H[z[index[[j]]]], {j, end}];
Table[scalarproduct[z[index[[i]]], hlist[[j]]], {i, end}, {j, end}])
//
FullSimplify
Conjugate[Transpose[h]] - h /. {t -> 1, alpha -> 0.2}
ex[aa_, label_Integer] := Sort[Thread[Eigensystem[
N[h /. {t -> 1, alpha -> aa}]]]][[label]]
Table[ex[0.2, j][[2]].Conjugate[ex[0.2, i][[2]]], {i, end}, {j, end}] //
Chop