Vector space functions for STACK
STACK has a contributed library for vector space functions. To use this library you must load it into the question variables.
- To use the latest code from github:
stack_include_contrib("vectorspaces.mac");
- Loading this library automatically declares
stack_linear_algebra_declare(true);
to provide context. See the documentation on the core linear algebra for more information.
This page contains reference documentation on functions in this library.
Student vector input
vectorspaces.mac
allows students to use the notation c()
and r()
to easily input column or row vectors. For more information, see the page on vectors
Unit vectors and scalar products
vectorspaces.mac
provides a few functions to manipulate vectors.
unit_vecp(ex)
is a predicate function that tests whether a given input is a unit vector.ex
must be a matrix (notc
orr
) with exactly one row or one column.
The following functions have the optional argument sp
. If this argument is omitted then the standard inner product (dot product) is used. Otherwise, sp
must be the name of a function that performs a scalar product of two vectors; i.e. it takes two vector inputs and outputs a scalar. If given, this scalar product function will be used in place of the standard inner product.
proj(u, v, [sp])
will compute the projection ofu
ontov
using scalar productsp
(dot product if omitted).orthogonalize(L, [sp])
will orthogonalize a list of vectorsL
with respect to scalar productsp
(dot product if omitted)normalize(L, [sp])
will normalize a list of vectorsL
with respect to scalar productsp
(dot product if omitted)
Equivalence functions
lin_indp(ex)
is a predicate function that tests whether a set of vectors is linearly independent. It can take many forms of input (seecols_to_matrix
in the core linear algebra documentation). If given a matrix, it tests whether it has full column rank.row_equivp(ex,ta)
checks whether matrixex
is row equivalent to matrixta
. Literally, this checks whether the row-reduced echelon form of each matrix are exactly equal.col_equivp(ex,ta)
does the same for column equivalence.subspace_equivp(ex,ta)
checks whether two collections of column vectors span the same subspace. i.e. Is each element ofex
linearly dependent onta
and vice versa? Likelin_indp(ex)
, this function accepts many forms of input. It does not check whether each set of vectors is linearly independent. To check whether two bases are equivalent, use this function in conjunction withlin_indp
.
Manipulating subspaces
Maxima provides columnspace
and nullspace
functions natively. This will return a span
object, where span
is an inert function. vectorspaces.mac
also provides rowspace
and nullTspace
functions to extract that row space and cokernel (left null space or null space of the transpose). Literally, these functions just call columnspace
and nullspace
on the transpose matrix.
columnspace(matrix([1,2,3],[4,5,6],[7,8,9]))
givesspan(matrix([1],[4],[7]),matrix([2],[5],[8]))
rowspace(matrix([1,2,3],[4,5,6],[7,8,9]))
givesspan(matrix([1],[2],[3]),matrix([4],[5],[6]))
nullspace(matrix([1,2,3],[4,5,6],[7,8,9]))
givesspan(matrix([-3],[6],[-3]))
nullTspace(matrix([1,2,3],[4,5,6],[7,8,9]))
givesspan(matrix([-3],[6],[-3]))
vectorspaces.mac
also provides functions to "trim out" linearly dependent vectors from a set and to extend a basis to .
remove_dep(ex)
takes exactly a list of lists or a matrix (it is not flexible likelin_indp
) and removes any linearly dependent vectors (or columns if given a matrix). It works from left to right but keeps the left-most vector when comparing vectors.- For example,
remove_dep(matrix([1,2,3],[1,2,4],[1,2,5]))
givesmatrix([1,3],[1,4],[1,5])
basisify(ex)
will generate a basis for where each vector inex
has elements. This will first remove any dependent vectors usingremove_dep
and then attempt to extend the basis by adding for from to one at a time.- It will take an optional argument that, when true, orthonormalises the basis, i.e.
basisify(ex, true)
. This is only really useful whenex
is already orthonormal (or at least orthogonal), because if not Gram Schmidt orthogonalisation will remove most of the original vectors anyway. -
For example,
basisify(matrix([1,1],[1,-1],[0,1]))
will givebut
basisify(matrix([1,1],[1,-1],[0,1]),true)
will give -
The intended use of this function is for making the in factorisations orthogonal or for computing a full SVD
Projection matrices
projection_matrix(A)
will produce the symmetric, idempotent matrix that orthogonally projects vectors in onto the column space of matrixA
.