21 #include <lal/LALStdlib.h>
22 #include <lal/AVFactories.h>
23 #include <lal/MatrixUtils.h>
128 for ( i = 0; i < n; i++ ) {
130 for ( j = 0, ij = i*n; j < n; j++, ij++ )
131 if ( ( tmp = fabs(
m[ij] ) ) > max )
136 memset( d, 0, n*
sizeof(
UINT4) );
144 for ( j = 0; j < n; j++ ) {
147 for ( i = 0, ij = j; i < j; i++, ij += n ) {
149 for ( k = 0, ik = i*n, kj = j; k < i; k++, ik++, kj += n )
156 for ( i = j, ij = j*(n+1); i < n; i++, ij += n ) {
158 for ( k = 0, ik = i*n, kj = j; k < j; k++, ik++, kj += n )
161 if ( ( tmp = s[i]*fabs( sum ) ) >= max ) {
169 for ( k = 0, ik = imax*n, jk = j*n; k < n; k++, ik++, jk++ ) {
180 if ( ( tmp =
m[j*(n+1)] ) == 0.0 ) {
182 memset( d, 0, n*
sizeof(
UINT4) );
188 for ( i = j + 1, ij = j*(n+1) + n; i < n; i++, ij += n )
241 if ( n > 1 && d[0] == 0 && d[1] == 0 ) {
247 for ( i = 0; i < n; i++ ) {
252 for ( j = jmin, ij = i*n + jmin; j < i; j++, ij++ )
254 else if ( sum != 0.0 )
260 for ( i = n - 1, ii = n*n - 1; i >= 0; i--, ii -= n + 1 ) {
262 for ( j = i + 1, ij = ii + 1; j < n; j++, ij++ )
278 UINT4 ij, ik, kj, jk;
312 for ( i = 0; i < n; i++ ) {
314 for ( j = 0, ij = i*n; j < n; j++, ij++ )
315 if ( ( tmp = fabs(
m[ij] ) ) > max )
320 memset( d, 0, n*
sizeof(
UINT4) );
328 for ( j = 0; j < n; j++ ) {
331 for ( i = 0, ij = j; i < j; i++, ij += n ) {
333 for ( k = 0, ik = i*n, kj = j; k < i; k++, ik++, kj += n )
340 for ( i = j, ij = j*(n+1); i < n; i++, ij += n ) {
342 for ( k = 0, ik = i*n, kj = j; k < j; k++, ik++, kj += n )
345 if ( ( tmp = s[i]*fabs( sum ) ) >= max ) {
353 for ( k = 0, ik = imax*n, jk = j*n; k < n; k++, ik++, jk++ ) {
364 if ( ( tmp =
m[j*(n+1)] ) == 0.0 ) {
366 memset( d, 0, n*
sizeof(
UINT4) );
372 for ( i = j + 1, ij = j*(n+1) + n; i < n; i++, ij += n )
425 if ( n > 1 && d[0] == 0 && d[1] == 0 ) {
431 for ( i = 0; i < n; i++ ) {
436 for ( j = jmin, ij = i*n + jmin; j < i; j++, ij++ )
438 else if ( sum != 0.0 )
444 for ( i = n - 1, ii = n*n - 1; i >= 0; i--, ii -= n + 1 ) {
446 for ( j = i + 1, ij = ii + 1; j < n; j++, ij++ )
664 for ( i = 0; i < n; i++ )
665 *det *= matrix->
data[i*(n+1)];
669 for ( j = 0; j < n; j++ ) {
677 for ( i = 0, ij = j; i < n; i++, ij += n )
722 for ( i = 0; i < n; i++ )
723 *det *= matrix->
data[i*(n+1)];
781 for ( i = 0; i < n; i++ )
782 *det *= matrix->
data[i*(n+1)];
786 for ( j = 0; j < n; j++ ) {
794 for ( i = 0, ij = j; i < n; i++, ij += n )
860 for ( i = 0; i < n; i++ ) {
861 for ( j = 0, ij = i*n; j < n; j++, ij++ ) {
863 for ( k = 0, ik = i*n, kj = j; k < n; k++, ik++, kj += n )
864 temp->
data[ik] = temp->
data[kj] = 0.0;
865 temp->
data[ij] = matrixErr->
data[ij];
873 det[1] = sqrt( det[1] );
static void LALSLUBackSub(LALStatus *stat, REAL4Vector *vector, REAL4Array *matrix, UINT4Vector *indx)
static void LALSLUDecomp(LALStatus *stat, INT2 *sgn, REAL4Array *matrix, UINT4Vector *indx)
static void LALDLUBackSub(LALStatus *stat, REAL8Vector *vector, REAL8Array *matrix, UINT4Vector *indx)
static void LALDLUDecomp(LALStatus *stat, INT2 *sgn, REAL8Array *matrix, UINT4Vector *indx)
#define ABORT(statusptr, code, mesg)
#define ENDFAIL(statusptr)
#define TRY(func, statusptr)
#define ATTATCHSTATUSPTR(statusptr)
#define ASSERT(assertion, statusptr, code, mesg)
#define DETATCHSTATUSPTR(statusptr)
#define INITSTATUS(statusptr)
#define RETURN(statusptr)
#define BEGINFAIL(statusptr)
#define MATRIXUTILSH_MSGESING
#define MATRIXUTILSH_MSGEMEM
#define MATRIXUTILSH_MSGEDIM
#define MATRIXUTILSH_MSGENUL
void LALDCreateArray(LALStatus *, REAL8Array **, UINT4Vector *)
void LALDDestroyArray(LALStatus *, REAL8Array **)
void LALDMatrixInverse(LALStatus *stat, REAL8 *det, REAL8Array *matrix, REAL8Array *inverse)
void LALDMatrixDeterminant(LALStatus *stat, REAL8 *det, REAL8Array *matrix)
void LALSMatrixInverse(LALStatus *stat, REAL4 *det, REAL4Array *matrix, REAL4Array *inverse)
void LALDMatrixDeterminantErr(LALStatus *stat, REAL8 det[2], REAL8Array *matrix, REAL8Array *matrixErr)
double REAL8
Double precision real floating-point number (8 bytes).
int16_t INT2
Two-byte signed integer.
uint32_t UINT4
Four-byte unsigned integer.
int32_t INT4
Four-byte signed integer.
float REAL4
Single precision real floating-point number (4 bytes).
#define MATRIXUTILSH_ENUL
Unexpected null pointer in arguments.
#define MATRIXUTILSH_ESING
Singular matrix.
#define MATRIXUTILSH_EDIM
Bad matrix dimensions.
#define MATRIXUTILSH_EMEM
Memory allocation error.
void LALU4CreateVector(LALStatus *, UINT4Vector **, UINT4)
void LALDCreateVector(LALStatus *, REAL8Vector **, UINT4)
void LALDDestroyVector(LALStatus *, REAL8Vector **)
void LALSDestroyVector(LALStatus *, REAL4Vector **)
void LALU4DestroyVector(LALStatus *, UINT4Vector **)
void LALSCreateVector(LALStatus *, REAL4Vector **, UINT4)
LAL status structure, see The LALStatus structure for more details.
struct tagLALStatus * statusPtr
Pointer to the next node in the list; NULL if this function is not reporting a subroutine error.
Multidimentional array of REAL4, see DATATYPE-Array types for more details.
UINT4Vector * dimLength
Vector of array dimensions.
REAL4 * data
Pointer to the data array.
Vector of type REAL4, see DATATYPE-Vector types for more details.
REAL4 * data
Pointer to the data array.
UINT4 length
Number of elements in array.
Multidimentional array of REAL8, see DATATYPE-Array types for more details.
UINT4Vector * dimLength
Vector of array dimensions.
REAL8 * data
Pointer to the data array.
Vector of type REAL8, see DATATYPE-Vector types for more details.
REAL8 * data
Pointer to the data array.
UINT4 length
Number of elements in array.
Vector of type UINT4, see DATATYPE-Vector types for more details.
UINT4 length
Number of elements in array.
UINT4 * data
Pointer to the data array.