calc: Reducing

 
 10.8.3 Reducing
 ---------------
 
 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 ‘C-x * :’ and ‘C-x * _’ are equivalent to typing ‘C-x *
 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.
 SeeGrabbing From Buffers.