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