### 17.4 Sums and Products

sum (x)
sum (x, dim)
sum (…, "native")
sum (…, "double")
sum (…, "extra")

  Sum of elements along dimension dim.

  If dim is omitted, it defaults to the first non-singleton dimension.

  The optional `"type"` input determines the class of the variable used for calculations. By default, operations on floating point inputs (double or single) are performed in their native data type, while operations on integer, logical, and character data types are performed using doubles. If the argument `"native"` is given, then the operation is performed in the same type as the original argument.

  For example:

      sum ([true, true])
         ⇒ 2
      sum ([true, true], "native")
         ⇒ true

  If `"double"` is given the sum is performed in double precision even for single precision inputs.

  For double precision inputs, the `"extra"` option will use a more accurate algorithm than straightforward summation. For single precision inputs, `"extra"` is the same as `"double"`. For all other data type `"extra"` has no effect.

  See also: cumsum, sumsq, prod.

prod (x)
prod (x, dim)
prod (…, "native")
prod (…, "double")

  Product of elements along dimension dim.

  If dim is omitted, it defaults to the first non-singleton dimension.

  The optional `"type"` input determines the class of the variable used for calculations. If the argument `"native"` is given, then the operation is performed in the same type as the original argument, rather than the default double type.

  For example:

      prod ([true, true])
         ⇒ 1
      prod ([true, true], "native")
         ⇒ true

  On the contrary, if `"double"` is given, the operation is performed in double precision even for single precision inputs.

  See also: cumprod, sum.

cumsum (x)
cumsum (x, dim)
cumsum (…, "native")
cumsum (…, "double")

  Cumulative sum of elements along dimension dim.

  If dim is omitted, it defaults to the first non-singleton dimension. For example:

      cumsum ([1, 2; 3, 4; 5, 6])
         ⇒  1   2
             4   6
             9  12

  See `sum` for an explanation of the optional parameters `"native"` and `"double"`.

  See also: sum, cumprod.

cumprod (x)
cumprod (x, dim)

  Cumulative product of elements along dimension dim.

  If dim is omitted, it defaults to the first non-singleton dimension. For example:

      cumprod ([1, 2; 3, 4; 5, 6])
         ⇒  1   2
             3   8
            15  48

  See also: prod, cumsum.

sumsq (x)
sumsq (x, dim)

  Sum of squares of elements along dimension dim.

  If dim is omitted, it defaults to the first non-singleton dimension.

  This function is conceptually equivalent to computing

      sum (x .* conj (x), dim)

  but it uses less memory and avoids calling `conj` if x is real.

  See also: sum, prod.