假设在CVXR中我有一个定义A <- Variable(3,3),并且想要最大化函数“非对角线元素的平方根的和”。但是,如果我编写类似sum(sqrt(A))-sum(sqrt(diag(A)))的代码,第一个函数是凹的,但是第二个函数也是凹的,这不符合DCP Ruleset,因此被CVX引擎拒绝。然而,很明显,这个函数是凹的--我们只是删除了sum中的一些元素,没有办法说“请考虑非对角线元素”。可以做些什么呢?
发布于 2019-07-18 08:39:28
你有没有试过把第二项(下面的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)))https://stackoverflow.com/questions/56979613
复制相似问题