基本的に私は行列の固有値を見つけようとしていますが、それには約12時間かかります。それが終わると、それはすべての固有ベクトル(実際にはほんの少し)を見つけることができなかったと言います、そして、私はそれが見つけたものに懐疑的です。私が本当にやることができるのは自分のコードを投稿することだけです。誰かが私にいくつかの提案をすることができたらいいと思っています。私はmathematicaにはあまり経験がなく、おそらく実行時間が遅く、悪い結果は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を定数に設定するとすべてが地獄になります。
それはおそらく時間のかなりのチャンクが(ティモが提案されているようにもメモ化して)行列アップを構築費やされていることを指摘する価値があります。'RSolve'はあなたの再帰的な' v'の定義のための明示的な形式を与えますが、未定義の関数を(あなたの初期条件を使って)固定することは分岐の切断などによって複雑になるかもしれません。見る。 – acl