20.07.2013 Views

Un projet en C++ - LUTH - Observatoire de Paris

Un projet en C++ - LUTH - Observatoire de Paris

Un projet en C++ - LUTH - Observatoire de Paris

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

<strong>Un</strong> <strong>projet</strong> <strong>en</strong> <strong>C++</strong>:<br />

résolution d’équations<br />

différ<strong>en</strong>tielles linéaires.<br />

Jérôme Novak<br />

Jerome.Novak@obspm.fr<br />

http://luth.obspm.fr/minisite.php?nom=Novak<br />

Laboratoire <strong>Un</strong>ivers et Théories (<strong>LUTH</strong>)<br />

CNRS / <strong>Observatoire</strong> <strong>de</strong> <strong>Paris</strong> / <strong>Un</strong>iversité <strong>Paris</strong> Di<strong>de</strong>rot<br />

Master 2 e année recherche, Septembre 2011


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Outline<br />

1 Introduction : représ<strong>en</strong>tation <strong>de</strong>s fonctions<br />

2 Transformée <strong>de</strong> Tchebychev, dérivée<br />

3 Résolution d’équations différ<strong>en</strong>tielles


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Outline<br />

1 Introduction : représ<strong>en</strong>tation <strong>de</strong>s fonctions<br />

2 Transformée <strong>de</strong> Tchebychev, dérivée<br />

3 Résolution d’équations différ<strong>en</strong>tielles


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Outline<br />

1 Introduction : représ<strong>en</strong>tation <strong>de</strong>s fonctions<br />

2 Transformée <strong>de</strong> Tchebychev, dérivée<br />

3 Résolution d’équations différ<strong>en</strong>tielles


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Introduction :<br />

Représ<strong>en</strong>tation <strong>de</strong>s fonctions


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Fonctions sur un ordinateur<br />

Approche simplifiée<br />

Comm<strong>en</strong>t représ<strong>en</strong>ter une fonction sur un ordinateur ?<br />

⇒un ordinateur ne sait gérer que <strong>de</strong>s <strong>en</strong>tiers<br />

Afin <strong>de</strong> représ<strong>en</strong>ter une fonctions φ(x) (par ex. interpoler), on<br />

peut utiliser :<br />

un <strong>en</strong>semble fini <strong>de</strong> ses valeurs {φi} i=0...N sur une grille<br />

{xi} i=0...N ,<br />

un <strong>en</strong>semble fini <strong>de</strong> ses coeffici<strong>en</strong>ts sur une base <strong>de</strong><br />

fonctions φ(x) N<br />

i=0 ciΨi(x).<br />

Afin <strong>de</strong> manipuler une fonction (par ex. dériver), chaque<br />

métho<strong>de</strong> s’appar<strong>en</strong>te :<br />

aux différ<strong>en</strong>ces finies<br />

φ ′ (xi) φ(xi+1) − φ(xi)<br />

xi+1 − xi<br />

aux métho<strong>de</strong>s spectrales<br />

φ ′ (x) <br />

N<br />

ciΨ ′ i(x)<br />

i=0


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Fonctions sur un ordinateur<br />

Approche simplifiée<br />

Comm<strong>en</strong>t représ<strong>en</strong>ter une fonction sur un ordinateur ?<br />

⇒un ordinateur ne sait gérer que <strong>de</strong>s <strong>en</strong>tiers<br />

Afin <strong>de</strong> représ<strong>en</strong>ter une fonctions φ(x) (par ex. interpoler), on<br />

peut utiliser :<br />

un <strong>en</strong>semble fini <strong>de</strong> ses valeurs {φi} i=0...N sur une grille<br />

{xi} i=0...N ,<br />

un <strong>en</strong>semble fini <strong>de</strong> ses coeffici<strong>en</strong>ts sur une base <strong>de</strong><br />

fonctions φ(x) N<br />

i=0 ciΨi(x).<br />

Afin <strong>de</strong> manipuler une fonction (par ex. dériver), chaque<br />

métho<strong>de</strong> s’appar<strong>en</strong>te :<br />

aux différ<strong>en</strong>ces finies<br />

φ ′ (xi) φ(xi+1) − φ(xi)<br />

xi+1 − xi<br />

aux métho<strong>de</strong>s spectrales<br />

φ ′ (x) <br />

N<br />

ciΨ ′ i(x)<br />

i=0


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Fonctions sur un ordinateur<br />

Approche simplifiée<br />

Comm<strong>en</strong>t représ<strong>en</strong>ter une fonction sur un ordinateur ?<br />

⇒un ordinateur ne sait gérer que <strong>de</strong>s <strong>en</strong>tiers<br />

Afin <strong>de</strong> représ<strong>en</strong>ter une fonctions φ(x) (par ex. interpoler), on<br />

peut utiliser :<br />

un <strong>en</strong>semble fini <strong>de</strong> ses valeurs {φi} i=0...N sur une grille<br />

