1 /***************************************************************************
5 ----------------------------------------------------------------------------
7 FUNCTION: Header file for general real matrix routines.
9 The routines in this module have come more or less from ref [1].
10 Note that, probably due to the heritage of ref [1] (which has a
11 FORTRAN version that was probably written first), the use of 1 as
12 the first element of an array (or vector) is used. This is accomplished
13 in memory by allocating, but not using, the 0 elements in each dimension.
14 While this wastes some memory, it allows the routines to be ported more
15 easily from FORTRAN (I suspect) as well as adhering to conventional
16 matrix notation. As a result, however, traditional ANSI C convention
17 (0-base indexing) is not followed; as the authors of ref [1] point out,
18 there is some question of the portability of the resulting routines
19 which sometimes access negative indexes. See ref [1] for more details.
21 ----------------------------------------------------------------------------
23 MODULE STATUS: developmental
25 ----------------------------------------------------------------------------
27 GENEALOGY: Created 950222 E. B. Jackson
29 ----------------------------------------------------------------------------
31 DESIGNED BY: from Numerical Recipes in C, by Press, et. al.
33 CODED BY: Bruce Jackson
37 ----------------------------------------------------------------------------
47 Revision 1.1 2002/09/10 01:14:02 curt
50 Revision 1.1.1.1 1999/06/17 18:07:34 curt
53 Revision 1.1.1.1 1999/04/05 21:32:45 curt
54 Start of 0.6.x branch.
56 Revision 1.1 1998/06/27 22:34:58 curt
59 * Revision 1.1 1995/02/27 20:02:18 bjax
63 ----------------------------------------------------------------------------
65 REFERENCES: [1] Press, William H., et. al, Numerical Recipes in
66 C, 2nd edition, Cambridge University Press, 1992
68 ----------------------------------------------------------------------------
72 ----------------------------------------------------------------------------
76 ----------------------------------------------------------------------------
80 ----------------------------------------------------------------------------
84 --------------------------------------------------------------------------*/
91 /* matrix creation & destruction routines */
93 int *nr_ivector(long nl, long nh);
94 double **nr_matrix(long nrl, long nrh, long ncl, long nch);
96 void nr_free_ivector(int *v, long nl /* , long nh */);
97 void nr_free_matrix(double **m, long nrl, long nrh, long ncl, long nch);
100 /* Gauss-Jordan inversion routine */
102 int nr_gaussj(double **a, int n, double **b, int m);
104 /* Linear equation solution by Gauss-Jordan elimination. a[1..n][1..n] is */
105 /* the input matrix. b[1..n][1..m] is input containing the m right-hand */
106 /* side vectors. On output, a is replaced by its matrix invers, and b is */
107 /* replaced by the corresponding set of solution vectors. */
109 /* Note: this routine modified by EBJ to make b optional, if m == 0 */
111 /* Matrix copy, multiply, and printout routines (by EBJ) */
113 void nr_copymat(double **orig, int n, double **copy);
114 void nr_multmat(double **m1, int n, double **m2, double **prod);
115 void nr_printmat(double **a, int n);