基本上我试图找到矩阵的特征值,大约需要12个小时。当它完成时,它说它找不到所有的特征向量(实际上几乎没有),而且我对它找到的那些特征向量持怀疑态度。我所能做的就是发布我的代码,我希望有人可以向我提出一些建议。我对mathematica不太熟悉,也许运行时间慢,结果不好与我有关,而不是mathematica的能力。感谢任何回复的人,我真的很感激。
cutoff = 500; (* set a cutoff for the infinite series *)
numStates = cutoff + 1; (* set the number of excited states to be printed *)
If[numStates > 10, numStates = 10];
$RecursionLimit = cutoff + 256; (* Increase the recursion limit to allow for the specified cutoff *)
(* set the mass of the constituent quarks *)
m1 := mS; (* just supposed to be a constant *)
m2 := 0;
(* construct the hamiltonian *)
h0[n_,m_] := 4 Min[n,m] * ((-1)^(n+m) * m1^2 + m2^2);
v[0,m_] := 0;
v[n_,0] := 0;
v[n_,1] := (8/n) * ((1 + (-1)^(n + 1)) / 2);
v[n_,m_] := v[n - 1, m - 1] * (m/(m - 1)) + (8 m/(n + m - 1))*((1 + (-1)^(n + m))/2);
h[n_,m_] := h0[n,m] + v[n,m];
(* construct the matrix from the hamiltonian *)
mat = Table[h[n,m], {n, 0, cutoff}, {m, 0, cutoff}] // FullSimplify;
(* find the eigenvalues and eigenvectors, then reverse the order *)
PrintTemporary["Finding the eigenvalues"];
{vals, vecs} = Eigensystem[N[mat]] // FullSimplify;
$RecursionLimit = 256; (* Put the recursion limit back to the default *)
我的代码还有一些,但这是真正放慢速度的重点。我应该提到的一点是,如果我将m1和m2都设置为零,我实际上没有任何问题,但将m1设置为常量会使一切都变得地狱。
答案 0 :(得分:9)
你的问题是常数mS
仍然是象征性的。这意味着Mathematica试图分析求解特征值而不是数值。如果您的问题允许您为mS
选择数值,则应该这样做。
另一个不相关的问题是,您使用的是递归公式,并且您希望在以下行中使用例如memoization
v[n_, m_] := v[n, m] = v[n - 1, m - 1]*(m/(m - 1))
+ (8 m/(n + m - 1))*((1 + (-1)^(n + m))/2);
额外的v[n, m] =
存储了给定n
和m
的值,因此您不必每次都v[0,0]
递归到h[n, m]
Table[]
在{{1}}中调用。
用这两件事来照顾我的旧核心2 duo花了不到一分钟来做特征值。
答案 1 :(得分:3)
这是蒂莫回答的后续行动。我想展示一个数字,所以我把它作为答案而不是评论。
假设您要查找具有501 x 501符号元素的矩阵的特征值。 [BTW你称之为常数,但这是用词不当。常量只是定义的,带有名称的固定值。你在蒂莫答案的评论中所描述的是一个象征性的变量。]
很高兴看到完全符号矩阵对特征值计算的作用。这是一个2 x 2矩阵:
Array[f, {2, 2}] // Eigenvalues
(* ==>
{1/2 (f[1, 1]+f[2, 2]-Sqrt[f[1, 1]^2+4f[1, 2] f[2, 1]-2 f[1, 1] f[2, 2]+f[2, 2]^2]),
1/2(f[1, 1]+f[2, 2]+Sqrt[f[1, 1]^2+4 f[1, 2] f[2, 1]-2 f[1, 1] f[2, 2]+f[2, 2]^2])}
*)
它占用Array[f, {2, 2}] // Eigenvalues//ByteCount
= 3384字节。这种爆炸速度非常快:7x7解决方案已占用70 MB(找到这个解决方案需要几分钟)。实际上,在矩阵大小和字节数之间存在很好的关系:
拟合函数为:字节数= E ^(2.2403067075863197 + 2.2617380321848457 x矩阵大小)。
如您所见,在宇宙结束之前不会找到501 x 501符号矩阵的特征值。
[BTW什么是矩阵的占有形式?]