Matrix Mathematica中稀疏矩阵的问题

Matrix Mathematica中稀疏矩阵的问题,matrix,wolfram-mathematica,sparse-matrix,Matrix,Wolfram Mathematica,Sparse Matrix,下面的代码给出了某个大矩阵的前k个特征值。由于矩阵的对称性,特征值成对出现,一个为正,另一个为负,具有相同的绝对值。如果我使用精确的矩阵运行代码,而不使用稀疏版本,则情况确实如此。然而,当我使它们稀疏时,得到的特征值似乎丢失了符号信息,因为现在这些对可以是负的,也可以是正的,这取决于我在控制矩阵大小的NSPIN上放置的数量。变量稀疏控制是否使用稀疏矩阵 这个问题给我带来了相当大的麻烦。有人能告诉我为什么稀疏版本的计算给出了错误的符号,以及如何修复它吗 sparse = 1; (*Paramete

下面的代码给出了某个大矩阵的前k个特征值。由于矩阵的对称性,特征值成对出现,一个为正,另一个为负,具有相同的绝对值。如果我使用精确的矩阵运行代码,而不使用稀疏版本,则情况确实如此。然而,当我使它们稀疏时,得到的特征值似乎丢失了符号信息,因为现在这些对可以是负的,也可以是正的,这取决于我在控制矩阵大小的NSPIN上放置的数量。变量稀疏控制是否使用稀疏矩阵

这个问题给我带来了相当大的麻烦。有人能告诉我为什么稀疏版本的计算给出了错误的符号,以及如何修复它吗

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}];

我得到了与稀疏值无关的相同结果,即成对的特征值,一个为正,另一个为负。顺便说一句,你的问题在Mathematica社区会得到更多的关注。