- added backwards calculation of hkl from four circle angles. This
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.
This commit is contained in:
77
matrix/matinv.c
Normal file
77
matrix/matinv.c
Normal file
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
*-----------------------------------------------------------------------------
|
||||
* file: matinv.c
|
||||
* desc: matrix inversion
|
||||
* by: ko shu pui, patrick
|
||||
* date: 24 nov 91 v0.1
|
||||
* revi: 14 may 92 v0.2
|
||||
* ref:
|
||||
* [1] Mary L.Boas, "Mathematical Methods in the Physical Sciene,"
|
||||
* John Wiley & Sons, 2nd Ed., 1983. Chap 3.
|
||||
*
|
||||
* [2] Kendall E.Atkinson, "An Introduction to Numberical Analysis,"
|
||||
* John Wiley & Sons, 1978.
|
||||
*
|
||||
*-----------------------------------------------------------------------------
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
|
||||
#ifdef __TURBOC__
|
||||
#include <alloc.h>
|
||||
#else
|
||||
#include <malloc.h>
|
||||
#endif
|
||||
|
||||
#include "matrix.h"
|
||||
|
||||
|
||||
/*
|
||||
*-----------------------------------------------------------------------------
|
||||
* funct: mat_inv
|
||||
* desct: find inverse of a matrix
|
||||
* given: a = square matrix a
|
||||
* retrn: square matrix Inverse(A)
|
||||
* NULL = fails, singular matrix, or malloc() fails
|
||||
*-----------------------------------------------------------------------------
|
||||
*/
|
||||
MATRIX mat_inv( a )
|
||||
MATRIX a;
|
||||
{
|
||||
MATRIX A, B, C, P;
|
||||
int i, j, n;
|
||||
double temp;
|
||||
|
||||
n = MatCol(a);
|
||||
A = mat_copy(a);
|
||||
B = mat_creat( n, 1, UNDEFINED );
|
||||
C = mat_creat( n, n, UNDEFINED );
|
||||
P = mat_creat( n, 1, UNDEFINED );
|
||||
|
||||
/*
|
||||
* - LU-decomposition -
|
||||
* also check for singular matrix
|
||||
*/
|
||||
if (mat_lu(A, P) == -1)
|
||||
{
|
||||
mat_free(A);
|
||||
mat_free(B);
|
||||
mat_free(C);
|
||||
mat_free(P);
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
for (i=0; i<n; i++)
|
||||
{
|
||||
mat_fill(B, ZERO_MATRIX);
|
||||
B[i][0] = 1.0;
|
||||
mat_backsubs1( A, B, C, P, i );
|
||||
}
|
||||
|
||||
mat_free(A);
|
||||
mat_free(B);
|
||||
mat_free(P);
|
||||
return (C);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user