This class represents the vector p-norm.

```
Pnorm(x, p = 2, axis = NA_real_, keepdims = FALSE, max_denom = 1024)
# S4 method for Pnorm
allow_complex(object)
# S4 method for Pnorm
to_numeric(object, values)
# S4 method for Pnorm
validate_args(object)
# S4 method for Pnorm
sign_from_args(object)
# S4 method for Pnorm
is_atom_convex(object)
# S4 method for Pnorm
is_atom_concave(object)
# S4 method for Pnorm
is_atom_log_log_convex(object)
# S4 method for Pnorm
is_atom_log_log_concave(object)
# S4 method for Pnorm
is_incr(object, idx)
# S4 method for Pnorm
is_decr(object, idx)
# S4 method for Pnorm
is_pwl(object)
# S4 method for Pnorm
get_data(object)
# S4 method for Pnorm
name(x)
# S4 method for Pnorm
.domain(object)
# S4 method for Pnorm
.grad(object, values)
# S4 method for Pnorm
.column_grad(object, value)
```

- x
An Expression representing a vector or matrix.

- p
A number greater than or equal to 1, or equal to positive infinity.

- axis
(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`

.- keepdims
(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`

.- max_denom
(Optional) The maximum denominator considered in forming a rational approximation for \(p\). The default is 1024.

- object
A Pnorm object.

- values
A list of numeric values for the arguments

- idx
An index into the atom.

- value
A numeric value

If given a matrix variable, `Pnorm`

will treat it as a vector and compute the p-norm of the concatenated columns.

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.

`allow_complex(Pnorm)`

: Does the atom handle complex numbers?`to_numeric(Pnorm)`

: The p-norm of`x`

.`validate_args(Pnorm)`

: Check that the arguments are valid.`sign_from_args(Pnorm)`

: The atom is positive.`is_atom_convex(Pnorm)`

: The atom is convex if \(p \geq 1\).`is_atom_concave(Pnorm)`

: The atom is concave if \(p < 1\).`is_atom_log_log_convex(Pnorm)`

: Is the atom log-log convex?`is_atom_log_log_concave(Pnorm)`

: Is the atom log-log concave?`is_incr(Pnorm)`

: The atom is weakly increasing if \(p < 1\) or \(p > 1\) and`x`

is positive.`is_decr(Pnorm)`

: The atom is weakly decreasing if \(p > 1\) and`x`

is negative.`is_pwl(Pnorm)`

: The atom is not piecewise linear unless \(p = 1\) or \(p = \infty\).`get_data(Pnorm)`

: Returns`list(p, axis)`

.`name(Pnorm)`

: The name and arguments of the atom.`.domain(Pnorm)`

: Returns constraints describing the domain of the node`.grad(Pnorm)`

: Gives the (sub/super)gradient of the atom w.r.t. each variable`.column_grad(Pnorm)`

: Gives the (sub/super)gradient of the atom w.r.t. each column variable

`x`

An Expression representing a vector or matrix.

`p`

A number greater than or equal to 1, or equal to positive infinity.

`max_denom`

The maximum denominator considered in forming a rational approximation for \(p\).

`axis`

(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`

.`keepdims`

(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`

.`.approx_error`

(Internal) The absolute difference between \(p\) and its rational approximation.

`.original_p`

(Internal) The original input \(p\).