116 #include "type_parite.h" 142 Tbl _solh_pas_prevu (
int n,
int l,
double echelle) {
144 cout <<
" Solution homogene pas prevue ..... : "<< endl ;
145 cout <<
" N : " << n << endl ;
146 cout <<
" l : " << l << endl ;
147 cout <<
" echelle : " << echelle << endl ;
159 Tbl _solh_r_cheb (
int n,
int l,
double echelle) {
161 const int nmax = 200 ;
162 static Tbl* tab[nmax] ;
163 static int nb_dejafait = 0 ;
164 static int l_dejafait[nmax] ;
165 static int nr_dejafait[nmax] ;
166 static double vieux_echelle = 0;
169 if (vieux_echelle != echelle) {
170 for (
int i=0 ; i<nb_dejafait ; i++) {
172 nr_dejafait[i] = -1 ;
176 vieux_echelle = echelle ;
182 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
183 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
188 if (nb_dejafait >= nmax) {
189 cout <<
"_solh_r_cheb : trop de Tbl" << endl ;
195 l_dejafait[nb_dejafait] = l ;
196 nr_dejafait[nb_dejafait] = n ;
200 tab[nb_dejafait] =
new Tbl(2, n) ;
201 Tbl* pres = tab[nb_dejafait] ;
202 pres->set_etat_qcq() ;
203 double* coloc =
new double[n] ;
205 int * deg =
new int[3] ;
214 pres->set(0, 0) = 1 ;
215 for (
int i=1 ; i<n ; i++)
216 pres->set(0, i) = 0 ;
219 for (
int i=0 ; i<n ; i++)
220 coloc[i] =
pow(echelle-
cos(M_PI*i/(n-1)),
double(l)) ;
222 cfrcheb(deg, deg, coloc, deg, coloc) ;
223 for (
int i=0 ; i<n ;i++)
224 pres->set(0, i) = coloc[i] ;
230 for (
int i=0 ; i<n ; i++)
231 coloc[i] = 1/
pow(echelle-
cos(M_PI*i/(n-1)),
double(l+1)) ;
233 cfrcheb(deg, deg, coloc, deg, coloc) ;
234 for (
int i=0 ; i<n ;i++)
235 pres->set(1, i) = coloc[i] ;
240 indice = nb_dejafait ;
244 return *tab[indice] ;
252 Tbl _solh_r_jaco02 (
int n,
int l,
double echelle) {
254 const int nmax = 200 ;
255 static Tbl* tab[nmax] ;
256 static int nb_dejafait = 0 ;
257 static int l_dejafait[nmax] ;
258 static int nr_dejafait[nmax] ;
259 static double vieux_echelle = 0;
262 if (vieux_echelle != echelle) {
263 for (
int i=0 ; i<nb_dejafait ; i++) {
265 nr_dejafait[i] = -1 ;
269 vieux_echelle = echelle ;
275 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
276 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
281 if (nb_dejafait >= nmax) {
282 cout <<
"_solh_r_jaco02 : trop de Tbl" << endl ;
288 l_dejafait[nb_dejafait] = l ;
289 nr_dejafait[nb_dejafait] = n ;
293 tab[nb_dejafait] =
new Tbl(2, n) ;
294 Tbl* pres = tab[nb_dejafait] ;
295 pres->set_etat_qcq() ;
296 double* coloc =
new double[n] ;
298 int * deg =
new int[3] ;
304 double* zeta = pointsgausslobatto(n-1) ;
309 pres->set(0, 0) = 1 ;
310 for (
int i=1 ; i<n ; i++)
311 pres->set(0, i) = 0 ;
314 for (
int i=0 ; i<n ; i++)
315 coloc[i] =
pow((echelle + zeta[i]),
double(l)) ;
317 cfrjaco02(deg, deg, coloc, deg, coloc) ;
318 for (
int i=0 ; i<n ;i++)
319 pres->set(0, i) = coloc[i] ;
325 for (
int i=0 ; i<n ; i++)
326 coloc[i] = 1/
pow((echelle + zeta[i]),
double(l+1)) ;
328 cfrjaco02(deg, deg, coloc, deg, coloc) ;
329 for (
int i=0 ; i<n ;i++)
330 pres->set(1, i) = coloc[i] ;
335 indice = nb_dejafait ;
339 return *tab[indice] ;
348 Tbl _solh_r_chebp (
int n,
int l,
double) {
350 const int nmax = 200 ;
351 static Tbl* tab[nmax] ;
352 static int nb_dejafait = 0 ;
353 static int l_dejafait[nmax] ;
354 static int nr_dejafait[nmax] ;
359 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
360 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
365 if (nb_dejafait >= nmax) {
366 cout <<
"_solh_r_chebp : trop de Tbl" << endl ;
372 l_dejafait[nb_dejafait] = l ;
373 nr_dejafait[nb_dejafait] = n ;
375 assert (div(l, 2).rem ==0) ;
379 tab[nb_dejafait] =
new Tbl(n) ;
380 Tbl* pres = tab[nb_dejafait] ;
381 pres->set_etat_qcq() ;
382 double* coloc =
new double[n] ;
384 int * deg =
new int[3] ;
391 for (
int i=1 ; i<n ; i++)
395 for (
int i=0 ; i<n ; i++)
396 coloc[i] =
pow(
sin(M_PI*i/2/(n-1)),
double(l)) ;
398 cfrchebp(deg, deg, coloc, deg, coloc) ;
399 for (
int i=0 ; i<n ;i++)
400 pres->set(i) = coloc[i] ;
405 indice = nb_dejafait ;
409 return *tab[indice] ;
417 Tbl _solh_r_chebi (
int n,
int l,
double) {
419 const int nmax = 200 ;
420 static Tbl* tab[nmax] ;
421 static int nb_dejafait = 0 ;
422 static int l_dejafait[nmax] ;
423 static int nr_dejafait[nmax] ;
428 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
429 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
434 if (nb_dejafait >= nmax) {
435 cout <<
"_solh_r_chebi : trop de Tbl" << endl ;
441 l_dejafait[nb_dejafait] = l ;
442 nr_dejafait[nb_dejafait] = n ;
445 assert (div(l, 2).rem == 1) ;
448 tab[nb_dejafait] =
new Tbl(n) ;
449 Tbl* pres = tab[nb_dejafait] ;
450 pres->set_etat_qcq() ;
451 double* coloc =
new double[n] ;
453 int * deg =
new int[3] ;
460 for (
int i=1 ; i<n ; i++)
464 for (
int i=0 ; i<n ; i++)
465 coloc[i] =
pow(
sin(M_PI*i/2/(n-1)),
double(l)) ;
467 cfrchebi(deg, deg, coloc, deg, coloc) ;
468 for (
int i=0 ; i<n ;i++)
469 pres->set(i) = coloc[i] ;
474 indice = nb_dejafait ;
478 return *tab[indice] ;
487 Tbl _solh_r_chebu (
int n,
int l,
double) {
489 const int nmax = 200 ;
490 static Tbl* tab[nmax] ;
491 static int nb_dejafait = 0 ;
492 static int l_dejafait[nmax] ;
493 static int nr_dejafait[nmax] ;
498 for (
int conte=0 ; conte<nb_dejafait ; conte ++)
499 if ((l_dejafait[conte] == l) && (nr_dejafait[conte] == n))
504 if (nb_dejafait >= nmax) {
505 cout <<
"_solh_r_chebu : trop de Tbl" << endl ;
511 l_dejafait[nb_dejafait] = l ;
512 nr_dejafait[nb_dejafait] = n ;
516 tab[nb_dejafait] =
new Tbl(n) ;
517 Tbl* pres = tab[nb_dejafait] ;
518 pres->set_etat_qcq() ;
519 double* coloc =
new double[n] ;
521 int * deg =
new int[3] ;
526 for (
int i=0 ; i<n ; i++)
527 coloc[i] =
pow(-1-
cos(M_PI*i/(n-1)),
double(l+1)) ;
529 cfrcheb(deg, deg, coloc, deg, coloc) ;
530 for (
int i=0 ; i<n ;i++)
531 pres->set(i) = coloc[i] ;
535 indice = nb_dejafait ;
539 return *tab[indice] ;
550 Tbl solh(
int n,
int l,
double echelle,
int base_r) {
553 static Tbl (*solh[
MAX_BASE])(int, int, double) ;
560 solh[i] = _solh_pas_prevu ;
570 return solh[base_r](n, l, echelle) ;
#define R_JACO02
base de Jacobi(0,2) ordinaire (finjac)
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)