R/156_reductions_dcp2cone_canonicalizers_lambda_sum_largest_canon.R

Defines functions lambda_sum_largest_canon

#####
## DO NOT EDIT THIS FILE!! EDIT THE SOURCE INSTEAD: rsrc_tree/reductions/dcp2cone/canonicalizers/lambda_sum_largest_canon.R
#####

## CVXPY SOURCE: reductions/dcp2cone/canonicalizers/lambda_sum_largest_canon.py
## lambda_sum_largest(X, k) -> k * lambda_max(X - Z) + trace(Z), Z is PSD
## CRITICAL: uses expr@args[[1L]] (original X), NOT args[[1L]]


lambda_sum_largest_canon <- function(expr, args, solver_context = NULL) {
  X <- expr@args[[1L]]  ## original X, NOT canonicalized args
  k <- expr@k
  n <- X@shape[1L]
  Z <- Variable(c(n, n), PSD = TRUE)
  ## Reuse lambda_max_canon on (X - Z)
  result <- lambda_max_canon(expr, list(X - Z))
  obj <- result[[1L]]
  constr <- result[[2L]]
  ## k * lambda_max(X - Z) + trace(Z)
  obj <- Constant(as.numeric(k)) * obj + matrix_trace(Z)
  list(obj, constr)
}

method(dcp_canonicalize, LambdaSumLargest) <- lambda_sum_largest_canon
method(has_dcp_canon, LambdaSumLargest) <- function(expr) TRUE

Try the CVXR package in your browser

Any scripts or data that you put into this service are public.

CVXR documentation built on March 6, 2026, 9:10 a.m.