The `V R` (`calc-reduce`

) [`reduce`

] command applies a given
binary operator across all the elements of a vector. A binary operator is
a function such as `+`

or `max`

which takes two arguments. For
example, reducing `+`

over a vector computes the sum of the elements
of the vector. Reducing `-`

computes the first element minus each of
the remaining elements. Reducing `max`

computes the maximum element
and so on. In general, reducing `f`

over the vector ``[a, b, c, d]'`
produces ``f(f(f(a, b), c), d)'`.

The `I V R` [`rreduce`

] command is similar to `V R` except
that works from right to left through the vector. For example, plain
`V R -` on the vector ``[a, b, c, d]'` produces ``a - b - c - d'`
but `I V R -` on the same vector produces ``a - (b - (c - d))'`,
or ``a - b + c - d'`. This "alternating sum" occurs frequently
in power series expansions.

The `V U` (`calc-accumulate`

) [`accum`

] command does an
accumulation operation. Here Calc does the corresponding reduction
operation, but instead of producing only the final result, it produces
a vector of all the intermediate results. Accumulating `+`

over
the vector ``[a, b, c, d]'` produces the vector
``[a, a + b, a + b + c, a + b + c + d]'`.

The `I V U` [`raccum`

] command does a right-to-left accumulation.
For example, `I V U -` on the vector ``[a, b, c, d]'` produces the
vector ``[a - b + c - d, b - c + d, c - d, d]'`.

As for `V M`, `V R` normally reduces a matrix elementwise. For
example, given the matrix [[a, b, c], [d, e, f]], `V R +` will
compute a + b + c + d + e + f. You can type `V R _` or
`V R :` to modify this behavior. The `V R _` [`reducea`

]
command reduces "across" the matrix; it reduces each row of the matrix
as a vector, then collects the results. Thus `V R _ +` of this
matrix would produce [a + b + c, d + e + f]. Similarly, `V R :`
[`reduced`

] reduces down; `V R : +` would produce [a + d,
b + e, c + f].

There is a third "by rows" mode for reduction that is occasionally
useful; `V R =` [`reducer`

] simply reduces the operator over
the rows of the matrix themselves. Thus `V R = +` on the above
matrix would get the same result as `V R : +`, since adding two
row vectors is equivalent to adding their elements. But `V R = *`
would multiply the two rows (to get a single number, their dot product),
while `V R : *` would produce a vector of the products of the columns.

These three matrix reduction modes work with `V R` and `I V R`,
but they are not currently supported with `V U` or `I V U`.

The obsolete reduce-by-columns function, `reducec`

, is still
supported but there is no way to get it through the `V R` command.

The commands `M-# :` and `M-# _` are equivalent to typing
`M-# r` to grab a rectangle of data into Calc, and then typing
`V R : +` or `V R _ +`, respectively, to sum the columns or
rows of the matrix. See section Grabbing from Other Buffers.

Go to the first, previous, next, last section, table of contents.