Mathematica中稀疏矩阵的问题

时间:2014-12-12 16:18:37

标签: matrix wolfram-mathematica sparse-matrix

以下代码给出了某个大矩阵的第一个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}];

0 个答案:

没有答案