R/216_reductions_dgp2dcp_canonicalizers_pf_eigenvalue_canon.R

Defines functions .dgp_pf_eigenvalue_canon

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

## CVXPY SOURCE: reductions/dgp2dcp/canonicalizers/pf_eigenvalue_canon.py
## DGP canonicalizer for PfEigenvalue: spectral radius rho(X)
##
## rho(X) <= lambda iff exists v s.t. X*v <= lambda*v
## In log-space: mulexpression_canon(X, v) <= mul_canon(lambda, v)

.dgp_pf_eigenvalue_canon <- function(expr, args) {
  X <- args[[1L]]
  n <- expr@args[[1L]]@shape[1L]

  ## New log-space variables (free, since they represent logs)
  lambd <- Variable()
  v <- Variable(n)

  ## lhs = X %*% v in log-space
  lhs_expr <- X %*% v
  lhs <- .dgp_mulexpression_canon(lhs_expr, lhs_expr@args)[[1L]]

  ## rhs = lambd * v in log-space
  rhs_expr <- lambd * v
  rhs <- .dgp_mul_canon(rhs_expr, rhs_expr@args)[[1L]]

  list(lambd, list(lhs <= rhs))
}

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.