{xi} i=0...N ,<br />

un <strong>en</strong>semble fini <strong>de</strong> ses coeffici<strong>en</strong>ts sur une base <strong>de</strong><br />

fonctions φ(x) N<br />

i=0 ciΨi(x).<br />

Afin <strong>de</strong> manipuler une fonction (par ex. dériver), chaque<br />

métho<strong>de</strong> s’appar<strong>en</strong>te :<br />

aux différ<strong>en</strong>ces finies<br />

φ ′ (xi) φ(xi+1) − φ(xi)<br />

xi+1 − xi<br />

aux métho<strong>de</strong>s spectrales<br />

φ ′ (x) <br />

N<br />

ciΨ ′ i(x)<br />

i=0


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Fonctions sur un ordinateur<br />

Approche simplifiée<br />

Comm<strong>en</strong>t représ<strong>en</strong>ter une fonction sur un ordinateur ?<br />

⇒un ordinateur ne sait gérer que <strong>de</strong>s <strong>en</strong>tiers<br />

Afin <strong>de</strong> représ<strong>en</strong>ter une fonctions φ(x) (par ex. interpoler), on<br />

peut utiliser :<br />

un <strong>en</strong>semble fini <strong>de</strong> ses valeurs {φi} i=0...N sur une grille<br />

{xi} i=0...N ,<br />

un <strong>en</strong>semble fini <strong>de</strong> ses coeffici<strong>en</strong>ts sur une base <strong>de</strong><br />

fonctions φ(x) N<br />

i=0 ciΨi(x).<br />

Afin <strong>de</strong> manipuler une fonction (par ex. dériver), chaque<br />

métho<strong>de</strong> s’appar<strong>en</strong>te :<br />

aux différ<strong>en</strong>ces finies<br />

φ ′ (xi) φ(xi+1) − φ(xi)<br />

xi+1 − xi<br />

aux métho<strong>de</strong>s spectrales<br />

φ ′ (x) <br />

N<br />

ciΨ ′ i(x)<br />

i=0


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Fonctions sur un ordinateur<br />

Approche simplifiée<br />

Comm<strong>en</strong>t représ<strong>en</strong>ter une fonction sur un ordinateur ?<br />

⇒un ordinateur ne sait gérer que <strong>de</strong>s <strong>en</strong>tiers<br />

Afin <strong>de</strong> représ<strong>en</strong>ter une fonctions φ(x) (par ex. interpoler), on<br />

peut utiliser :<br />

un <strong>en</strong>semble fini <strong>de</strong> ses valeurs {φi} i=0...N sur une grille<br />

{xi} i=0...N ,<br />

un <strong>en</strong>semble fini <strong>de</strong> ses coeffici<strong>en</strong>ts sur une base <strong>de</strong><br />

fonctions φ(x) N<br />

i=0 ciΨi(x).<br />

Afin <strong>de</strong> manipuler une fonction (par ex. dériver), chaque<br />

métho<strong>de</strong> s’appar<strong>en</strong>te :<br />

aux différ<strong>en</strong>ces finies<br />

φ ′ (xi) φ(xi+1) − φ(xi)<br />

xi+1 − xi<br />

aux métho<strong>de</strong>s spectrales<br />

φ ′ (x) <br />

N<br />

ciΨ ′ i(x)<br />

i=0


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Converg<strong>en</strong>ce <strong>de</strong>s séries <strong>de</strong> Fourier<br />

φ(x) = 1.5 + cos(x) + sin 7 x<br />

φ(x) <br />

N<br />

aiΨi(x) avec Ψ2k = cos(kx), Ψ2k+1 = sin(kx)<br />

i=0


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Converg<strong>en</strong>ce <strong>de</strong>s séries <strong>de</strong> Fourier<br />

φ(x) = 1.5 + cos(x) + sin 7 x<br />

φ(x) <br />

N<br />

aiΨi(x) avec Ψ2k = cos(kx), Ψ2k+1 = sin(kx)<br />

i=0


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Converg<strong>en</strong>ce <strong>de</strong>s séries <strong>de</strong> Fourier<br />

φ(x) = 1.5 + cos(x) + sin 7 x<br />

φ(x) <br />

N<br />

aiΨi(x) avec Ψ2k = cos(kx), Ψ2k+1 = sin(kx)<br />

i=0


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Converg<strong>en</strong>ce <strong>de</strong>s séries <strong>de</strong> Fourier<br />

φ(x) = 1.5 + cos(x) + sin 7 x<br />

φ(x) <br />

N<br />

aiΨi(x) avec Ψ2k = cos(kx), Ψ2k+1 = sin(kx)<br />

i=0


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Converg<strong>en</strong>ce <strong>de</strong>s séries <strong>de</strong> Fourier<br />

φ(x) = 1.5 + cos(x) + sin 7 x<br />

φ(x) <br />

N<br />

