Matrix
The Matrix class provides support for matrices. A matrix can be initialized with a given size,
var a = Matrix(nrows,ncols)
where all elements are initially set to zero. Alternatively, a matrix can be created from an array,
var a = Matrix([[1,2], [3,4]])
or a Sparse matrix,
var a = Sparse([[0,0,1],[1,1,1],[2,2,1]])
var b = Matrix(a)
You can create a column vector like this,
var v = Matrix([1,2])
Finally, you can create a Matrix by assembling other matrices like this,
var a = Matrix([[0,1],[1,0]])
var b = Matrix([[a,0],[0,a]]) // produces a 4x4 matrix
Once a matrix is created, you can use all the regular arithmetic operators with matrix operands, e.g.
a+b
a*b
You can retrieved individual matrix entries with specified indices:
print a[0,0]
or create a submatrix using slices:
print a[0..1,0..1]
The division operator is used to solve a linear system, e.g.
var a = Matrix([[1,2],[3,4]])
var b = Matrix([1,2])
print b/a
yields the solution to the system a*x = b.
Assign
Copies the contents of matrix B into matrix A:
A.assign(B)
The two matrices must have the same dimensions.
Dimensions
Returns the dimensions of a matrix:
var A = Matrix([1,2,3]) // Create a column matrix
print A.dimensions() // Expect: [ 3, 1 ]
Eigenvalues
Returns a list of eigenvalues of a Matrix:
var A = Matrix([[0,1],[1,0]])
print A.eigenvalues() // Expect: [1,-1]
Eigensystem
Returns the eigenvalues and eigenvectors of a Matrix:
var A = Matrix([[0,1],[1,0]])
print A.eigensystem()
Eigensystem returns a two element list: The first element is a List of eigenvalues. The second element is a Matrix containing the corresponding eigenvectors as its columns:
print A.eigensystem()[0]
// [ 1, -1 ]
print A.eigensystem()[1]
// [ 0.707107 -0.707107 ]
// [ 0.707107 0.707107 ]
Inner
Computes the Frobenius inner product between two matrices:
var prod = A.inner(B)
Outer
Computes the outer produce between two vectors:
var prod = A.outer(B)
Note that outer
always treats both vectors as column vectors.
Inverse
Returns the inverse of a matrix if it is invertible. Raises a
MtrxSnglr
error if the matrix is singular. E.g.
var m = Matrix([[1,2],[3,4]])
var mi = m.inverse()
yields the inverse of the matrix m
, such that mi*m is the identity
matrix.
Norm
Returns a matrix norm. By default the L2 norm is returned:
var a = Matrix([1,2,3,4])
print a.norm() // Expect: sqrt(30) = 5.47723...
You can select a different norm by supplying an argument:
import constants
print a.norm(1) // Expect: 10 (L1 norm is sum of absolute values)
print a.norm(3) // Expect: 4.64159 (An unusual choice of norm)
print a.norm(Inf) // Expect: 4 (Inf-norm corresponds to maximum absolute value)
Reshape
Changes the dimensions of a matrix such that the total number of elements remains constant:
var A = Matrix([[1,3],[2,4]])
A.reshape(1,4) // 1 row, 4 columns
print A // Expect: [ 1, 2, 3, 4 ]
Note that elements are stored in column major-order.
Sum
Returns the sum of all entries in a matrix:
var sum = A.sum()
Transpose
Returns the transpose of a matrix:
var At = A.transpose()
Trace
Computes the trace (the sum of the diagonal elements) of a square matrix:
var tr = A.trace()
Roll
Rotates values in a Matrix about a given axis by a given shift:
var r = A.roll(shift, axis)
Elements that roll beyond the last position are re-introduced at the first.
IdentityMatrix
Constructs an identity matrix of a specified size:
var a = IdentityMatrix(size)