Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
假设在CVXR我有一个定义A <- Variable(3,3) 并且想要最大化函数“非对角元素的平方根之和”。但是,如果我写类似的东西 sum(sqrt(A))-sum(sqrt(diag(A))),第一个函数是凹的,但第二个也是,这不符合,DCP Ruleset因此被CVX引擎拒绝。然而,很明显这个函数是凹的——我们只是简单地删除了总和中的一些元素,没有办法说“请考虑非对角元素”。可以做什么?
CVXR
A <- Variable(3,3)
sum(sqrt(A))-sum(sqrt(diag(A)))
DCP Ruleset
CVX
您是否尝试将第二项(term2如下)写为实际对角线的总和?例如,
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)))