The `V O` (`calc-outer-product`

) [`outer`

] command applies
a given binary operator to all possible pairs of elements from two
vectors, to produce a matrix. For example, `V O *` with ‘`[a, b]`’
and ‘`[x, y, z]`’ on the stack produces a multiplication table:
‘`[[a x, a y, a z], [b x, b y, b z]]`’. Element `r`,`c` of
the result matrix is obtained by applying the operator to element `r`
of the lefthand vector and element `c` of the righthand vector.

The `V I` (`calc-inner-product`

) [`inner`

] command computes
the generalized inner product of two vectors or matrices, given a
“multiplicative” operator and an “additive” operator. These can each
actually be any binary operators; if they are ‘`*`’ and ‘`+`’,
respectively, the result is a standard matrix multiplication. Element
`r`,`c` of the result matrix is obtained by mapping the
multiplicative operator across row `r` of the lefthand matrix and
column `c` of the righthand matrix, and then reducing with the additive
operator. Just as for the standard `*` command, this can also do a
vector-matrix or matrix-vector inner product, or a vector-vector
generalized dot product.

Since `V I` requires two operators, it prompts twice. In each case,
you can use any of the usual methods for entering the operator. If you
use `$` twice to take both operator formulas from the stack, the
first (multiplicative) operator is taken from the top of the stack
and the second (additive) operator is taken from second-to-top.