home *** CD-ROM | disk | FTP | other *** search
- Using matrices
-
- Matrices can have from 1 to 4 dimensions, and are indexed by a
- normal-sized integer. The lower and upper bounds of a matrix can
- be specified at runtime. The elements of a matrix are defaulted
- to zeroes, but can be assigned to be of any type. Thus matrices
- can hold complex numbers, strings, objects, etc. Matrices are
- stored in memory as an array so that random access to the elements
- is easy.
-
- Matrices are normally indexed using square brackets. If the matrix
- is multi-dimensional, then an element can be indexed either by
- using multiple pairs of square brackets (as in C), or else by
- separating the indexes by commas. Thus the following two statements
- reference the same matrix element:
-
- x = name[3][5];
- x = name[3,5];
-
- The double-square bracket operator can be used on any matrix to
- make references to the elements easy and efficient. This operator
- bypasses the normal indexing mechanism, and treats the array as if
- it was one-dimensional and with a lower bound of zero. In this
- indexing mode, elements correspond to the normal indexing mode where
- the rightmost index increases most frequently. For example, when
- using double-square bracket indexing on a two-dimensional matrix,
- increasing indexes will reference the matrix elements left to right,
- row by row. Thus in the following example, 'x' and 'y' are copied
- from the same matrix element:
-
- mat m[1:2, 1:3];
- x = m[2,1];
- y = m[[3]];
-
- There are functions which return information about a matrix.
- The 'size' functions returns the total number of elements.
- The 'matdim', 'matmin', and 'matmax' functions return the number
- of dimensions of a matrix, and the lower and upper index bounds
- for a dimension of a matrix. For square matrices, the 'det'
- function calculates the determinant of the matrix.
-
- Some functions return matrices as their results. These functions
- do not affect the original matrix argument, but instead return
- new matrices. For example, the 'mattrans' function returns the
- transpose of a matrix, and 'inverse' returns the inverse of a
- matrix. So to invert a matrix called 'x', you could use:
-
- x = inverse(x);
-
- The 'matfill' function fills all elements of a matrix with the
- specified value, and optionally fills the diagonal elements of a
- square matrix with a different value. For example:
-
- matfill(x,1);
-
- will fill any matrix with ones, and:
-
- matfill(x, 0, 1);
-
- will create an identity matrix out of any square matrix. Note that
- unlike most matrix functions, this function does not return a matrix
- value, but manipulates the matrix argument itself.
-
- Matrices can be multiplied by numbers, which multiplies each element
- by the number. Matrices can also be negated, conjugated, shifted,
- rounded, truncated, fraction'ed, and modulo'ed. Each of these
- operations is applied to each element.
-
- Matrices can be added or multiplied together if the operation is
- legal. Note that even if the dimensions of matrices are compatible,
- operations can still fail because of mismatched lower bounds. The
- lower bounds of two matrices must either match, or else one of them
- must have a lower bound of zero. Thus the following code:
-
- mat x[3:3];
- mat y[4:4];
- z = x + y;
-
- fails because the calculator does not have a way of knowing what
- the bounds should be on the resulting matrix. If the bounds match,
- then the resulting matrix has the same bounds. If exactly one of
- the lower bounds is zero, then the resulting matrix will have the
- nonzero lower bounds. Thus means that the bounds of a matrix are
- preserved when operated on by matrices with lower bounds of zero.
- For example:
-
- mat x[3:7];
- mat y[5];
- z = x + y;
-
- will succeed and assign the variable 'z' a matrix whose
- bounds are 3-7.
-
- Vectors are matrices of only a single dimension. The 'dp' and 'cp'
- functions calculate the dot product and cross product of a vector
- (cross product is only defined for vectors of size 3).
-
- Matrices can be searched for particular values by using the 'search'
- and 'rsearch' functions. They return the element number of the
- found value (zero based), or null if the value does not exist in the
- matrix. Using the element number in double-bracket indexing will
- then refer to the found element.
-