The vector p-norm. If given a matrix variable, p_norm
will treat it as a vector and compute the p-norm of the concatenated columns.
p_norm(x, p = 2, axis = NA_real_, keepdims = FALSE, max_denom = 1024)
An Expression, vector, or matrix.
A number greater than or equal to 1, or equal to positive infinity.
(Optional) The dimension across which to apply the function: 1
indicates rows, 2
indicates columns, and NA
indicates rows and columns. The default is NA
.
(Optional) Should dimensions be maintained when applying the atom along an axis? If FALSE
, result will be collapsed into an \(n x 1\) column vector. The default is FALSE
.
(Optional) The maximum denominator considered in forming a rational approximation for \(p\). The default is 1024.
An Expression representing the p-norm of the input.
For \(p \geq 1\), the p-norm is given by $$\|x\|_p = \left(\sum_{i=1}^n |x_i|^p\right)^{1/p}$$ with domain \(x \in \mathbf{R}^n\). For \(p < 1, p \neq 0\), the p-norm is given by $$\|x\|_p = \left(\sum_{i=1}^n x_i^p\right)^{1/p}$$ with domain \(x \in \mathbf{R}^n_+\).
Note that the "p-norm" is actually a norm only when \(p \geq 1\) or \(p = +\infty\). For these cases, it is convex.
The expression is undefined when \(p = 0\).
Otherwise, when \(p < 1\), the expression is concave, but not a true norm.
x <- Variable(3)
prob <- Problem(Minimize(p_norm(x,2)))
result <- solve(prob)
result$value
#> [1] 0
result$getValue(x)
#> [,1]
#> [1,] 0
#> [2,] 0
#> [3,] 0
prob <- Problem(Minimize(p_norm(x,Inf)))
result <- solve(prob)
result$value
#> [1] -2.775514e-23
result$getValue(x)
#> [,1]
#> [1,] -3.231174e-27
#> [2,] 0.000000e+00
#> [3,] 0.000000e+00
if (FALSE) { # \dontrun{
a <- c(1.0, 2, 3)
prob <- Problem(Minimize(p_norm(x,1.6)), list(t(x) %*% a >= 1))
result <- solve(prob)
result$value
result$getValue(x)
prob <- Problem(Minimize(sum(abs(x - a))), list(p_norm(x,-1) >= 0))
result <- solve(prob)
result$value
result$getValue(x)
} # }