
required inclusion of a matrix package. - modified counter error handling to send a Stop when the _BAD_BUSY error is received. - added an environment interface to the general controller stuff in choco.* Also added setting a parameter directly at the controller object. - Added a driver for the ETH High Temperature Furnace to be used at SANS.
137 lines
3.1 KiB
C
137 lines
3.1 KiB
C
/*
|
|
*-----------------------------------------------------------------------------
|
|
* file: matrix.h
|
|
* desc: matrix mathematics header file
|
|
* by: ko shu pui, patrick
|
|
* date: 24 nov 91 v0.1b
|
|
* revi:
|
|
* ref:
|
|
* [1] Mary L.Boas, "Mathematical Methods in the Physical Sciene,"
|
|
* John Wiley & Sons, 2nd Ed., 1983. Chap 3.
|
|
*
|
|
*-----------------------------------------------------------------------------
|
|
*/
|
|
|
|
#ifndef SHUMATRIX
|
|
#define SHUMATRIX
|
|
/*
|
|
*-----------------------------------------------------------------------------
|
|
* internal matrix structure
|
|
*-----------------------------------------------------------------------------
|
|
*/
|
|
typedef struct {
|
|
int row;
|
|
int col;
|
|
} MATHEAD;
|
|
|
|
typedef struct {
|
|
MATHEAD head;
|
|
/*
|
|
* only the starting address of the following will be
|
|
* returned to the C programmer, like malloc() concept
|
|
*/
|
|
double *matrix;
|
|
} MATBODY;
|
|
|
|
typedef double **MATRIX;
|
|
|
|
#define Mathead(a) ((MATHEAD *)((MATHEAD *)(a) - 1))
|
|
#define MatRow(a) (Mathead(a)->row)
|
|
#define MatCol(a) (Mathead(a)->col)
|
|
|
|
/*
|
|
*----------------------------------------------------------------------------
|
|
* mat_errors definitions
|
|
*----------------------------------------------------------------------------
|
|
*/
|
|
#define MAT_MALLOC 1
|
|
#define MAT_FNOTOPEN 2
|
|
#define MAT_FNOTGETMAT 3
|
|
|
|
/*
|
|
*----------------------------------------------------------------------------
|
|
* matrice types
|
|
*----------------------------------------------------------------------------
|
|
*/
|
|
#define UNDEFINED -1
|
|
#define ZERO_MATRIX 0
|
|
#define UNIT_MATRIX 1
|
|
|
|
|
|
/* prototypes of matrix package */
|
|
#ifndef NOPROTO
|
|
|
|
MATRIX mat_error (int);
|
|
MATRIX _mat_creat (int, int);
|
|
MATRIX mat_creat (int, int, int);
|
|
MATRIX mat_fill (MATRIX, int);
|
|
int mat_free (MATRIX);
|
|
MATRIX mat_copy (MATRIX);
|
|
MATRIX mat_colcopy1 (MATRIX, MATRIX, int, int);
|
|
int fgetmat (MATRIX, FILE *);
|
|
MATRIX mat_dump (MATRIX);
|
|
MATRIX mat_dumpf (MATRIX, char *);
|
|
MATRIX mat_fdump (MATRIX, FILE *);
|
|
MATRIX mat_fdumpf (MATRIX, char *, FILE *);
|
|
|
|
MATRIX mat_add (MATRIX, MATRIX);
|
|
MATRIX mat_sub (MATRIX, MATRIX);
|
|
MATRIX mat_mul (MATRIX, MATRIX);
|
|
double mat_diagmul (MATRIX);
|
|
MATRIX mat_tran (MATRIX);
|
|
MATRIX mat_inv (MATRIX);
|
|
MATRIX mat_SymToeplz (MATRIX);
|
|
|
|
int mat_lu (MATRIX, MATRIX);
|
|
MATRIX mat_backsubs1 (MATRIX, MATRIX, MATRIX, MATRIX, int);
|
|
MATRIX mat_lsolve (MATRIX, MATRIX);
|
|
|
|
MATRIX mat_submat (MATRIX, int, int);
|
|
double mat_cofact (MATRIX, int, int);
|
|
double mat_det (MATRIX);
|
|
double mat_minor (MATRIX, int, int);
|
|
|
|
MATRIX mat_durbin (MATRIX);
|
|
MATRIX mat_lsolve_durbin(MATRIX, MATRIX);
|
|
#else
|
|
|
|
MATRIX mat_error ();
|
|
MATRIX _mat_creat ();
|
|
MATRIX mat_creat ();
|
|
MATRIX mat_fill ();
|
|
int mat_free ();
|
|
MATRIX mat_copy ();
|
|
MATRIX mat_colcopy1 ();
|
|
int fgetmat ();
|
|
MATRIX mat_dumpf ();
|
|
MATRIX mat_dump ();
|
|
MATRIX mat_fdump ();
|
|
MATRIX mat_fdumpf ();
|
|
|
|
MATRIX mat_add ();
|
|
MATRIX mat_sub ();
|
|
MATRIX mat_mul ();
|
|
double mat_diagmul ();
|
|
MATRIX mat_tran ();
|
|
MATRIX mat_inv ();
|
|
MATRIX mat_SymToeplz ();
|
|
|
|
int mat_lu ();
|
|
MATRIX mat_backsubs1 ();
|
|
MATRIX mat_lsolve ();
|
|
|
|
MATRIX mat_submat ();
|
|
double mat_cofact ();
|
|
double mat_det ();
|
|
double mat_minor ();
|
|
|
|
MATRIX mat_durbin ();
|
|
MATRIX mat_lsolve_durbin();
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|