0

假设在CVXR我有一个定义A <- Variable(3,3) 并且想要最大化函数“非对角元素的平方根之和”。但是,如果我写类似的东西 sum(sqrt(A))-sum(sqrt(diag(A))),第一个函数是凹的,但第二个也是,这不符合,DCP Ruleset因此被CVX引擎拒绝。然而,很明显这个函数是凹的——我们只是简单地删除了总和中的一些元素,没有办法说“请考虑非对角元素”。可以做什么?

4

1 回答 1

0

您是否尝试将第二项(term2如下)写为实际对角线的总和?例如,

e <- function(i, n = 3) {
  res <- numeric(n)
  res[i] <- 1
  res
}
diag_elem <- function(A, i) quad_form(e(i), A)
diags <- lapply(seq_len(3), diag_elem, A = A)
term2 <- sum(sqrt(do.call(vstack, diags)))

于 2019-07-18T00:39:28.120 回答