UNIVERS  15.3
UNIVERS base processing software API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
linalg.h
1 /* linalg.h */
2 /* $Id: linalg.h,v 1.7 2008/02/20 10:12:35 tully Exp $ */
3 #ifndef __linalg_h
4 #define __linalg_h
5 
6 #include <mix/Types.h>
7 
8 #ifdef __cplusplus
9 extern "C" {
10 #endif /* C++ */
11 
12 #define MACHINEZERO 1e-18
13 
14 /*************************************************************************
15  * ПОДПРОГРАММА НАХОЖДЕНИЯ СОБСТВЕННЫХ ЗНАЧЕНИЙ И СОБСТВЕННЫХ ВЕКТОРОВ *
16  * ИТЕРАЦИОННЫМ МЕТОДОМ ЯКОБИ *
17  * *
18  * ВХОДНЫЕ ДАННЫЕ: A - исходная квадратная матрица (NxN) *
19  * N - размерность матрицы *
20  * B - временный буферный вектор размерности N *
21  * Z - временный буферный вектор размерности N *
22  * ВЫХОДНЫЕ ДАННЫЕ: D - собственные значения N *
23  * V - матрица, столбцами которой являются *
24  * собственные вектора (NxN) *
25  *************************************************************************/
26 void Fortran(jacobi)(double A[], int *N, double D[], double V[],
27  double B[], double Z[]);
28 
29 
30 /***********************************************************************
31  * Функция для вычисления определителя матрицы 3x3 одинарной точности.
32  *
33  * ВХОДНЫЕ ПАРАМЕТРЫ:
34  * float a[] - матрица 3x3
35  ***********************************************************************/
36 float det3 (float a[]);
37 
38 
39 /***********************************************************************
40  * Функция для вычисления определителя матрицы 3x3 двойной точности.
41  *
42  * ВХОДНЫЕ ПАРАМЕТРЫ:
43  * double a[] - матрица 3x3
44  ***********************************************************************/
45 double ddet3 (double a[]);
46 
47 
48 /**********************************************************************
49  * Функция вычисления определителя матрицы 4x4 одинарной точности.
50  *
51  * ВХОДНЫЕ ПАРАМЕТРЫ:
52  * float a[] - матрица 4x4
53  **********************************************************************/
54 float det4 (float a[]);
55 
56 
57 /**********************************************************************
58  * Функция вычисления определителя матрицы 4x4 двойной точности.
59  *
60  * ВХОДНЫЕ ПАРАМЕТРЫ:
61  * double a[] - матрица 4x4
62  **********************************************************************/
63 double ddet4 (double a[]);
64 
65 
66 /**********************************************************************
67  * Функция вычисления определителя матрицы 5x5 одинарной точности.
68  *
69  * ВХОДНЫЕ ПАРАМЕТРЫ:
70  * float a[] - матрица 5x5
71  **********************************************************************/
72 float det5 (float a[]);
73 
74 
75 /**********************************************************************
76  * Функция вычисления определителя матрицы 5x5 двойной точности.
77  *
78  * ВХОДНЫЕ ПАРАМЕТРЫ:
79  * double a[] - матрица 5x5
80  **********************************************************************/
81 double ddet5 (double a[]);
82 
83 /**********************************************************************
84  * Подпрограмма нахождения решения системы 3-х линейных уравнений.
85  * A * X = B
86  *
87  * ВХОДНЫЕ ПАРАМЕТРЫ:
88  * float a[3*3] - матрица коэффициентов по строкам:
89  * a(1,1), a(1,2), a(1,3), a(2,1) ...
90  * float b[3] - вектор свободных членов * * ВЫХОДНЫЕ ПАРАМЕТРЫ: * float x[3] - вектор решения * * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: * int - признак ошибки: * 0 - нет ошибок * 1 - определитель A равен 0 ***********************************************************************/ int sle3 (float a[3*3], float b[3], float x[3]); /********************************************************************** * Подпрограмма нахождения решения системы 3-х линейных уравнений. * A * X = B * * ВХОДНЫЕ ПАРАМЕТРЫ: * float a[3*3] - матрица коэффициентов по строкам: * a(1,1), a(1,2), a(1,3), a(2,1) ... * float b[3] - вектор свободных членов * * ВЫХОДНЫЕ ПАРАМЕТРЫ: * float x[3] - вектор решения * * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: * int - признак ошибки: * 0 - нет ошибок * 1 - определитель A равен 0 ***********************************************************************/ int dsle3 (double a[3*3], double b[3], double x[3]); /********************************************************************** * Подпрограмма нахождения решения системы 4-х линейных уравнений. * A * X = B * * ВХОДНЫЕ ПАРАМЕТРЫ: * float a[4*4] - матрица коэффициентов по строкам: * a(1,1), a(1,2), a(1,3), a(1,4), a(2,1) * float b[4] - вектор свободных членов * * ВЫХОДНЫЕ ПАРАМЕТРЫ: * float x[4] - вектор решения * * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: * int - признак ошибки: * 0 - нет ошибок * 1 - определитель A равен 0 ***********************************************************************/ int sle4 (float a[4*4], float b[4], float x[4]); /********************************************************************** * Подпрограмма нахождения решения системы 5-х линейных уравнений. * A * X = B * * ВХОДНЫЕ ПАРАМЕТРЫ: * float a[5*5] - матрица коэффициентов по строкам: * a(1,1), a(1,2), a(1,3), a(1,4), a(2,1) * float b[5] - вектор свободных членов * * ВЫХОДНЫЕ ПАРАМЕТРЫ: * float x[5] - вектор решения * * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: * int - признак ошибки: * 0 - нет ошибок * 1 - определитель A равен 0 ***********************************************************************/ int sle5 (float a[5*5], float b[5], float x[5]); #ifdef __cplusplus }; #endif /* C++ */ #endif /* linalg.h */
91  *
92  * ВЫХОДНЫЕ ПАРАМЕТРЫ:
93  * float x[3] - вектор решения
94  *
95  * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
96  * int - признак ошибки:
97  * 0 - нет ошибок
98  * 1 - определитель A равен 0
99  ***********************************************************************/
100 int sle3 (float a[3*3], float b[3], float x[3]);
101 
102 /**********************************************************************
103  * Подпрограмма нахождения решения системы 3-х линейных уравнений.
104  * A * X = B
105  *
106  * ВХОДНЫЕ ПАРАМЕТРЫ:
107  * float a[3*3] - матрица коэффициентов по строкам:
108  * a(1,1), a(1,2), a(1,3), a(2,1) ...
109  * float b[3] - вектор свободных членов * * ВЫХОДНЫЕ ПАРАМЕТРЫ: * float x[3] - вектор решения * * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: * int - признак ошибки: * 0 - нет ошибок * 1 - определитель A равен 0 ***********************************************************************/ int dsle3 (double a[3*3], double b[3], double x[3]); /********************************************************************** * Подпрограмма нахождения решения системы 4-х линейных уравнений. * A * X = B * * ВХОДНЫЕ ПАРАМЕТРЫ: * float a[4*4] - матрица коэффициентов по строкам: * a(1,1), a(1,2), a(1,3), a(1,4), a(2,1) * float b[4] - вектор свободных членов * * ВЫХОДНЫЕ ПАРАМЕТРЫ: * float x[4] - вектор решения * * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: * int - признак ошибки: * 0 - нет ошибок * 1 - определитель A равен 0 ***********************************************************************/ int sle4 (float a[4*4], float b[4], float x[4]); /********************************************************************** * Подпрограмма нахождения решения системы 5-х линейных уравнений. * A * X = B * * ВХОДНЫЕ ПАРАМЕТРЫ: * float a[5*5] - матрица коэффициентов по строкам: * a(1,1), a(1,2), a(1,3), a(1,4), a(2,1) * float b[5] - вектор свободных членов * * ВЫХОДНЫЕ ПАРАМЕТРЫ: * float x[5] - вектор решения * * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: * int - признак ошибки: * 0 - нет ошибок * 1 - определитель A равен 0 ***********************************************************************/ int sle5 (float a[5*5], float b[5], float x[5]); #ifdef __cplusplus }; #endif /* C++ */ #endif /* linalg.h */
110  *
111  * ВЫХОДНЫЕ ПАРАМЕТРЫ:
112  * float x[3] - вектор решения
113  *
114  * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
115  * int - признак ошибки:
116  * 0 - нет ошибок
117  * 1 - определитель A равен 0
118  ***********************************************************************/
119 int dsle3 (double a[3*3], double b[3], double x[3]);
120 
121 
122 /**********************************************************************
123 
124  * Подпрограмма нахождения решения системы 4-х линейных уравнений.
125  * A * X = B
126  *
127  * ВХОДНЫЕ ПАРАМЕТРЫ:
128  * float a[4*4] - матрица коэффициентов по строкам:
129  * a(1,1), a(1,2), a(1,3), a(1,4), a(2,1)
130  * float b[4] - вектор свободных членов * * ВЫХОДНЫЕ ПАРАМЕТРЫ: * float x[4] - вектор решения * * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: * int - признак ошибки: * 0 - нет ошибок * 1 - определитель A равен 0 ***********************************************************************/ int sle4 (float a[4*4], float b[4], float x[4]); /********************************************************************** * Подпрограмма нахождения решения системы 5-х линейных уравнений. * A * X = B * * ВХОДНЫЕ ПАРАМЕТРЫ: * float a[5*5] - матрица коэффициентов по строкам: * a(1,1), a(1,2), a(1,3), a(1,4), a(2,1) * float b[5] - вектор свободных членов * * ВЫХОДНЫЕ ПАРАМЕТРЫ: * float x[5] - вектор решения * * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: * int - признак ошибки: * 0 - нет ошибок * 1 - определитель A равен 0 ***********************************************************************/ int sle5 (float a[5*5], float b[5], float x[5]); #ifdef __cplusplus }; #endif /* C++ */ #endif /* linalg.h */
131  *
132  * ВЫХОДНЫЕ ПАРАМЕТРЫ:
133  * float x[4] - вектор решения
134  *
135  * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
136  * int - признак ошибки:
137  * 0 - нет ошибок
138  * 1 - определитель A равен 0
139  ***********************************************************************/
140 int sle4 (float a[4*4], float b[4], float x[4]);
141 
142 /**********************************************************************
143 
144  * Подпрограмма нахождения решения системы 5-х линейных уравнений.
145  * A * X = B
146  *
147  * ВХОДНЫЕ ПАРАМЕТРЫ:
148  * float a[5*5] - матрица коэффициентов по строкам:
149  * a(1,1), a(1,2), a(1,3), a(1,4), a(2,1)
150  * float b[5] - вектор свободных членов * * ВЫХОДНЫЕ ПАРАМЕТРЫ: * float x[5] - вектор решения * * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: * int - признак ошибки: * 0 - нет ошибок * 1 - определитель A равен 0 ***********************************************************************/ int sle5 (float a[5*5], float b[5], float x[5]); #ifdef __cplusplus }; #endif /* C++ */ #endif /* linalg.h */
151  *
152  * ВЫХОДНЫЕ ПАРАМЕТРЫ:
153  * float x[5] - вектор решения
154  *
155  * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
156  * int - признак ошибки:
157  * 0 - нет ошибок
158  * 1 - определитель A равен 0
159  ***********************************************************************/
160 int sle5 (float a[5*5], float b[5], float x[5]);
161 
162 
163 #ifdef __cplusplus
164 };
165 #endif /* C++ */
166 
167 #endif /* linalg.h */