-
Notifications
You must be signed in to change notification settings - Fork 123
Closed
Description
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:
Convex.jl/src/reformulations/quadform.jl
Line 124 in 0843b60
| 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?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels