include/matrix.h File Reference

Matrix and linear algebra functions. More...

#include <sphinxbase_export.h>
#include <prim_type.h>

Go to the source code of this file.

Functions

SPHINXBASE_EXPORT float64 determinant (float32 **a, int32 len)
 Calculate the determinant of a positive definite matrix.
SPHINXBASE_EXPORT int32 invert (float32 **out_ainv, float32 **a, int32 len)
 Invert (if possible) a positive definite matrix.
SPHINXBASE_EXPORT int32 solve (float32 **a, float32 *b, float32 *out_x, int32 n)
 Solve (if possible) a positive-definite system of linear equations AX=B for X.
SPHINXBASE_EXPORT void outerproduct (float32 **out_a, float32 *x, float32 *y, int32 len)
 Calculate the outer product of two vectors.
SPHINXBASE_EXPORT void matrixmultiply (float32 **out_c, float32 **a, float32 **b, int32 n)
 Multiply C=AB where A and B are symmetric matrices.
SPHINXBASE_EXPORT void scalarmultiply (float32 **inout_a, float32 x, int32 n)
 Multiply a symmetric matrix by a constant in-place.
SPHINXBASE_EXPORT void matrixadd (float32 **inout_a, float32 **b, int32 n)
 Add A += B.


Detailed Description

Matrix and linear algebra functions.

This file contains some basic matrix and linear algebra operations. In general these operate on positive definite matrices ONLY, because all matrices we're likely to encounter are either covariance matrices or are derived from them, and therefore a non-positive-definite matrix indicates some kind of pathological condition.

Definition in file matrix.h.


Function Documentation

SPHINXBASE_EXPORT float64 determinant ( float32 **  a,
int32  len 
)

Calculate the determinant of a positive definite matrix.

Parameters:
a The input matrix, must be positive definite.
len The dimension of the input matrix.
Returns:
The determinant of the input matrix, or -1.0 if the matrix is not positive definite.
Note:
These can be vanishingly small hence the float64 return type. Also note that only the upper triangular portion of a is considered, therefore the check for positive-definiteness is not reliable.

Definition at line 51 of file matrix.c.

References determinant(), and E_FATAL.

Referenced by determinant().

SPHINXBASE_EXPORT int32 invert ( float32 **  out_ainv,
float32 **  a,
int32  len 
)

Invert (if possible) a positive definite matrix.

Parameters:
out_ainv The inverse of a will be stored here.
a The input matrix, must be positive definite.
len The dimension of the input matrix.
Returns:
0 for success or -1 for a non-positive-definite matrix.
Note:
Only the upper triangular portion of a is considered, therefore the check for positive-definiteness is not reliable.

Definition at line 57 of file matrix.c.

References E_FATAL, and invert().

Referenced by invert().

SPHINXBASE_EXPORT void matrixadd ( float32 **  inout_a,
float32 **  b,
int32  n 
)

Add A += B.

Parameters:
inout_a The A matrix to add.
b The B matrix to add to A.
n dimension of a and b.

Definition at line 210 of file matrix.c.

References matrixadd().

Referenced by matrixadd().

SPHINXBASE_EXPORT void matrixmultiply ( float32 **  out_c,
float32 **  a,
float32 **  b,
int32  n 
)

Multiply C=AB where A and B are symmetric matrices.

Parameters:
out_c The output matrix C.
a The input matrix A.
b The input matrix B.
n Dimensionality of A and B.

Definition at line 70 of file matrix.c.

References matrixmultiply().

Referenced by matrixmultiply().

SPHINXBASE_EXPORT void outerproduct ( float32 **  out_a,
float32 *  x,
float32 *  y,
int32  len 
)

Calculate the outer product of two vectors.

Parameters:
out_a A (pre-allocated) len x len array. The outer product will be stored here.
x A vector of length len.
y A vector of length len.
len The length of the input vectors.

Definition at line 182 of file matrix.c.

References outerproduct().

Referenced by outerproduct().

SPHINXBASE_EXPORT void scalarmultiply ( float32 **  inout_a,
float32  x,
int32  n 
)

Multiply a symmetric matrix by a constant in-place.

Parameters:
inout_a The matrix to multiply.
x The constant to multiply it by.
n dimension of a.

Definition at line 196 of file matrix.c.

References scalarmultiply().

Referenced by scalarmultiply().

SPHINXBASE_EXPORT int32 solve ( float32 **  a,
float32 *  b,
float32 *  out_x,
int32  n 
)

Solve (if possible) a positive-definite system of linear equations AX=B for X.

Parameters:
a The A matrix on the left-hand side of the equation, must be positive-definite.
b The B vector on the right-hand side of the equation.
out_x The X vector will be stored here.
n The dimension of the A matrix (n by n) and the B and X vectors.
Returns:
0 for success or -1 for a non-positive-definite matrix.
Note:
Only the upper triangular portion of a is considered, therefore the check for positive-definiteness is not reliable.

Definition at line 63 of file matrix.c.

References E_FATAL, and solve().

Referenced by solve().


Generated on Mon Aug 24 16:08:00 2009 for SphinxBase by  doxygen 1.5.8