Octave と Julia を使用して、大きな正方行列を持つランダム線形システムを解こうとしています。Octave と Julia の構文は非常に似ているため、次のコードを Octave シェルと Julia シェルの両方で実行します。
N = 5000;
A = rand(N, N);
b = rand(N, 1);
x = A\b;
r = norm(A*x - b)/norm(b)
Octave は 1e-12 の近傍で r を返します。一方、Julia はエラーを返します。
ERROR: stack overflow
in getrf! at linalg/lapack.jl:342
in LU at linalg/factorization.jl:134
in \ at linalg/dense.jl:518
Julia ではバックスラッシュ演算子は小さなシステム (10 x 10 など) では機能しますが、50 x 50 のシステムでは既にエラーが発生します。私が知る限り、Octave と Julia の両方が BLAS と LAPACK を使用しているため、なぜ Julia がこのタスクを実行できないのか、かなり混乱しています。誰かがこれを修正する方法を教えてもらえますか?
システムインフォメーション
- Linux ミント 13 KDE、64 ビット
- PPA から LLVM 3.2 と Clang 3.2 をインストールしました: ppa:kxstudio-team/builds
- Julia 0.2.0-2429.rb0a9ea79 をソースからコンパイル
編集
OpenBLAS 0.2.7 がリリースされたため、この問題は解決されました。Julia を再コンパイルするときは、Julia が OpenBLAS >=0.2.7 のシステム バージョンを使用しているか、Julia が OpenBLAS >=0.2.7 の独自のバージョンを内部でコンパイルしていることを確認してください。