以下代码给出了某个大矩阵的第一个k特征值。由于矩阵的对称性,特征值成对,一个为正,另一个为负,具有相同的绝对值。如果我使用精确矩阵运行代码而不使用稀疏版本,情况确实如此。然而,当我使它们稀疏时,得到的特征值似乎丢失了符号信息,因为现在这些对可以是负的,或者都是正的,这取决于我放在“nspins”(控制矩阵的大小)上的数字。变量“sparse”控制我是否使用稀疏矩阵。
这个问题给我带来了相当大的麻烦。任何人都可以告诉我为什么计算的稀疏版本会给出错误的符号,以及如何修复它?
sparse = 1; (*Parameter that controls whether I will use sparse \
matrices, 0 means not sparse, 1 means sparse*)
(*Base matrices of my big matrix*)
ox = N[{{0, 1}, {1, 0}}];
oz = N[{{1, 0}, {0, -1}}];
id = N[{{1, 0}, {0, 1}}];
(*Transformation into sparse whether desired*)
If[sparse == 1,
ox = SparseArray[ox];
oz = SparseArray[oz];
id = SparseArray[id];
]
(*Dimension of the big matrix, must be even*)
nspins = 8;
(*Number of eigenvalues computed*)
neigenv = 4;
(*Algorithm to create big matrices*)
Do[
Do[
If[j == i, mata = ox; matc = oz;, mata = id; matc = id;];
If[j == 1,
o[1, i] = mata;
o[3, i] = matc;
,
o[1, i] = KroneckerProduct[o[1, i], mata];
o[3, i] = KroneckerProduct[o[3, i], matc];
];
, {j, 1, nspins}];
, {i, 1, nspins}];
(*Sum of big matrices*)
ham = Sum[o[1, i].o[1, i + 1], {i, 1, nspins - 1}] +
o[1, nspins].o[1, 1] + 0.5*Sum[o[3, i], {i, 1, nspins}];
(*Print the desired eigenvalues*)
Do[Print [Eigenvalues[ham, k][[k]]], {k, 1, neigenv}];