Hello. I'm trying to solve a quadratic programming problem of the form min ||Hx - y||^2 s.t. x >= 0 and x <= t using solve.QP in the quadprog package but I'm having problems with Dmat not being positive definite, which is kinda okay since I expect it to be numerically semi-definite in most cases. As far as I'm aware the problem arises because the Goldfarb and Idnani method first solves the unconstrained problem requiring a positive definite matrix. Are there any (fast) packages that allows me to do QP with (large) semidefinite matrices? Example: t <- 100 y <- signalConvNoisy[1,] D <- crossprod(H,H) d <- crossprod(H,y) A <- cbind(rep(-1, nrow(H)), diag(ncol(H))) b0 <- c(t, rep(0, ncol(H))) sol <- solve.QP(Dmat=D, dvec = d, Amat = A, bvec = b0)$solution Error in solve.QP(Dmat = D, dvec = d, Amat = A, bvec = b0) : matrix D in quadratic function is not positive definite! Thanks in advance, Andreas Jensen
Quadratic programming with semi-definite matrix
2 messages · Andreas Jensen, Hans W Borchers
1 day later
Andreas Jensen <bentrevisor <at> gmail.com> writes:
Hello. I'm trying to solve a quadratic programming problem of the form min ||Hx - y||^2 s.t. x >= 0 and x <= t using solve.QP in the quadprog package but I'm having problems with Dmat not being positive definite, which is kinda okay since I expect it to be numerically semi-definite in most cases. As far as I'm aware the problem arises because the Goldfarb and Idnani method first solves the unconstrained problem requiring a positive definite matrix. Are there any (fast) packages that allows me to do QP with (large) semidefinite matrices? Example: t <- 100 y <- signalConvNoisy[1,] D <- crossprod(H,H) d <- crossprod(H,y) A <- cbind(rep(-1, nrow(H)), diag(ncol(H))) b0 <- c(t, rep(0, ncol(H))) sol <- solve.QP(Dmat=D, dvec = d, Amat = A, bvec = b0)$solution Error in solve.QP(Dmat = D, dvec = d, Amat = A, bvec = b0) : matrix D in quadratic function is not positive definite! Thanks in advance, Andreas Jensen
See the Optimization task view, there are several packages that promise to handle quadratic programming problems. You may also try one of the nonlinear optimization packages, they are not much slower nowadays. Your code cannot be executed as "signalConvNoisy" is unknown. Hans Werner