]> git.mxchange.org Git - flightgear.git/blob - LaRCsim/ls_matrix.h
MSVC++ portability tweaks contributed by Bernie Bright.
[flightgear.git] / LaRCsim / ls_matrix.h
1 /***************************************************************************
2
3         TITLE:          ls_matrix.h
4         
5 ----------------------------------------------------------------------------
6
7         FUNCTION:       Header file for general real matrix routines.
8                                 
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.
20
21 ----------------------------------------------------------------------------
22
23         MODULE STATUS:  developmental
24
25 ----------------------------------------------------------------------------
26
27         GENEALOGY:      Created 950222 E. B. Jackson
28
29 ----------------------------------------------------------------------------
30
31         DESIGNED BY:    from Numerical Recipes in C, by Press, et. al.
32         
33         CODED BY:       Bruce Jackson
34         
35         MAINTAINED BY:  
36
37 ----------------------------------------------------------------------------
38
39         MODIFICATION HISTORY:
40         
41         DATE    PURPOSE                                         BY
42         
43         CURRENT RCS HEADER:
44
45 $Header$
46 $Log$
47 Revision 1.1  1998/06/27 22:34:58  curt
48 Initial revision.
49
50  * Revision 1.1  1995/02/27  20:02:18  bjax
51  * Initial revision
52  *
53
54 ----------------------------------------------------------------------------
55
56         REFERENCES:     [1] Press, William H., et. al, Numerical Recipes in 
57                             C, 2nd edition, Cambridge University Press, 1992
58
59 ----------------------------------------------------------------------------
60
61         CALLED BY:
62
63 ----------------------------------------------------------------------------
64
65         CALLS TO:
66
67 ----------------------------------------------------------------------------
68
69         INPUTS:
70
71 ----------------------------------------------------------------------------
72
73         OUTPUTS:
74
75 --------------------------------------------------------------------------*/
76 #include <stdlib.h>
77 #include <stdio.h>
78 #include <math.h>
79
80 #define NR_END 1
81
82 /* matrix creation & destruction routines */
83
84 int *nr_ivector(long nl, long nh);
85 double **nr_matrix(long nrl, long nrh, long ncl, long nch);
86
87 void nr_free_ivector(int *v, long nl /* , long nh */);
88 void nr_free_matrix(double **m, long nrl, long nrh, long ncl, long nch);
89
90
91 /* Gauss-Jordan inversion routine */
92
93 int nr_gaussj(double **a, int n, double **b, int m);
94
95 /* Linear equation solution by Gauss-Jordan elimination. a[1..n][1..n] is */
96 /* the input matrix. b[1..n][1..m] is input containing the m right-hand   */
97 /* side vectors. On output, a is replaced by its matrix invers, and b is  */
98 /* replaced by the corresponding set of solution vectors.                 */
99
100 /* Note: this routine modified by EBJ to make b optional, if m == 0 */
101
102 /* Matrix copy, multiply, and printout routines (by EBJ) */
103
104 void nr_copymat(double **orig, int n, double **copy);
105 void nr_multmat(double **m1, int n, double **m2, double **prod);
106 void nr_printmat(double **a, int n);
107
108