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