在Julia中,大型稀疏矩阵的eigs()函数出错

时间:2016-11-26 06:01:03

标签: julia sparse-matrix eigenvalue

使用Julia,我使用spzeros()函数创建了一个稀疏矩阵,用一些句子初始化矩阵,并尝试计算它的特征值。然而,该函数仅适用于小的稀疏矩阵(n <800),对于稍大一点的矩阵,我有一些错误。

代码:

ns = 400 # 800
H = spzeros(Complex128, ns, ns)
#... initialization 
E, x = eigs(H)

最后一句后的错误信息:

  

LoadError:Base.LinAlg.ARPACKException(“unspecified ARPACK error:1”)   在[7]中加载时,从第1行开始的表达式

     

在aupd_wrapper(:: Type {T},:: Base.LinAlg。#matvecA!#69 {SparseMatrixCSC {Complex {Float64},Int64}},:: Base.LinAlg。## 63#70,:: Base.LinAlg。## 64#71,:: Int64,:: Bool,:: Bool,:: String,:: Int64,:: Int64,:: String,:: Float64,:: Int64,:: Int64, :: Array {Complex {Float64},1})at。\ linalg \ arpack.jl:53    在#_eigs#62(:: Int64,:: Int64,:: Symbol,:: Float64,:: Int64,:: Void,:: Array {Complex {Float64},1},:: Bool,:: Base。 LinAlg。#_ eigs,:: SparseMatrixCSC {Complex {Float64},Int64},:: UniformScaling {Int64})at。\ linalg \ arnoldi.jl:268    in(:: Base.LinAlg。#kw ## _ eigs)(:: Array {Any,1},:: Base.LinAlg。#_ eigs,:: SparseMatrixCSC {Complex {Float64},Int64},:: UniformScaling {Int64 })at。\:0    在#eigs#55(:: Array {Any,1},:: Function,:: SparseMatrixCSC {Complex {Float64},Int64},:: UniformScaling {Int64})at。\ linalg \ arnoldi.jl:78    in(:: Base.LinAlg。#kw ## eigs)(:: Array {Any,1},:: Base.LinAlg。#eigs,:: SparseMatrixCSC {Complex {Float64},Int64},:: UniformScaling {Int64 })at。\:0    在#eigs#59(:: Array {Any,1},:: Function,:: SparseMatrixCSC {Complex,Int64},:: UniformScaling {Int64})at。\ linalg \ arnoldi.jl:85    in(:: Base.LinAlg。#kw ## eigs)(:: Array {Any,1},:: Base.LinAlg。#eigs,:: SparseMatrixCSC {Complex,Int64},:: UniformScaling {Int64})at at \:0    在#eigs#54(:: Array {Any,1},:: Function,:: SparseMatrixCSC {Complex,Int64})中。\ linalg \ arnoldi.jl:77    in(:: Base.LinAlg。#kw ## eigs)(:: Array {Any,1},:: Base.LinAlg。#eigs,:: SparseMatrixCSC {Complex,Int64})at。\:0

1 个答案:

答案 0 :(得分:1)

来自快速Google搜索的ARPACK错误1似乎是“最大迭代次数”。因此,您的矩阵必须使得ARPACK的算法无法找到特征值。

discussions elsewhere开始,似乎可以通过删除度为零(或通常为零行)的顶点,或通过将矩阵拆分为连通分量(即块)并找到特征值来解决问题每个区块分开。