Skip to content

Quad Form Fails with Sparse Matrix #725

@RoyiAvital

Description

@RoyiAvital

It seems that Convex.quadform() fails with sparse matrices even with assume_psd = true:

using ECOS;
using SparseArrays;

function SolveQuadForm( mP :: AbstractMatrix{T}, vQ :: Vector{T} ) where {T <: AbstractFloat}

    dataDim = size(mP, 1);

    vX = Convex.Variable(dataDim);
    sConvProb = minimize( T(0.5) * Convex.quadform(vX, mP; assume_psd = true) + Convex.dot(vQ, vX) );
    solve!(sConvProb, ECOS.Optimizer; silent = true);
    
    return vec(vX.value);
    
end

dataDim = 10;

mP = sprand(dataDim, dataDim, 0.5);
mP = (mP' * mP) + 0.5 * I;
mP = 0.5 * (mP + mP');
vQ = randn(dataDim);

vX = SolveQuadForm(mP, vQ);

I get: ERROR: MethodError: no method matching eigen!(::Hermitian{Float64, SparseMatrixCSC{Float64, Int64}}; sortby::Nothing).
Which is from:

P = sqrt(LinearAlgebra.Hermitian(factor * A))

Speculating it tries to do Eigen Decomposition for the root of the matrix which fails for sparse matrix.
Any idea about a temporary bypass?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions