55 #include "type_parite.h" 71 Matrice _cl_pvect_r_pas_prevu (
const Matrice&,
int,
double,
int) ;
72 Matrice _cl_pvect_r_cheb (
const Matrice&,
int,
double,
int) ;
73 Matrice _cl_pvect_r_chebi (
const Matrice&,
int,
double,
int) ;
74 Matrice _cl_pvect_r_chebu (
const Matrice&,
int,
double,
int) ;
75 Matrice _cl_pvect_r_chebp (
const Matrice&,
int,
double,
int) ;
78 Matrice _cl_pvect_r_pas_prevu (
const Matrice &source,
int l,
double echelle,
int puis) {
79 cout <<
"Combinaison lineaire pas prevu..." << endl ;
80 cout <<
"Source : " << source << endl ;
81 cout <<
"l : " << l << endl ;
82 cout <<
"dzpuis : " << puis << endl ;
83 cout <<
"Echelle : " << echelle << endl ;
94 Matrice _cl_pvect_r_cheb (
const Matrice &source,
int l,
double echelle,
int) {
95 int n = source.
get_dim(0) ;assert (n == source.get_dim(1)) ;
98 const int nmax = 100 ;
99 static Matrice* tab[nmax] ;
100 static int nb_dejafait = 0 ;
101 static int l_dejafait[nmax] ;
102 static int nr_dejafait[nmax] ;
103 static double vieux_echelle = 0 ;
106 if (vieux_echelle != echelle) {
107 for (
int i=0 ; i<nb_dejafait ; i++) {
109 nr_dejafait[i] = -1 ;
113 vieux_echelle = echelle ;
119 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
120 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
125 if (nb_dejafait >= nmax) {
126 cout <<
"_cl_pvect_r_cheb : trop de matrices" << endl ;
131 l_dejafait[nb_dejafait] = l ;
132 nr_dejafait[nb_dejafait] = n ;
134 Matrice barre(source) ;
136 for (
int i=0 ; i<n-2 ; i++) {
137 for (
int j=i ; j<(n>(i+7)? i+7 : n) ; j++)
138 barre.set(i, j) = ((1+dirac)*source(i, j)-source(i+2, j))
140 if (i==0) dirac = 0 ;
144 for (
int i=0 ; i<n-4 ; i++)
145 for (
int j=i ; j<(n>(i+5)? i+5 : n) ; j++)
146 res.set(i, j) = barre(i, j)-barre(i+2, j) ;
147 tab[nb_dejafait] =
new Matrice(res) ;
154 return *tab[indice] ;
162 Matrice _cl_pvect_r_chebp (
const Matrice &source,
int l,
double,
int) {
165 assert (n == source.get_dim(1)) ;
167 const int nmax = 100 ;
168 static Matrice* tab[nmax] ;
169 static int nb_dejafait = 0 ;
170 static int l_dejafait[nmax] ;
171 static int nr_dejafait[nmax] ;
176 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
177 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
182 if (nb_dejafait >= nmax) {
183 cout <<
"_cl_pvect_r_chebp : trop de matrices" << endl ;
188 l_dejafait[nb_dejafait] = l ;
189 nr_dejafait[nb_dejafait] = n ;
191 Matrice barre(source) ;
194 for (
int i=0 ; i<n-2 ; i++) {
195 for (
int j=0 ; j<n ; j++)
196 barre.set(i, j) = (1+dirac)*source(i, j)-source(i+2, j) ;
197 if (i==0) dirac = 0 ;
200 Matrice tilde(barre) ;
201 for (
int i=0 ; i<n-4 ; i++)
202 for (
int j=0 ; j<n ; j++)
203 tilde.set(i, j) = barre(i, j)-barre(i+2, j) ;
206 for (
int i=0 ; i<n-4 ; i++)
207 for (
int j=0 ; j<n ; j++)
208 res.set(i, j) = tilde(i, j)-tilde(i+1, j) ;
209 tab[nb_dejafait] =
new Matrice(res) ;
216 return *tab[indice] ;
224 Matrice _cl_pvect_r_chebi (
const Matrice &source,
int l,
double,
int) {
226 assert (n == source.get_dim(1)) ;
229 const int nmax = 100 ;
230 static Matrice* tab[nmax] ;
231 static int nb_dejafait = 0 ;
232 static int l_dejafait[nmax] ;
233 static int nr_dejafait[nmax] ;
238 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
239 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
244 if (nb_dejafait >= nmax) {
245 cout <<
"_cl_pvect_r_chebi : trop de matrices" << endl ;
250 l_dejafait[nb_dejafait] = l ;
251 nr_dejafait[nb_dejafait] = n ;
253 Matrice barre(source) ;
255 for (
int i=0 ; i<n-2 ; i++)
256 for (
int j=0 ; j<n ; j++)
257 barre.set(i, j) = source(i, j)-source(i+2, j) ;
259 Matrice tilde(barre) ;
260 for (
int i=0 ; i<n-4 ; i++)
261 for (
int j=0 ; j<n ; j++)
262 tilde.set(i, j) = barre(i, j)-barre(i+2, j) ;
265 for (
int i=0 ; i<n-4 ; i++)
266 for (
int j=0 ; j<n ; j++)
267 res.set(i, j) = tilde(i, j)-tilde(i+1, j) ;
268 tab[nb_dejafait] =
new Matrice(res) ;
275 return *tab[indice] ;
281 Matrice _cl_pvect_r_chebu (
const Matrice &source,
int l,
double,
int puis) {
283 assert (n == source.get_dim(1)) ;
285 cout <<
"_ope_pvect_r_mat_r_chebu : only the case dzpuis = 4 " 286 <<
'\n' <<
"is implemented! \n" 287 <<
"dzpuis = " << puis << endl ;
291 const int nmax = 200 ;
292 static Matrice* tab[nmax] ;
293 static int nb_dejafait = 0 ;
294 static int l_dejafait[nmax] ;
295 static int nr_dejafait[nmax] ;
300 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
301 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
306 if (nb_dejafait >= nmax) {
307 cout <<
"_cl_pvect_r_chebu_quatre : trop de matrices" << endl ;
312 l_dejafait[nb_dejafait] = l ;
313 nr_dejafait[nb_dejafait] = n ;
315 Matrice barre(source) ;
318 for (
int i=0 ; i<n-2 ; i++) {
319 for (
int j=0 ; j<n ; j++)
320 barre.set(i, j) = ((1+dirac)*source(i, j)-source(i+2, j)) ;
321 if (i==0) dirac = 0 ;
324 Matrice tilde(barre) ;
325 for (
int i=0 ; i<n-4 ; i++)
326 for (
int j=0 ; j<n ; j++)
327 tilde.set(i, j) = (barre(i, j)-barre(i+2, j)) ;
329 Matrice prime(tilde) ;
330 for (
int i=0 ; i<n-4 ; i++)
331 for (
int j=0 ; j<n ; j++)
332 prime.set(i, j) = (tilde(i, j)-tilde(i+1, j)) ;
335 for (
int i=0 ; i<n-4 ; i++)
336 for (
int j=0 ; j<n ; j++)
337 res.set(i, j) = (prime(i, j)-prime(i+2, j)) ;
338 tab[nb_dejafait] =
new Matrice(res) ;
345 return *tab[indice] ;
353 Matrice cl_pvect_r(
const Matrice &source,
int l,
double echelle,
354 int puis,
int base_r) {
357 static Matrice (*combinaison[
MAX_BASE])(
const Matrice &, int, double, int) ;
364 combinaison[i] = _cl_pvect_r_pas_prevu ;
373 Matrice res(combinaison[base_r](source, l, echelle, puis)) ;
#define TRA_R
Translation en R, used for a bitwise shift (in hex)
#define R_CHEBI
base de Cheb. impaire (rare) seulement
#define R_CHEBP
base de Cheb. paire (rare) seulement
int get_dim(int i) const
Returns the dimension of the matrix.
#define R_CHEBU
base de Chebychev ordinaire (fin), dev. en 1/r
#define MAX_BASE
Nombre max. de bases differentes.
#define R_CHEB
base de Chebychev ordinaire (fin)