20 #include "base_spectral.hpp"
21 #include "headcpp.hpp"
22 #include "matrice.hpp"
25 int div_xm1_1d_pasprevu (Array<double>&) {
26 cout <<
"div_xm1_1d not implemented." << endl ;
31 int div_xm1_1d_cheb (Array<double>& so) {
32 assert (so.get_ndim()==1) ;
33 int nr = so.get_size(0) ;
34 Array<double> res (nr) ;
36 for (
int i=0 ; i<nr-1 ; i++)
37 for (
int j=i+1 ; j<nr ; j++)
38 res.set(i) += 2*(j-i)*so(j) ;
45 double leg (
int n,
double x) ;
46 int div_xm1_1d_leg (Array<double>& so) {
47 assert (so.get_ndim()==1) ;
48 int nr = so.get_size(0) ;
51 Array<double> res (nr) ;
53 static Matrice* ope = 0x0 ;
54 static int nr_done = 0 ;
61 ope =
new Matrice (nr, nr) ;
64 ope->set(0,1) = 1./3. ;
65 for (
int i=1 ; i<nr-1 ; i++) {
66 ope->set(i,i-1) = double(i)/double(2*i-1) ;
68 ope->set(i, i+1) = double(i+1)/double(2*i+3) ;
70 ope->set(nr-1, nr-2) = double(nr-1)/double(2*nr-3) ;
71 ope->set(nr-1, nr-1) = -1 ;
76 Array<double> copie (so) ;
78 for (
int i=1 ; i<nr ; i++)
79 copie.set(0) -= so(i)*leg(i, 1.) ;
80 res = ope->solve(copie) ;
86 int div_xm1_1d (
int base, Array<double>& so) {
87 static int (*div_xm1_1d[NBR_MAX_BASE])(Array<double>&) ;
88 static bool premier_appel = true ;
92 premier_appel = false ;
94 for (
int i=0; i<NBR_MAX_BASE; i++)
95 div_xm1_1d[i] = div_xm1_1d_pasprevu ;
97 div_xm1_1d[CHEB] = div_xm1_1d_cheb ;
98 div_xm1_1d[LEG] = div_xm1_1d_leg ;;
101 return div_xm1_1d[base](so) ;