aiΨi(x) avec Ψ2k = cos(kx), Ψ2k+1 = sin(kx)<br />

i=0


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Converg<strong>en</strong>ce <strong>de</strong>s séries <strong>de</strong> Fourier<br />

φ(x) = 1.5 + cos(x) + sin 7 x<br />

Relative accuracy (max-norm)<br />

1<br />

0,01<br />

0,0001<br />

1e-06<br />

1e-08<br />

1e-10<br />

1e-12<br />

1e-14<br />

1e-16<br />

0 10 20 30 40 50 60 70<br />

Number of coeffici<strong>en</strong>ts N


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Converg<strong>en</strong>ce <strong>de</strong> la dérivée<br />

φ(x) = 1.5 + cos(x) + sin 7 x<br />

φ ′ (x) <br />

N<br />

i=0<br />

aiΨ ′ i(x) avec Ψ ′ 2k = −k sin(kx), Ψ′ 2k+1<br />

= k cos(kx)


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Converg<strong>en</strong>ce <strong>de</strong> la dérivée<br />

φ(x) = 1.5 + cos(x) + sin 7 x<br />

φ ′ (x) <br />

N<br />

i=0<br />

aiΨ ′ i(x) avec Ψ ′ 2k = −k sin(kx), Ψ′ 2k+1<br />

= k cos(kx)


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Converg<strong>en</strong>ce <strong>de</strong> la dérivée<br />

φ(x) = 1.5 + cos(x) + sin 7 x<br />

φ ′ (x) <br />

N<br />

i=0<br />

aiΨ ′ i(x) avec Ψ ′ 2k = −k sin(kx), Ψ′ 2k+1<br />

= k cos(kx)


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Converg<strong>en</strong>ce <strong>de</strong> la dérivée<br />

φ(x) = 1.5 + cos(x) + sin 7 x<br />

φ ′ (x) <br />

N<br />

i=0<br />

aiΨ ′ i(x) avec Ψ ′ 2k = −k sin(kx), Ψ′ 2k+1<br />

= k cos(kx)


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Converg<strong>en</strong>ce <strong>de</strong> la dérivée<br />

φ(x) = 1.5 + cos(x) + sin 7 x<br />

φ ′ (x) <br />

N<br />

i=0<br />

aiΨ ′ i(x) avec Ψ ′ 2k = −k sin(kx), Ψ′ 2k+1<br />

= k cos(kx)


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Converg<strong>en</strong>ce <strong>de</strong> la dérivée<br />

φ(x) = 1.5 + cos(x) + sin 7 x<br />

Relative accuracy (max-norm)<br />

1<br />

0,01<br />

0,0001<br />

1e-06<br />

1e-08<br />

1e-10<br />

1e-12<br />

1e-14<br />

1e-16<br />

0 10 20 30 40 50 60 70<br />

Number of coeffici<strong>en</strong>ts N


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Phénomène <strong>de</strong> Gibbs<br />

pas <strong>de</strong> converg<strong>en</strong>ce pour <strong>de</strong>s fonctions discontinues (ou<br />

non-périodiques) !<br />

φ(x) =<br />

x pour x ∈ [0, π]<br />

