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.