The (weighted) geometric mean of vector \(x\) with optional powers given by \(p\).

geo_mean(x, p = NA_real_, max_denom = 1024)

Arguments

x

An Expression or vector.

p

(Optional) A vector of weights for the weighted geometric mean. Defaults to a vector of ones, giving the unweighted geometric mean \(x_1^{1/n} \cdots x_n^{1/n}\).

max_denom

(Optional) The maximum denominator to use in approximating p/sum(p) with w. If w is not an exact representation, increasing max_denom may offer a more accurate representation, at the cost of requiring more convex inequalities to represent the geometric mean. Defaults to 1024.

Value

An Expression representing the geometric mean of the input.

Details

$$\left(x_1^{p_1} \cdots x_n^{p_n} \right)^{\frac{1}{\mathbf{1}^Tp}}$$

The geometric mean includes an implicit constraint that \(x_i \geq 0\) whenever \(p_i > 0\). If \(p_i = 0, x_i\) will be unconstrained. The only exception to this rule occurs when \(p\) has exactly one nonzero element, say \(p_i\), in which case geo_mean(x,p) is equivalent to \(x_i\) (without the nonnegativity constraint). A specific case of this is when \(x \in \mathbf{R}^1\).

Examples

x <- Variable(2)
cost <- geo_mean(x)
prob <- Problem(Maximize(cost), list(sum(x) <= 1))
result <- solve(prob)
result$value
#> [1] 0.5
result$getValue(x)
#>      [,1]
#> [1,]  0.5
#> [2,]  0.5

if (FALSE) {
  x <- Variable(5)
  p <- c(0.07, 0.12, 0.23, 0.19, 0.39)
  prob <- Problem(Maximize(geo_mean(x,p)), list(p_norm(x) <= 1))
  result <- solve(prob)
  result$value
  result$getValue(x)
}