56 #include "type_parite.h" 72 Matrice _cl_ptens_rr_pas_prevu (
const Matrice&,
int,
double,
int) ;
73 Matrice _cl_ptens_rr_cheb (
const Matrice&,
int,
double,
int) ;
74 Matrice _cl_ptens_rr_chebi (
const Matrice&,
int,
double,
int) ;
75 Matrice _cl_ptens_rr_chebu (
const Matrice&,
int,
double,
int) ;
76 Matrice _cl_ptens_rr_chebp (
const Matrice&,
int,
double,
int) ;
79 Matrice _cl_ptens_rr_pas_prevu (
const Matrice &source,
int l,
double echelle,
int puis) {
80 cout <<
"Combinaison lineaire pas prevu..." << endl ;
81 cout <<
"Source : " << source << endl ;
82 cout <<
"l : " << l << endl ;
83 cout <<
"dzpuis : " << puis << endl ;
84 cout <<
"Echelle : " << echelle << endl ;
95 Matrice _cl_ptens_rr_cheb (
const Matrice &source,
int l,
double echelle,
int) {
96 int n = source.
get_dim(0) ;assert (n == source.get_dim(1)) ;
99 const int nmax = 100 ;
100 static Matrice* tab[nmax] ;
101 static int nb_dejafait = 0 ;
102 static int l_dejafait[nmax] ;
103 static int nr_dejafait[nmax] ;
104 static double vieux_echelle = 0 ;
107 if (vieux_echelle != echelle) {
108 for (
int i=0 ; i<nb_dejafait ; i++) {
110 nr_dejafait[i] = -1 ;
114 vieux_echelle = echelle ;
120 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
121 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
126 if (nb_dejafait >= nmax) {
127 cout <<
"_cl_ptens_rr_cheb : trop de matrices" << endl ;
132 l_dejafait[nb_dejafait] = l ;
133 nr_dejafait[nb_dejafait] = n ;
135 Matrice barre(source) ;
137 for (
int i=0 ; i<n-2 ; i++) {
138 for (
int j=i ; j<(n>(i+7)? i+7 : n) ; j++)
139 barre.set(i, j) = ((1+dirac)*source(i, j)-source(i+2, j))
141 if (i==0) dirac = 0 ;
145 for (
int i=0 ; i<n-4 ; i++)
146 for (
int j=i ; j<(n>(i+5)? i+5 : n) ; j++)
147 res.set(i, j) = barre(i, j)-barre(i+2, j) ;
148 tab[nb_dejafait] =
new Matrice(res) ;
155 return *tab[indice] ;
163 Matrice _cl_ptens_rr_chebp (
const Matrice &source,
int l,
double,
int) {
166 assert (n == source.get_dim(1)) ;
168 const int nmax = 100 ;
169 static Matrice* tab[nmax] ;
170 static int nb_dejafait = 0 ;
171 static int l_dejafait[nmax] ;
172 static int nr_dejafait[nmax] ;
177 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
178 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
183 if (nb_dejafait >= nmax) {
184 cout <<
"_cl_ptens_rr_chebp : trop de matrices" << endl ;
189 l_dejafait[nb_dejafait] = l ;
190 nr_dejafait[nb_dejafait] = n ;
192 Matrice barre(source) ;
195 for (
int i=0 ; i<n-2 ; i++) {
196 for (
int j=0 ; j<n ; j++)
197 barre.set(i, j) = (1+dirac)*source(i, j)-source(i+2, j) ;
198 if (i==0) dirac = 0 ;
201 Matrice tilde(barre) ;
202 for (
int i=0 ; i<n-4 ; i++)
203 for (
int j=0 ; j<n ; j++)
204 tilde.set(i, j) = barre(i, j)-barre(i+2, j) ;
207 for (
int i=0 ; i<n-4 ; i++)
208 for (
int j=0 ; j<n ; j++)
209 res.set(i, j) = tilde(i, j)-tilde(i+1, j) ;
210 tab[nb_dejafait] =
new Matrice(res) ;
217 return *tab[indice] ;
225 Matrice _cl_ptens_rr_chebi (
const Matrice &source,
int l,
double,
int) {
227 assert (n == source.get_dim(1)) ;
230 const int nmax = 100 ;
231 static Matrice* tab[nmax] ;
232 static int nb_dejafait = 0 ;
233 static int l_dejafait[nmax] ;
234 static int nr_dejafait[nmax] ;
239 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
240 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
245 if (nb_dejafait >= nmax) {
246 cout <<
"_cl_ptens_rr_chebi : trop de matrices" << endl ;
251 l_dejafait[nb_dejafait] = l ;
252 nr_dejafait[nb_dejafait] = n ;
254 Matrice barre(source) ;
256 for (
int i=0 ; i<n-2 ; i++)
257 for (
int j=0 ; j<n ; j++)
258 barre.set(i, j) = source(i, j)-source(i+2, j) ;
260 Matrice tilde(barre) ;
261 for (
int i=0 ; i<n-4 ; i++)
262 for (
int j=0 ; j<n ; j++)
263 tilde.set(i, j) = barre(i, j)-barre(i+2, j) ;
266 for (
int i=0 ; i<n-4 ; i++)
267 for (
int j=0 ; j<n ; j++)
268 res.set(i, j) = tilde(i, j)-tilde(i+1, j) ;
269 tab[nb_dejafait] =
new Matrice(res) ;
276 return *tab[indice] ;
282 Matrice _cl_ptens_rr_chebu (
const Matrice &source,
int l,
double,
int puis) {
284 assert (n == source.get_dim(1)) ;
286 cout <<
"_ope_ptens_rr_mat_r_chebu : only the case dzpuis = 4 " 287 <<
'\n' <<
"is implemented! \n" 288 <<
"dzpuis = " << puis << endl ;
292 const int nmax = 200 ;
293 static Matrice* tab[nmax] ;
294 static int nb_dejafait = 0 ;
295 static int l_dejafait[nmax] ;
296 static int nr_dejafait[nmax] ;
301 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
302 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
307 if (nb_dejafait >= nmax) {
308 cout <<
"_cl_ptens_rr_chebu_quatre : trop de matrices" << endl ;
313 l_dejafait[nb_dejafait] = l ;
314 nr_dejafait[nb_dejafait] = n ;
316 Matrice barre(source) ;
319 for (
int i=0 ; i<n-2 ; i++) {
320 for (
int j=0 ; j<n ; j++)
321 barre.set(i, j) = ((1+dirac)*source(i, j)-source(i+2, j)) ;
322 if (i==0) dirac = 0 ;
325 Matrice tilde(barre) ;
326 for (
int i=0 ; i<n-4 ; i++)
327 for (
int j=0 ; j<n ; j++)
328 tilde.set(i, j) = (barre(i, j)-barre(i+2, j)) ;
330 Matrice prime(tilde) ;
331 for (
int i=0 ; i<n-4 ; i++)
332 for (
int j=0 ; j<n ; j++)
333 prime.set(i, j) = (tilde(i, j)-tilde(i+1, j)) ;
336 for (
int i=0 ; i<n-4 ; i++)
337 for (
int j=0 ; j<n ; j++)
338 res.set(i, j) = (prime(i, j)-prime(i+2, j)) ;
339 tab[nb_dejafait] =
new Matrice(res) ;
346 return *tab[indice] ;
354 Matrice cl_ptens_rr(
const Matrice &source,
int l,
double echelle,
355 int puis,
int base_r) {
358 static Matrice (*combinaison[
MAX_BASE])(
const Matrice &, int, double, int) ;
365 combinaison[i] = _cl_ptens_rr_pas_prevu ;
374 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)