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