blob: dc97a01a305e771d20dbedd5111ba6901e14e98a [file] [log] [blame]
/* SCCS ID @(#)ge.h 1.1 2/4/86 */
/***************************************************************
******************************************************************
**** Matrix data structure(s) for Gaussian Elimination ****
******************************************************************
****************************************************************/
/*
This file contains the definitions of the structures used in
various algorithms for doing Gaussian Elimination.
The following gives an array (of length 10) of pointers to floats.
float *a[10];
Now assume that each a[i] points to space for an array of floats (gotten
by a call to malloc, say).
Then the following is true:
a[i] can be thought of as a pointer to the i-th array of floats,
*(a[i]+j) is the j-th element of the i-th array.
The following shows how to reference things for the definition of the FULL
structure given below.
a->cd is the value of (as apposed to a pointer to) the column dimension.
a->rd is the value of (as apposed to a pointer to) the row dimension.
a->pd[j] is a pointer to the j-th column (an array of floats).
*(a->pd[j]+i) is the i-th element of the j-th column, viz., a(i,j).
Here we think, as is natural in C, of all matrices and vectors indexed
from 0 insead of 1.
*/
#define MAXCOL 1000 /* Maximum number of Columns. */
struct FULL { /* Struct definition for the FULL matrix structure. */
int cd; /* Column dimension of the matrix. */
int rd; /* Row Dimension of the matrix. */
float *pd[MAXCOL]; /* Array of pointers to the columns of a matrix. */
};
/* The following macro will get a(r,c) from a matrix in the FULL structure. */
#define elem(a,r,c) (*(a.pd[(c)]+(r)))
/* The following macro will get a(r,c) from a pointer to a matrix
in the FULL structure. */
#define pelem(a,r,c) (*(a->pd[(c)]+(r)))
extern int sgefa();
extern int sgesl();
extern int vexopy();