使用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
答案 0 :(得分:1)
来自快速Google搜索的ARPACK错误1似乎是“最大迭代次数”。因此,您的矩阵必须使得ARPACK的算法无法找到特征值。
从discussions elsewhere开始,似乎可以通过删除度为零(或通常为零行)的顶点,或通过将矩阵拆分为连通分量(即块)并找到特征值来解决问题每个区块分开。