Many thanks, Steve! Unsorted row indices were the issue. I mistakenly assumed that calling sparse() sorted the indices for me.
On Monday, August 22, 2016 at 11:24:19 PM UTC-4, [email protected] wrote: > > I've been using the cholmod routines recently also in 0.4.6 (Windows 64) > and have never seen this error. The routine cholmod_check_sparse seems to > be in source code file cholmod_check.c of the SuiteSparse source code, and > it doesn't seem to do much except check that the row indices are in > increasing order for each column and that all indices are in range. Is it > possible that your matrix has been corrupted and has row indices out of > order or out of range? > > > > On Monday, August 22, 2016 at 9:43:59 PM UTC-4, Dominique Orban wrote: >> >> I'm trying to solve a least-squares problem using sparse QR, but: >> >> julia> size(A) >> (3140,1988) >> >> julia> nnz(A) >> 8510 >> >> julia> size(b) >> (3140,) >> >> julia> typeof(A) >> SparseMatrixCSC{Float64,Int64} >> >> julia> A \ b >> ERROR: Base.SparseMatrix.CHOLMOD.CHOLMODException("") >> in convert at sparse/cholmod.jl:867 >> in factorize at sparse/linalg.jl:854 >> in \ at linalg/generic.jl:326 >> >> >> The matrix A is rank deficient, but I don't think that's the source of >> the problem. I get the same exception if I regularize the problem. >> >> This is with Julia 0.4.6. The relevant portion of sparse/cholmod.jl is: >> >> >> 856 function convert{Tv<:VTypes}(::Type{Sparse}, A::SparseMatrixCSC{Tv, >> SuiteSparse_long}, stype::Integer) >> 857 o = allocate_sparse(A.m, A.n, length(A.nzval), true, true, stype >> , Tv) >> 858 s = unsafe_load(o.p) >> 859 for i = 1:length(A.colptr) >> 860 unsafe_store!(s.p, A.colptr[i] - 1, i) >> 861 end >> 862 for i = 1:length(A.rowval) >> 863 unsafe_store!(s.i, A.rowval[i] - 1, i) >> 864 end >> 865 unsafe_copy!(s.x, pointer(A.nzval), length(A.nzval)) >> 866 >> 867 @isok check_sparse(o) >> 868 >> 869 return o >> 870 end >> >> >> How can I find out more about what's gone wrong? >> >
