]> git.mxchange.org Git - flightgear.git/blob - src/FDM/LaRCsim/ls_matrix.h
Initial revision
[flightgear.git] / src / FDM / 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  1999/06/17 18:07:34  curt
48 Initial revision
49
50 Revision 1.1.1.1  1999/04/05 21:32:45  curt
51 Start of 0.6.x branch.
52
53 Revision 1.1  1998/06/27 22:34:58  curt
54 Initial revision.
55
56  * Revision 1.1  1995/02/27  20:02:18  bjax
57  * Initial revision
58  *
59
60 ----------------------------------------------------------------------------
61
62         REFERENCES:     [1] Press, William H., et. al, Numerical Recipes in 
63                             C, 2nd edition, Cambridge University Press, 1992
64
65 ----------------------------------------------------------------------------
66
67         CALLED BY:
68
69 ----------------------------------------------------------------------------
70
71         CALLS TO:
72
73 ----------------------------------------------------------------------------
74
75         INPUTS:
76
77 ----------------------------------------------------------------------------
78
79         OUTPUTS:
80
81 --------------------------------------------------------------------------*/
82 #include <stdlib.h>
83 #include <stdio.h>
84 #include <math.h>
85
86 #define NR_END 1
87
88 /* matrix creation & destruction routines */
89
90 int *nr_ivector(long nl, long nh);
91 double **nr_matrix(long nrl, long nrh, long ncl, long nch);
92
93 void nr_free_ivector(int *v, long nl /* , long nh */);
94 void nr_free_matrix(double **m, long nrl, long nrh, long ncl, long nch);
95
96
97 /* Gauss-Jordan inversion routine */
98
99 int nr_gaussj(double **a, int n, double **b, int m);
100
101 /* Linear equation solution by Gauss-Jordan elimination. a[1..n][1..n] is */
102 /* the input matrix. b[1..n][1..m] is input containing the m right-hand   */
103 /* side vectors. On output, a is replaced by its matrix invers, and b is  */
104 /* replaced by the corresponding set of solution vectors.                 */
105
106 /* Note: this routine modified by EBJ to make b optional, if m == 0 */
107
108 /* Matrix copy, multiply, and printout routines (by EBJ) */
109
110 void nr_copymat(double **orig, int n, double **copy);
111 void nr_multmat(double **m1, int n, double **m2, double **prod);
112 void nr_printmat(double **a, int n);
113
114