CVXR: адресация недиагональных элементов матрицы переменных - PullRequest
0 голосов
/ 11 июля 2019

Предположим, что в CVXR у меня есть определение A <- Variable(3,3) и я бы хотел максимизировать функцию "сумма квадратных корней недиагональных элементов".Однако, если я напишу что-то вроде sum(sqrt(A))-sum(sqrt(diag(A))), причем первая функция вогнутая, но и вторая тоже, это не соответствует DCP Ruleset и поэтому отклоняется механизмом CVX.Однако очевидно, что функция вогнута - мы просто удалили некоторые элементы из суммы, и нет способа сказать «рассмотрите недиагональные элементы, пожалуйста».Что можно сделать?

1 Ответ

0 голосов
/ 18 июля 2019

Вы пытались написать второй член (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)))

...