-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbasic.h
More file actions
127 lines (95 loc) · 3.73 KB
/
basic.h
File metadata and controls
127 lines (95 loc) · 3.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*
* FEPC
* Copyright (C) 2009 Peter Gerds (gerds@mis.mpg.de)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __BASIC_H
#define __BASIC_H
#include "config.h"
typedef struct {
int dim; /* Dimension des Vektors */
int *array; /* Array mit Werten */
} vec_t;
typedef vec_t *vec_p;
typedef struct {
int dim; /* Dimension des Vektors */
fepc_real_t *array; /* Array mit Werten */
} vec_real_t;
typedef vec_real_t *vec_real_p;
/* Diese Routinen dienen der Verwaltung multidimensionaler Arrays. Erlaeuterungen zur Speicherung solcher Arrays,
sowie zur Funktionsweise der Funktionen entry_d2one und entry_one2d sind in der Dokumentation zu finden */
/* Initialisiert einen Vektor der Dimension dim, dessen Eintraege alle mit der Zahl 0 gefuellt sind */
vec_p
vec_new(int dim);
/* Initialisiert einen Vektor der Dimension dim, dessen Eintraege alle mit der Zahl 1.0 gefuellt sind */
vec_real_p
vec_real_new(int dim);
/* Initialisiert einen Vektor der Dimension dim, dessen Eintraege alle mit der Zahl 1 gefuellt sind */
vec_p
vec_one(int dim);
/* Loescht den Vektor s */
void
vec_del(vec_p s);
/* Loescht den Vektor s */
void
vec_real_del(vec_real_p s);
/* Berechnet die Position des Vektors s in einem multidimensionalen Array, dessen Dimension durch den Vektor n bestimmt ist */
int
entry_d2one(vec_p s,vec_p n);
/* Berechnet den zugehoerigen Vektor der Position pos eines multidimensionalen Array, dessen Dimension durch den Vektor n bestimmt ist */
vec_p
entry_one2d(int pos,vec_p n);
/* Berechnet den Vektor a*s + b*n */
vec_p
vec_op(int a, vec_p s, int b, vec_p n);
/* Multipliziert den Vektor n mit der ganzen Zahl a */
vec_p
vec_multi(int a, vec_p n);
/* Dividiert den Vektor n mit der ganzen Zahl a */
vec_p
vec_div(int a, vec_p n);
/* Addiert Vektor s und Vektor n */
vec_p
vec_add(vec_p s, vec_p n);
/* Erzeugt eine inhaltliche Kopie des Vektors n */
vec_p
vec_copy(vec_p n);
/* Berechnet das Skalarprodukt der Vektoren r und s */
int
vec_skalar_prod(vec_p r, vec_p s);
/* Berechnet den groessten Vektor n sodass gilt: n<=r und n<=s */
vec_p
vec_min(vec_p r, vec_p s);
/* Berechnet den kleinsten Vektor n sodass gilt: n>=r und n>=s */
vec_p
vec_max(vec_p r, vec_p s);
/* Berechnet r_1 * ... * r_dim */
int
vec_size(vec_p r);
/* Gegeben seien die Vektoren r, n mit n>r>=0 und n > 0. Der Vektor n beschreibt ein multidimensionales Array.
Gesucht sind alle ganzen Zahlen t >= 0 fuer die gilt: r<=s<n mit s = vec_entry_one2d( (int) t, (vec_p) n).
Die Zahlen t werden in aufsteigender Reihenfolge im Ausgabevektor abgespeichert. */
vec_p
vec_r_s_n(vec_p r, vec_p n);
/* Gegeben seien die Vektoren r, n mit n>r>=0 und n > 0. Der Vektor n beschreibt ein multidimensionales Array.
Gesucht sind alle ganzen Zahlen t >= 0 fuer die gilt: 0<=s<=r mit s = vec_entry_one2d( (int) t, (vec_p) n).
Die Zahlen t werden in aufsteigender Reihenfolge im Ausgabevektor abgespeichert. */
vec_p
vec_0_s_r(vec_p r, vec_p n);
/* Sei der Vektor n gegeben. Dann wird eine Zerlegung der Form n = 2*s + r berechnet, wobei 0<=r<=1 gilt. Das zurueckgegebene Array
besitzt die Groesse 2. Es gilt Array[0] = s , Array[1] = r. */
vec_p*
vec_zerlegung(vec_p n);
#endif