MathGroup Archive 2001

[Date Index] [Thread Index] [Author Index]

Search the Archive

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





  • Prev by Date: Re: SplineFit - Parametrization ?
  • Next by Date: MathML Conference 2002: Call For Papers
  • Previous by thread: Re: Can NDSolve find the other solution???
  • Next by thread: Re: diagonalization