60 #include "type_parite.h" 84 Tbl _sh_ptens_rr_pas_prevu (
int,
int,
double) ;
85 Tbl _sh_ptens_rr_cheb (
int,
int,
double) ;
86 Tbl _sh_ptens_rr_chebp (
int,
int,
double) ;
87 Tbl _sh_ptens_rr_chebi (
int,
int,
double) ;
88 Tbl _sh_ptens_rr_chebu (
int,
int,
double) ;
93 Tbl _sh_ptens_rr_pas_prevu (
int n,
int l,
double echelle) {
95 cout <<
" Solution homogene pas prevue ..... : "<< endl ;
96 cout <<
" N : " << n << endl ;
97 cout <<
" l : " << l << endl ;
98 cout <<
" echelle : " << echelle << endl ;
110 Tbl _sh_ptens_rr_cheb (
int n,
int l,
double echelle) {
112 const int nmax = 200 ;
113 static Tbl* tab[nmax] ;
114 static int nb_dejafait = 0 ;
115 static int l_dejafait[nmax] ;
116 static int nr_dejafait[nmax] ;
117 static double vieux_echelle = 0;
120 if (vieux_echelle != echelle) {
121 for (
int i=0 ; i<nb_dejafait ; i++) {
123 nr_dejafait[i] = -1 ;
127 vieux_echelle = echelle ;
133 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
134 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
139 if (nb_dejafait >= nmax) {
140 cout <<
"_sh_ptens_rr_cheb : trop de Tbl" << endl ;
146 l_dejafait[nb_dejafait] = l ;
147 nr_dejafait[nb_dejafait] = n ;
151 double* coloc =
new double[n] ;
153 int * deg =
new int[3] ;
163 for (
int i=1 ; i<n ; i++)
167 for (
int i=0 ; i<n ; i++)
168 coloc[i] =
pow(echelle-
cos(M_PI*i/(n-1)),
double(l-2)) ;
170 cfrcheb(deg, deg, coloc, deg, coloc) ;
171 for (
int i=0 ; i<n ;i++)
172 res.set(0, i) = coloc[i] ;
178 for (
int i=0 ; i<n ; i++)
179 coloc[i] = 1/
pow(echelle-
cos(M_PI*i/(n-1)),
double(l+3)) ;
181 cfrcheb(deg, deg, coloc, deg, coloc) ;
182 for (
int i=0 ; i<n ;i++)
183 res.set(1, i) = coloc[i] ;
187 tab[nb_dejafait] =
new Tbl(res) ;
192 else return *tab[indice] ;
199 Tbl _sh_ptens_rr_chebp (
int n,
int l,
double) {
201 const int nmax = 200 ;
202 static Tbl* tab[nmax] ;
203 static int nb_dejafait = 0 ;
204 static int l_dejafait[nmax] ;
205 static int nr_dejafait[nmax] ;
210 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
211 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
216 if (nb_dejafait >= nmax) {
217 cout <<
"_sh_ptens_rr_chebp : trop de Tbl" << endl ;
223 l_dejafait[nb_dejafait] = l ;
224 nr_dejafait[nb_dejafait] = n ;
228 double* coloc =
new double[n] ;
230 int * deg =
new int[3] ;
235 assert (l % 2 == 0) ;
238 for (
int i=1 ; i<n ; i++)
242 for (
int i=0 ; i<n ; i++)
243 coloc[i] =
pow(
sin(M_PI*i/2/(n-1)),
double(l-2)) ;
245 cfrchebp(deg, deg, coloc, deg, coloc) ;
246 for (
int i=0 ; i<n ;i++)
247 res.set(i) = coloc[i] ;
252 tab[nb_dejafait] =
new Tbl(res) ;
257 else return *tab[indice] ;
265 Tbl _sh_ptens_rr_chebi (
int n,
int l,
double) {
267 const int nmax = 200 ;
268 static Tbl* tab[nmax] ;
269 static int nb_dejafait = 0 ;
270 static int l_dejafait[nmax] ;
271 static int nr_dejafait[nmax] ;
276 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
277 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
282 if (nb_dejafait >= nmax) {
283 cout <<
"_sh_ptens_rr_chebi : trop de Tbl" << endl ;
289 l_dejafait[nb_dejafait] = l ;
290 nr_dejafait[nb_dejafait] = n ;
297 double* coloc =
new double[n] ;
299 int * deg =
new int[3] ;
304 for (
int i=0 ; i<n ; i++)
305 coloc[i] =
pow(
sin(M_PI*i/2/(n-1)),
double(l-2)) ;
307 cfrchebi(deg, deg, coloc, deg, coloc) ;
308 for (
int i=0 ; i<n ;i++)
309 res.set(i) = coloc[i] ;
314 tab[nb_dejafait] =
new Tbl(res) ;
319 else return *tab[indice] ;
328 Tbl _sh_ptens_rr_chebu (
int n,
int l,
double) {
330 const int nmax = 200 ;
331 static Tbl* tab[nmax] ;
332 static int nb_dejafait = 0 ;
333 static int l_dejafait[nmax] ;
334 static int nr_dejafait[nmax] ;
339 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
340 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
345 if (nb_dejafait >= nmax) {
346 cout <<
"_sh_ptens_rr_chebu : trop de Tbl" << endl ;
352 l_dejafait[nb_dejafait] = l ;
353 nr_dejafait[nb_dejafait] = n ;
357 double* coloc =
new double[n] ;
359 int * deg =
new int[3] ;
364 for (
int i=0 ; i<n ; i++)
365 coloc[i] =
pow(-1-
cos(M_PI*i/(n-1)),
double(l+3)) ;
367 cfrcheb(deg, deg, coloc, deg, coloc) ;
368 for (
int i=0 ; i<n ;i++)
369 res.set(i) = coloc[i] ;
373 tab[nb_dejafait] =
new Tbl(res) ;
378 else return *tab[indice] ;
389 Tbl sh_ptens_rr(
int n,
int l,
double echelle,
int base_r) {
392 static Tbl (*sh_ptens_rr[
MAX_BASE])(int, int, double) ;
399 sh_ptens_rr[i] = _sh_ptens_rr_pas_prevu ;
410 Tbl res(sh_ptens_rr[base_r](n, l, echelle)) ;
Cmp cos(const Cmp &)
Cosine.
#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
Cmp pow(const Cmp &, int)
Power .
Cmp sin(const Cmp &)
Sine.
#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)