x − 2π pour x ∈]π, 2π[


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Phénomène <strong>de</strong> Gibbs<br />

pas <strong>de</strong> converg<strong>en</strong>ce pour <strong>de</strong>s fonctions discontinues (ou<br />

non-périodiques) !<br />

φ(x) =<br />

x pour x ∈ [0, π]<br />

x − 2π pour x ∈]π, 2π[


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Phénomène <strong>de</strong> Gibbs<br />

pas <strong>de</strong> converg<strong>en</strong>ce pour <strong>de</strong>s fonctions discontinues (ou<br />

non-périodiques) !<br />

φ(x) =<br />

x pour x ∈ [0, π]<br />

x − 2π pour x ∈]π, 2π[


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Phénomène <strong>de</strong> Gibbs<br />

pas <strong>de</strong> converg<strong>en</strong>ce pour <strong>de</strong>s fonctions discontinues (ou<br />

non-périodiques) !<br />

φ(x) =<br />

x pour x ∈ [0, π]<br />

x − 2π pour x ∈]π, 2π[


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Phénomène <strong>de</strong> Gibbs<br />

pas <strong>de</strong> converg<strong>en</strong>ce pour <strong>de</strong>s fonctions discontinues (ou<br />

non-périodiques) !<br />

φ(x) =<br />

x pour x ∈ [0, π]<br />

x − 2π pour x ∈]π, 2π[


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Phénomène <strong>de</strong> Gibbs<br />

pas <strong>de</strong> converg<strong>en</strong>ce pour <strong>de</strong>s fonctions discontinues (ou<br />

non-périodiques) !<br />

φ(x) =<br />

x pour x ∈ [0, π]<br />

x − 2π pour x ∈]π, 2π[


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Phénomène <strong>de</strong> Gibbs<br />

pas <strong>de</strong> converg<strong>en</strong>ce pour <strong>de</strong>s fonctions discontinues (ou<br />

non-périodiques) !<br />

φ(x) =<br />

x pour x ∈ [0, π]<br />

x − 2π pour x ∈]π, 2π[


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Phénomène <strong>de</strong> Gibbs<br />

pas <strong>de</strong> converg<strong>en</strong>ce pour <strong>de</strong>s fonctions discontinues (ou<br />

non-périodiques) !<br />

φ(x) =<br />

x pour x ∈ [0, π]<br />

x − 2π pour x ∈]π, 2π[


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Phénomène <strong>de</strong> Gibbs<br />

pas <strong>de</strong> converg<strong>en</strong>ce pour <strong>de</strong>s fonctions discontinues (ou<br />

non-périodiques) !<br />

φ(x) =<br />

x pour x ∈ [0, π]<br />

x − 2π pour x ∈]π, 2π[


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Phénomène <strong>de</strong> Gibbs<br />

pas <strong>de</strong> converg<strong>en</strong>ce pour <strong>de</strong>s fonctions discontinues (ou<br />

non-périodiques) !<br />

φ(x) =<br />

x pour x ∈ [0, π]<br />

x − 2π pour x ∈]π, 2π[


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Phénomène <strong>de</strong> Gibbs<br />

pas <strong>de</strong> converg<strong>en</strong>ce pour <strong>de</strong>s fonctions discontinues (ou<br />

non-périodiques) !<br />

φ(x) =<br />

x pour x ∈ [0, π]<br />

x − 2π pour x ∈]π, 2π[


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Phénomène <strong>de</strong> Gibbs<br />

pas <strong>de</strong> converg<strong>en</strong>ce pour <strong>de</strong>s fonctions discontinues (ou<br />

non-périodiques) !<br />

φ(x) =<br />

x pour x ∈ [0, π]<br />

x − 2π pour x ∈]π, 2π[


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Phénomène <strong>de</strong> Gibbs<br />

pas <strong>de</strong> converg<strong>en</strong>ce pour <strong>de</strong>s fonctions discontinues (ou<br />

non-périodiques) !<br />

φ(x) =<br />

x pour x ∈ [0, π]<br />

x − 2π pour x ∈]π, 2π[


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Interpolation polynomiale<br />

y<br />

D’après le théorème <strong>de</strong> Weierstrass, toute fonction continue<br />

peut être approximée comme limite d’une suite <strong>de</strong> fonctions<br />

polynomiales.<br />

En pratique, si l’on connaît les valeurs <strong>de</strong> la fonctions sur <strong>de</strong>s<br />

points <strong>de</strong> grille {xi} i=0...N , on peut interpoler par <strong>de</strong>s<br />

polynômes <strong>de</strong> Lagrange :<br />

1<br />

0.5<br />

0<br />

-0.5<br />

N=4<br />

f = 1/(1+16x 2 )<br />

<strong>Un</strong>iform interpolant<br />

-1 -0.5 0 0.5 1<br />

x<br />

li(x) =<br />

N<br />

x − xj<br />

xi − xj<br />

j=0,j=i<br />

mais une grille uniforme<br />

n’est pas un bon choix<br />

⇒phénomène <strong>de</strong> Runge


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Interpolation polynomiale<br />

y<br />

D’après le théorème <strong>de</strong> Weierstrass, toute fonction continue<br />

peut être approximée comme limite d’une suite <strong>de</strong> fonctions<br />

polynomiales.<br />

En pratique, si l’on connaît les valeurs <strong>de</strong> la fonctions sur <strong>de</strong>s<br />

points <strong>de</strong> grille {xi} i=0...N , on peut interpoler par <strong>de</strong>s<br />

polynômes <strong>de</strong> Lagrange :<br />

1<br />

0.5<br />

0<br />

-0.5<br />

N=4<br />

f = 1/(1+16x 2 )<br />

<strong>Un</strong>iform interpolant<br />

-1 -0.5 0 0.5 1<br />

x<br />

li(x) =<br />

N<br />

x − xj<br />

xi − xj<br />

j=0,j=i<br />

mais une grille uniforme<br />

n’est pas un bon choix<br />

⇒phénomène <strong>de</strong> Runge


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Interpolation polynomiale<br />

y<br />

D’après le théorème <strong>de</strong> Weierstrass, toute fonction continue<br />

peut être approximée comme limite d’une suite <strong>de</strong> fonctions<br />

polynomiales.<br />

En pratique, si l’on connaît les valeurs <strong>de</strong> la fonctions sur <strong>de</strong>s<br />

points <strong>de</strong> grille {xi} i=0...N , on peut interpoler par <strong>de</strong>s<br />

polynômes <strong>de</strong> Lagrange :<br />

1<br />

0.5<br />

0<br />

-0.5<br />

N=13<br />

f=1/(1+16x 2 )<br />

<strong>Un</strong>iform interpolant<br />

-1 -0.5 0 0.5 1<br />

x<br />

li(x) =<br />

N<br />

x − xj<br />

xi − xj<br />

j=0,j=i<br />

mais une grille uniforme<br />

n’est pas un bon choix<br />

⇒phénomène <strong>de</strong> Runge


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Polynômes orthogonaux<br />

Les solutions (λi, ui)i∈N d’un problème <strong>de</strong> Sturm-Liouville<br />

singulier sur l’intervalle x ∈ [−1, 1] :<br />

avec p > 0, C 1 , p(±1) = 0<br />

− pu ′ ′ + qu = λwu,<br />

form<strong>en</strong>t une famille orthogonale par rapport au poids w :<br />

(ui, uj) =<br />

1<br />

−1<br />

ui(x)uj(x)w(x)dx = 0 pour m = n,<br />

form<strong>en</strong>t une base spectrale telle que, pour f(x) régulière<br />

(C∞ )<br />

N<br />

f(x) ciui(x)<br />

i=0<br />

converge plus vite que toute puissance <strong>de</strong> 1/N.<br />

Les polynômes <strong>de</strong> Tchebychev, Leg<strong>en</strong>dre et, plus généralem<strong>en</strong>t<br />

<strong>de</strong> Jacobi font partie <strong>de</strong> cette catégorie.


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Polynômes orthogonaux<br />

Les solutions (λi, ui)i∈N d’un problème <strong>de</strong> Sturm-Liouville<br />

singulier sur l’intervalle x ∈ [−1, 1] :<br />

avec p > 0, C 1 , p(±1) = 0<br />

− pu ′ ′ + qu = λwu,<br />

form<strong>en</strong>t une famille orthogonale par rapport au poids w :<br />

(ui, uj) =<br />

1<br />

−1<br />

ui(x)uj(x)w(x)dx = 0 pour m = n,<br />

form<strong>en</strong>t une base spectrale telle que, pour f(x) régulière<br />

(C∞ )<br />

N<br />

f(x) ciui(x)<br />

i=0<br />

converge plus vite que toute puissance <strong>de</strong> 1/N.<br />

Les polynômes <strong>de</strong> Tchebychev, Leg<strong>en</strong>dre et, plus généralem<strong>en</strong>t<br />

<strong>de</strong> Jacobi font partie <strong>de</strong> cette catégorie.


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Polynômes orthogonaux<br />

Les solutions (λi, ui)i∈N d’un problème <strong>de</strong> Sturm-Liouville<br />

singulier sur l’intervalle x ∈ [−1, 1] :<br />

avec p > 0, C 1 , p(±1) = 0<br />

− pu ′ ′ + qu = λwu,<br />

form<strong>en</strong>t une famille orthogonale par rapport au poids w :<br />

(ui, uj) =<br />

1<br />

−1<br />

ui(x)uj(x)w(x)dx = 0 pour m = n,<br />

form<strong>en</strong>t une base spectrale telle que, pour f(x) régulière<br />

(C∞ )<br />

N<br />

f(x) ciui(x)<br />

i=0<br />

converge plus vite que toute puissance <strong>de</strong> 1/N.<br />

Les polynômes <strong>de</strong> Tchebychev, Leg<strong>en</strong>dre et, plus généralem<strong>en</strong>t<br />

<strong>de</strong> Jacobi font partie <strong>de</strong> cette catégorie.


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Polynômes orthogonaux<br />

Les solutions (λi, ui)i∈N d’un problème <strong>de</strong> Sturm-Liouville<br />

singulier sur l’intervalle x ∈ [−1, 1] :<br />

avec p > 0, C 1 , p(±1) = 0<br />

− pu ′ ′ + qu = λwu,<br />

form<strong>en</strong>t une famille orthogonale par rapport au poids w :<br />

(ui, uj) =<br />

1<br />

−1<br />

ui(x)uj(x)w(x)dx = 0 pour m = n,<br />

form<strong>en</strong>t une base spectrale telle que, pour f(x) régulière<br />

(C∞ )<br />

N<br />

f(x) ciui(x)<br />

i=0<br />

converge plus vite que toute puissance <strong>de</strong> 1/N.<br />

Les polynômes <strong>de</strong> Tchebychev, Leg<strong>en</strong>dre et, plus généralem<strong>en</strong>t<br />

<strong>de</strong> Jacobi font partie <strong>de</strong> cette catégorie.


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Quadrature <strong>de</strong> Gauss<br />

Afin <strong>de</strong> représ<strong>en</strong>ter une fonction f(x) à l’ai<strong>de</strong> <strong>de</strong> ses<br />

coeffici<strong>en</strong>ts {ci} i=0...N , il suffit d’être capable <strong>de</strong> calculer<br />

∀i, ci =<br />

1<br />

−1 f(x)ui(x)w(x)dx<br />

1<br />

−1 (ui(x)) 2 w(x)dx .<br />

En pratique, il est avantageux d’utiliser la quadrature <strong>de</strong> Gauss<br />

(ici : Gauss-Lobatto) : étant donnés w(x) et N, on peut trouver<br />

<strong>de</strong>ux familles {wi} k=0...N et {xi} k=0...N ∈ [−1, 1] telles que<br />

∀g ∈ P2N−1,<br />

1<br />

−1<br />

g(x)w(x)dx =<br />

N<br />

g(xk)wk.<br />

k=0


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Quadrature <strong>de</strong> Gauss<br />

Afin <strong>de</strong> représ<strong>en</strong>ter une fonction f(x) à l’ai<strong>de</strong> <strong>de</strong> ses<br />

coeffici<strong>en</strong>ts {ci} i=0...N , il suffit d’être capable <strong>de</strong> calculer<br />

∀i, ci =<br />

1<br />

−1 f(x)ui(x)w(x)dx<br />

1<br />

−1 (ui(x)) 2 w(x)dx .<br />

En pratique, il est avantageux d’utiliser la quadrature <strong>de</strong> Gauss<br />

(ici : Gauss-Lobatto) : étant donnés w(x) et N, on peut trouver<br />

<strong>de</strong>ux familles {wi} k=0...N et {xi} k=0...N ∈ [−1, 1] telles que<br />

∀g ∈ P2N−1,<br />

1<br />

−1<br />

g(x)w(x)dx =<br />

N<br />

g(xk)wk.<br />

k=0


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Exemple avec les polynômes <strong>de</strong><br />

Tchebychev<br />

φ(x) = (1 + 2 sin(5x)) /(1 + x 2 )<br />

φ(x) <br />

N<br />

aiΨi(x) avec Ψk = Tk(x) = cos(k arccos(x))<br />

i=0


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Exemple avec les polynômes <strong>de</strong><br />

Tchebychev<br />

φ(x) = (1 + 2 sin(5x)) /(1 + x 2 )<br />

φ(x) <br />

N<br />

aiΨi(x) avec Ψk = Tk(x) = cos(k arccos(x))<br />

i=0


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Exemple avec les polynômes <strong>de</strong><br />

Tchebychev<br />

φ(x) = (1 + 2 sin(5x)) /(1 + x 2 )<br />

φ(x) <br />

N<br />

aiΨi(x) avec Ψk = Tk(x) = cos(k arccos(x))<br />

i=0


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Exemple avec les polynômes <strong>de</strong><br />

Tchebychev<br />

φ(x) = (1 + 2 sin(5x)) /(1 + x 2 )<br />

φ(x) <br />

N<br />

aiΨi(x) avec Ψk = Tk(x) = cos(k arccos(x))<br />

i=0


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Exemple avec les polynômes <strong>de</strong><br />

Tchebychev<br />

φ(x) = (1 + 2 sin(5x)) /(1 + x 2 )<br />

φ(x) <br />

N<br />

aiΨi(x) avec Ψk = Tk(x) = cos(k arccos(x))<br />

i=0


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Exemple avec les polynômes <strong>de</strong><br />

Tchebychev<br />

φ(x) = (1 + 2 sin(5x)) /(1 + x 2 )<br />

Relative accuracy (max - norm)<br />

1<br />

0,01<br />

0,0001<br />

1e-06<br />

1e-08<br />

1e-10<br />

1e-12<br />

1e-14<br />

1e-16<br />

10 20 30 40 50 60<br />

Number of coeffici<strong>en</strong>ts N


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff. Étape<br />

n o 1 :<br />

Transformée <strong>de</strong> Tchebychev,<br />

interpolation et dérivée


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Polynômes <strong>de</strong> Tchebychev<br />

Définition<br />

Les fonctions associées aux polynômes <strong>de</strong> Tchebychev<br />

{Tn(x)} n∈N sont définies par :<br />

∀x ∈ [−1, 1], Tn(x) = cos (n arccos x) .<br />

〈Tn, Tp〉 =<br />

1<br />

−1<br />

Tn(x)Tp(x)<br />

√ 1 − x 2<br />

Ils sont orthogonaux par<br />

rapport au poids<br />

w(x) =<br />

1<br />

√ 1 − x 2<br />

π<br />

dx = (1 + δ0n)δnp.<br />

2


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Polynômes <strong>de</strong> Tchebychev<br />

Calcul <strong>de</strong>s coeffici<strong>en</strong>ts<br />

Les coeffici<strong>en</strong>ts peuv<strong>en</strong>t se calculer par quadrature <strong>de</strong> Gauss<br />

-Lobatto. Les poids wi et les points <strong>de</strong> grille sont connus<br />

analytiquem<strong>en</strong>t. Si<br />

N<br />

∀x ∈ [−1, 1], f(x) ciTi(x),<br />

i=0<br />

alors on a, avec une très bonne approximation :<br />

ci 1<br />

N<br />

f(xk)Ti(xk)wk,<br />

où<br />

xk = − cos<br />

γi<br />

k=0<br />

<br />

kπ<br />

, w0 = wN =<br />

N<br />

π<br />

2N , wk = π<br />

(k = 1 . . . N−1);<br />

N<br />

et γi =<br />

N<br />

k=0<br />

T 2<br />

i (xk)wk.


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Polynômes <strong>de</strong> Tchebychev<br />

Interpolation<br />

Pour calculer la valeur <strong>de</strong> Tn <strong>en</strong> un point x, on utilise la<br />

récurr<strong>en</strong>ce :<br />

T0(x) = 1, T1(x) = x;<br />

∀x ∈ [−1, 1], ∀n ≥ 2, Tn(x) = 2xTn−1(x) − Tn−2(x).<br />

Cela permet <strong>de</strong> calculer les 6 premiers polynômes <strong>de</strong><br />

Tchebychev...<br />

T0(x) = 1,<br />

T1(x) = x,<br />

T2(x) = 2x 2 − 1,<br />

T3(x) = 4x 3 − 3x,<br />

T4(x) = 8x 4 − 8x 2 + 1,<br />

T5(x) = 16x 5 − 20x 3 + 5x,<br />

T6(x) = 32x 6 − 48x 4 + 18x 2 − 1.


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Polynômes <strong>de</strong> Tchebychev<br />

Dérivation<br />

Si on approxime<br />

f(x) <br />

N<br />

i=0<br />

ci Ti(x),<br />

alors la dérivée peut être approximée <strong>de</strong> la même manière :<br />

avec<br />

di =<br />

f ′ (x) <br />

2<br />

1 + δ0i<br />

N<br />

i=0<br />

di Ti(x),<br />

N<br />

k=i+1, (k+i) impair<br />

k ck.<br />

Cette formule vi<strong>en</strong>t <strong>de</strong> la dérivation <strong>de</strong> la relation <strong>de</strong> récurr<strong>en</strong>ce.


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

TPn o 6<br />

une classe <strong>de</strong> fonctions<br />

En partant <strong>de</strong>s classes Tab et Matrice, implém<strong>en</strong>ter une classe<br />

Fonction représ<strong>en</strong>tant <strong>de</strong>s fonctions définies sur [−1, 1] :<br />

chaque instance <strong>de</strong> la classe conti<strong>en</strong>dra la grille <strong>de</strong> points<br />

<strong>de</strong> Gauss-Lobatto et les valeurs <strong>de</strong> la fonctions <strong>en</strong> ces<br />

points ;<br />

les coeffici<strong>en</strong>ts seront calculés par quadrature <strong>de</strong><br />

Gauss-Lobatto et stockés comme membres ;<br />

la classe possé<strong>de</strong>ra une métho<strong>de</strong> <strong>de</strong> calcul <strong>de</strong> la valeur <strong>en</strong><br />

un point quelconque <strong>de</strong> [−1, 1] et <strong>de</strong> transformation<br />

inverse (coeffici<strong>en</strong>ts → valeurs aux points <strong>de</strong> grille) ;<br />

elle aura aussi une métho<strong>de</strong> r<strong>en</strong>voyant la Fonction<br />

dérivée.<br />

Pour un ≪ cahier <strong>de</strong>s charges ≫, voir le fichier<br />

Donnees cheb/ppl.cpp.


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Étape n o 2 :<br />

Résolution d’équations<br />

différ<strong>en</strong>tielles linéaires à coeffici<strong>en</strong>ts<br />

constants


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Opérateurs différ<strong>en</strong>tiels linéaires<br />

⎛<br />

⎜<br />

⎝<br />

f ↦→ f ′<br />

⎞ ⎛<br />

c0<br />

.<br />

cN<br />

⎟<br />

⎠<br />

⎜<br />

⎝<br />

d0<br />

.<br />

dN<br />

⎞<br />

⎟<br />

⎠ =<br />

⎡<br />

⎣ D<br />

Tout opérateur différ<strong>en</strong>tiel linéaire :<br />

⎤<br />

⎛<br />

c0<br />

⎦ ⎜<br />

× ⎝ .<br />

f ↦→ af ′′ + bf ′ + c (a, b, c) ∈ R 3 ,<br />

peut être vu comme une matrice.<br />

cN<br />

⎞<br />

⎟<br />

⎠<br />

L’inversion <strong>de</strong> cet opérateur ⇐⇒ inversion d’un système<br />

linéaire<br />

La matrice générale est-elle inversible ?


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Opérateurs différ<strong>en</strong>tiels linéaires<br />

⎛<br />

⎜<br />

⎝<br />

f ↦→ f ′<br />

⎞ ⎛<br />

c0<br />

.<br />

cN<br />

⎟<br />

⎠<br />

⎜<br />

⎝<br />

d0<br />

.<br />

dN<br />

⎞<br />

⎟<br />

⎠ =<br />

⎡<br />

⎣ D<br />

Tout opérateur différ<strong>en</strong>tiel linéaire :<br />

⎤<br />

⎛<br />

c0<br />

⎦ ⎜<br />

× ⎝ .<br />

f ↦→ af ′′ + bf ′ + c (a, b, c) ∈ R 3 ,<br />

peut être vu comme une matrice.<br />

cN<br />

⎞<br />

⎟<br />

⎠<br />

L’inversion <strong>de</strong> cet opérateur ⇐⇒ inversion d’un système<br />

linéaire<br />

La matrice générale est-elle inversible ?


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

Conditions initiales<br />

La matrice ≪ brute ≫ n’est pas inversible, il n’y a pas unicité <strong>de</strong><br />

la solution tant que les conditions initiales n’ont pas été<br />

spécifiées.<br />

Métho<strong>de</strong> τ<br />

Pour chaque condition, une ligne du système différ<strong>en</strong>tiel est<br />

remplacée par la condition, exprimée <strong>en</strong> termes <strong>de</strong>s coeffici<strong>en</strong>ts<br />

inconnus.<br />

On choisit évi<strong>de</strong>mm<strong>en</strong>t la ligne concernant le plus haut <strong>de</strong>gré<br />

du système différ<strong>en</strong>tiel.<br />

En pratique :<br />

pour une condition du type f(x0) = y0, on remplace les<br />

aNi <strong>de</strong> l’opérateur par Ti(x0) et le N e coeffici<strong>en</strong>t du<br />

membre <strong>de</strong> droite par y0 ;<br />

pour f ′ (x0) = y0, on fait la même chose, mais avec<br />

T ′ (x0).


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

TPn o 7<br />

les classes d’équations différ<strong>en</strong>tielles<br />

Concevoir une classe abstraite Equa diff cont<strong>en</strong>ant :<br />

n, le <strong>de</strong>gré <strong>de</strong> représ<strong>en</strong>tation spectrale <strong>de</strong>s fonctions et une<br />

Matrice cont<strong>en</strong>ant l’opérateur ;<br />

le vecteur (Tab) membre <strong>de</strong> droite <strong>de</strong> l’équation et le<br />

nombre <strong>de</strong> conditions au bord à imposer ;<br />

<strong>de</strong>s fonctions impose conditions bord(), resout() ;<br />

une fonction calcule operateur homog<strong>en</strong>e() virtuelle<br />

pure.<br />

À partir <strong>de</strong> cette classe <strong>de</strong> base, faire <strong>de</strong>ux classes dérivées :<br />

Equa un représ<strong>en</strong>tant les équations différ<strong>en</strong>tielles du<br />

premier ordre ay ′ + by = f, où (a, b) ∈ R 2 et la fonction f<br />

sont donnés. (a, b) seront les nouvelles données et la<br />

fonctions virtuelle pure définie.<br />

Equa <strong>de</strong>ux représ<strong>en</strong>tant les équations différ<strong>en</strong>tielles du<br />

second ordre ay ′′ + by ′ + cy = f, où (a, b, c) ∈ R 3 et la<br />

fonction f sont donnés. . .


Projet <strong>de</strong><br />

<strong>C++</strong><br />

Jérôme Novak<br />

Introduction<br />

Tchebychev<br />

Equa. diff.<br />

TPn o 7<br />

les classes d’équations différ<strong>en</strong>tielles<br />

Concevoir une classe abstraite Equa diff cont<strong>en</strong>ant :<br />

n, le <strong>de</strong>gré <strong>de</strong> représ<strong>en</strong>tation spectrale <strong>de</strong>s fonctions et une<br />

Matrice cont<strong>en</strong>ant l’opérateur ;<br />

le vecteur (Tab) membre <strong>de</strong> droite <strong>de</strong> l’équation et le<br />

nombre <strong>de</strong> conditions au bord à imposer ;<br />

<strong>de</strong>s fonctions impose conditions bord(), resout() ;<br />

une fonction calcule operateur homog<strong>en</strong>e() virtuelle<br />

pure.<br />

À partir <strong>de</strong> cette classe <strong>de</strong> base, faire <strong>de</strong>ux classes dérivées :<br />

Equa un représ<strong>en</strong>tant les équations différ<strong>en</strong>tielles du<br />

premier ordre ay ′ + by = f, où (a, b) ∈ R 2 et la fonction f<br />

sont donnés. (a, b) seront les nouvelles données et la<br />

fonctions virtuelle pure définie.<br />

Equa <strong>de</strong>ux représ<strong>en</strong>tant les équations différ<strong>en</strong>tielles du<br />

second ordre ay ′′ + by ′ + cy = f, où (a, b, c) ∈ R 3 et la<br />

fonction f sont donnés. . .

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!