Describes the form of all matrices.
Describes the form of all real matrices.
Describes the form of all real, square matrices.
Implements functionality shared between row and column vectors.
Represents the Cholesky Decomposition of a symmetric, positive definite matrix.
A column vector of real numbers.
Represents a column vector of complex numbers.
Represents a collection of complex eigenvalues and eigenvectors.
Represents a complex-valued eigenvector and corresponding eigenvalue.
Contains a collection of complex eigenvalues and eigenvectors.
Represents a diagonal matrix.
Represents the LU decomposition of a square matrix.
Represents a QR decomposition of a matrix.
Represents a collection of real eigenvalues and eigenvectors.
Contains a real-valued eigenvector and eigenvalue.
Contains real-valued eigenvalues and eigenvectors of a matrix.
A rectangular matrix of real numbers.
A row vector of real numbers.
Contains the value and left and right vectors of one term in a singular value decomposition.
Contains all the terms contributing to the singular value decomposition of a matrix.
Stores the singular value decomposition of a matrix.
Represents a sparse, square matrix.
Represents a square matrix.
Represents the QR decomposition of a square matrix.
Represents a symmetric matrix.
Represents the LU decomposition of a tri-diagonal matrix.
Represents a tri-diagonal matrix.
Represents a unit matrix.
Describes an ordering of eigenvalues.
You can create matrices of real values using the RectangularMatrix and SquareMatrix classes, and vectors of real values using the ColumnVector and RowVector classes. Operator overloads are defined that allow you to perform allowed arithmetic operations, such as adding two vectors or matrices, or multiplying a vector by a scalar, vector, or matrix. Each type defines methods corresponding to common linear algebra operations, such as inversion (Inverse), finding eigenvalues and eigenvectors (Eigenvalues and Eigendecomposition), and decompositions (QRDecomposition and SingularValueDecomposition).
The fastest way to solve a linear system A x = b is to form the LUDecomposition of A and call Solve(IReadOnlyListDouble) with the right-hand-side b.
There are several additional matrix containers that support smaller storage requirements and faster operations for matrices with particular structures, such as DiagonalMatrix, TridiagonalMatrix, SymmetricMatrix, and SparseSquareMatrix.
Where possible, we quickly return new matrix objects that implement a new view of existing stored values, without copying or otherwise disturbing the original values. Examples include Transpose and Row(Int32). For read-only purposes, this is much faster and requires less memory that computing and storing new values. The returned matrix objects are, however, necessarily read-only. Whether an matrix object is read-only can be determined from IsReadOnly. If you want to modify a read-only matrix object, simply make a copy using the object's Copy method (e.g. Copy or Copy).