Next: Manipulating Vectors, Previous: Building Vectors, Up: Matrix Functions

The `v r` (`calc-mrow`

) [`mrow`

] command extracts one row of
the matrix on the top of the stack, or one element of the plain vector on
the top of the stack. The row or element is specified by the numeric
prefix argument; the default is to prompt for the row or element number.
The matrix or vector is replaced by the specified row or element in the
form of a vector or scalar, respectively.

With a prefix argument of `C-u` only, `v r` takes the index of
the element or row from the top of the stack, and the vector or matrix
from the second-to-top position. If the index is itself a vector of
integers, the result is a vector of the corresponding elements of the
input vector, or a matrix of the corresponding rows of the input matrix.
This command can be used to obtain any permutation of a vector.

With `C-u`, if the index is an interval form with integer components,
it is interpreted as a range of indices and the corresponding subvector or
submatrix is returned.

Subscript notation in algebraic formulas (‘`a_b`’) stands for the
Calc function `subscr`

, which is synonymous with `mrow`

.
Thus, ‘`[x, y, z]_k`’ produces ‘`x`’, ‘`y`’, or ‘`z`’ if
‘`k`’ is one, two, or three, respectively. A double subscript
(‘`M_i_j`’, equivalent to ‘`subscr(subscr(M, i), j)`’) will
access the element at row ‘`i`’, column ‘`j`’ of a matrix.
The `a _` (`calc-subscript`

) command creates a subscript
formula ‘`a_b`’ out of two stack entries. (It is on the `a`
“algebra” prefix because subscripted variables are often used
purely as an algebraic notation.)

Given a negative prefix argument, `v r` instead deletes one row or
element from the matrix or vector on the top of the stack. Thus
`C-u 2 v r` replaces a matrix with its second row, but `C-u -2 v r`
replaces the matrix with the same matrix with its second row removed.
In algebraic form this function is called `mrrow`

.

Given a prefix argument of zero, `v r` extracts the diagonal elements
of a square matrix in the form of a vector. In algebraic form this
function is called `getdiag`

.

The `v c` (`calc-mcol`

) [`mcol`

or `mrcol`

] command is
the analogous operation on columns of a matrix. Given a plain vector
it extracts (or removes) one element, just like `v r`. If the
index in `C-u v c` is an interval or vector and the argument is a
matrix, the result is a submatrix with only the specified columns
retained (and possibly permuted in the case of a vector index).

To extract a matrix element at a given row and column, use `v r` to
extract the row as a vector, then `v c` to extract the column element
from that vector. In algebraic formulas, it is often more convenient to
use subscript notation: ‘`m_i_j`’ gives row ‘`i`’, column ‘`j`’
of matrix ‘`m`’.

The `v s` (`calc-subvector`

) [`subvec`

] command extracts
a subvector of a vector. The arguments are the vector, the starting
index, and the ending index, with the ending index in the top-of-stack
position. The starting index indicates the first element of the vector
to take. The ending index indicates the first element *past* the
range to be taken. Thus, ‘`subvec([a, b, c, d, e], 2, 4)`’ produces
the subvector ‘`[b, c]`’. You could get the same result using
‘`mrow([a, b, c, d, e], [2 .. 4))`’.

If either the start or the end index is zero or negative, it is
interpreted as relative to the end of the vector. Thus
‘`subvec([a, b, c, d, e], 2, -2)`’ also produces ‘`[b, c]`’. In
the algebraic form, the end index can be omitted in which case it
is taken as zero, i.e., elements from the starting element to the
end of the vector are used. The infinity symbol, `inf`

, also
has this effect when used as the ending index.

With the Inverse flag, `I v s` [`rsubvec`

] removes a subvector
from a vector. The arguments are interpreted the same as for the
normal `v s` command. Thus, ‘`rsubvec([a, b, c, d, e], 2, 4)`’
produces ‘`[a, d, e]`’. It is always true that `subvec`

and
`rsubvec`

return complementary parts of the input vector.

See Selecting Subformulas, for an alternative way to operate on vectors one element at a time.