www.delorie.com/gnu/docs/calc/calc_235.html search
GNU Emacs Calc 2.02 Manual

 [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [ ? ]

### 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 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 15.3 Grabbing from Other Buffers.

 [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [ ? ]

 webmaster delorie software   privacy Copyright © 2003   by The Free Software Foundation Updated Jun 2003