next up previous contents index
Next: Vectors with Integer Entries Up: Number Types and Linear Previous: Double-Valued Vectors ( vector   Contents   Index


Double-Valued Matrices ( matrix )

Definition

An instance of the data type matrix is a matrix of variables of type double.

#include < LEDA/numbers/matrix.h >

Creation

matrix M(int n=0, int m=0) creates an instance M of type matrix , M is initialized to the n x m - zero matrix.

matrix M(int n, int m, double* D)
    creates the n x m matrix M with M(i, j) = D[i*m + j] for 0 < = i < = n - 1 and 0 < = j < = m - 1 . Precondition D points to an array of at least n*m numbers of type double.

Operations

int M.dim1() returns n , the number of rows of M .

int M.dim2() returns m , the number of columns of M .

vector& M.row(int i) returns the i -th row of M (an m -vector).
Precondition 0 < = i < = n - 1 .

vector M.col(int i) returns the i -th column of M (an n -vector).
Precondition 0 < = i < = m - 1 .

matrix M.trans() returns MT (m x n - matrix).

matrix M.inv() returns the inverse matrix of M .
Precondition M is quadratic and M.det() ! = 0 .

double M.det() returns the determinant of M .
Precondition M is quadratic.

vector M.solve(const vector& b) returns vector x with M*x = b .
Precondition M .dim1() == M .dim2() = =b .dim() and M .det() ! = 0.

double& M(int i, int j) returns Mi, j .
Precondition 0 < = i < = n - 1 and 0 < = j < = m - 1 .

matrix M + const matrix& M1 Addition.
Precondition M .dim1() == M1 .dim1() and M .dim2() == M1 .dim2().

matrix M - const matrix& M1 Subtraction.
Precondition M .dim1() == M1 .dim1() and M .dim2() == M1 .dim2().

matrix M * const matrix& M1 Multiplication.
Precondition M .dim2() == M1 .dim1().

vector M * const vector& vec Multiplication with vector.
Precondition M .dim2() == vec .dim().

matrix M * double x Multiplication with double x.

void M.print(ostream& O) prints M row by row to ostream O .

void M.print() prints M cout .

void M.read(istream& I) reads M.dim1() x M.dim2() numbers from input stream I and writes them row by row into matrix M .

void M.read() prints M from cin .

ostream& ostream& O < < const matrix& M
    writes matrix M row by row to the output stream O .

istream& istream& I > > matrix& M reads a matrix row by row from the input stream I and assigns it to M .

Implementation

Data type matrix is implemented by two-dimensional arrays of double numbers. Operations det, solve, and inv take time O(n3) , dim1, dim2, row, and col take constant time, all other operations take time O(nm) . The space requirement is O(nm) .

Be aware that the operations on vectors and matrices incur rounding error and hence are not completely reliable. For example, if M is a matrix, b is a vector, and x is computed by x = M.solve(b) it is not necessarly true that the test b == M * b evaluates to true. The types integer_vector and integer_matrix provide exact linear algebra.


next up previous contents index
Next: Vectors with Integer Entries Up: Number Types and Linear Previous: Double-Valued Vectors ( vector   Contents   Index
Christian Uhrig 2017-04-07