我正在尝试使用 Octave 和 Julia 解决具有大方系统矩阵的随机线性系统。因为 Octave 和 Julia 的语法非常相似,所以我在 Octave shell 和 Julia shell 中运行以下代码:
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 Mint 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 版本。