NSEKE Yvanna Projet
NSEKE Yvanna Projet
Dans la première partie, nous traitons l'approximation de l'équation de transport à vitesse constante avec les cinq schémas vus en cours. Dans la seconde, nous présentons la méthode des éléments finis de degrés plus
élevés.
SOMMAIRE
1.1 Approximation de l'équation de transport à vitesse constante
1.1.1 Présentation du problème et des schémas
1.2.2 Convergence
In [9]:
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from IPython.display import Image, display
Soit un temps final T > 0 , nous cherchons une approximation de, ū : R × (0, T ) → R , solution du problème suivant,
∂t ū(x, t) + a ∂x ū(x, t) = 0, ∀(x, t) ∈ R × (0, T ),
{ (P)
ū(x, 0) = uini (x), ∀x ∈ R.
On rappelle que la solution de (P) est donnée par ū(x,t) = uini (x-at), ∀(x,t) ∈ R × (0, T ) . Afin de travailler sur un domaine d’espace de dimension finie, on prendra une condition initiale uini 1-périodique.
Nous savons que la fonction uini est 1-périodique en espace. Utilisons sa périodicité pour montrer celle de ū,
Vérifions maintenant que uini (x) = sin(2πx) est aussi 1-périodique en espace:
uini (x + 1) = sin(2π(x + 1)) = sin(2πx) cos(2π) + sin(2π) cos(2πx) = sin(2πx) = uini (x)
1 Δt
T
Grâce à ces valeurs, nous commençons par définir Δx = J
le pas d'espace, Δt = λΔx le pas de temps ( avec λ =
Δx
), xj = jΔx une suite de points et le point avec le numéro d’index maximum du temps M = ⌊ ⌋ .
Δt
Nous avons déjà la donnée initiale. A présent, introduisons les cinq schémas sur lesquels nous allons travailler ainsi que leurs coefficients.
1. Schéma centré:
n+1 n
λa n n
u = u − (u − u )
j j j+1 j−1
2
λa λa
dont les coefficients sont: c−1 =
2
, c0 ,
= 1 c1 = −
2
n+1 n n n
u = u − λa(u − u )
j j j j−1
n+1 n n n
u = u − λa(u − u )
j j j+1 j
1. Schéma de Lax-Friedrichs:
1 n n
λa n n
n+1
u = (u − u ) − (u − u )
j j+1 j−1 j+1 j−1
2 2
1+λa 1−λa
dont les coefficients sont: c−1 = , c0 ,
= 0 c1 =
2 2
1. Schéma de Lax-Wendroff:
2 2
λa n n
λ a n n
n+1 n n
u = u − (u − u ) + (u − 2u + u )
j j j+1 j−1 j+1 j j−1
2 2
2 2 2 2
λa+λ a λ a −λa
dont les coefficients sont: c−1 = , c0 = 1 − λ a
2 2
, c1 =
2 2
Notons que tous les schémas présentés sont des schémas à 3 points, c’est-à-dire qu’ils n’utilisent qu’au plus, les valeurs aux trois points xj−1 , xj et xj+1 pour avancer en temps.
1. Pour le schéma centré, le seul moment où les deux solutions ont l'air très proches est pour J = 100. Sinon elles sont relativement proches. Pour le nombre de pas J = 200, on voit une différence extravagante. Nous
pouvons penser que le schéma sera instable et qu'il n'est pas adapté. Nous traiterons le cas d'instabilité un peu plus tard.
In [10]:
#code pour afficher les images
images = ["C:\DOCS\Projet\images\m0/sc25.png", "C:\DOCS\Projet\images\m1/sc50.png", "C:\DOCS\Projet\images\m2/sc100.png", "C:\DOCS\Projet\images\m3/sc200.png"]
for img in images:
display(Image(filename=img))
1. Pour le schéma décentré à gauche, nous pouvons voir que plus le nombre de pas augmente, plus les solutions sont proches et même égales en certains points. Nous pouvons, ici, penser que ce schéma sera stable et
adapté. Peut-être qu'il sera même convergent.
In [11]:
#code pour afficher les images
images = ["C:\DOCS\Projet\images\m0/sdg25.png", "C:\DOCS\Projet\images\m1/sdg50.png", "C:\DOCS\Projet\images\m2/sdg100.png", "C:\DOCS\Projet\images\m3/sdg200.png"]
for img in images:
display(Image(filename=img))
1. Pour le schéma décentré à droite, plus le nombre de pas diminue, plus la variation de la solution numérique est faible et ainsi ce rapproche de celle de la solution analytique. Cependant notre but est d'observer le
comportement des schémas lorsque le nombre de pas augmente et non l'inverse. De plus, ce schéma montre une divergence (dès J = 50) beaucoup plus amplifiée que celle du schéma centré.
In [12]:
#code pour afficher les images
images = ["C:\DOCS\Projet\images\m0/sdd25.png", "C:\DOCS\Projet\images\m1/sdd50.png", "C:\DOCS\Projet\images\m2/sdd100.png", "C:\DOCS\Projet\images\m3/sdd200.png"]
for img in images:
display(Image(filename=img))
1. Pour le schéma de Lax-Friedrichs, nous pouvons voir que plus le nombre de pas augmente, plus les solutions sont proches et même égales en certains points sans pour autant coïncider avec la solution analytique. C'est
comme pour le schéma décentré à gauche sauf que pour ce schéma, la solution numérique n'approche pas aussi bien la solution analytique. Il est possible qu'en augmentant la valeur de J, nous nous retrouvons avec une
égalité entre les deux solutions. Nous pensons alors que ce schéma peut être stable.
In [13]:
#code pour afficher les images
images = ["C:\DOCS\Projet\images\m0/slf25.png", "C:\DOCS\Projet\images\m1/slf50.png", "C:\DOCS\Projet\images\m2/slf100.png", "C:\DOCS\Projet\images\m3/slf200.png"]
for img in images:
display(Image(filename=img))
1. Pour le schéma de Lax-Wendroff, la solution numérique et la solution analytique concordent en tout point à partir d'un nombre de pas strictement supérieur à 25. Pour J = 25, les deux solutions sont égales en certains
points mais pour la plupart elles sont très proches. Ici aussi, on peut soupçonner le schéma d'être stable.
In [14]:
#code pour afficher les images
images = ["C:\DOCS\Projet\images\m0/slw25.png", "C:\DOCS\Projet\images\m1/slw50.png", "C:\DOCS\Projet\images\m2/slw100.png", "C:\DOCS\Projet\images\m3/slw200.png"]
for img in images:
display(Image(filename=img))
Ce sont, pour l'instant, les schémas décentré à gauche, de Lax-Friedrichs et de Lax-Wendroff qui sont les plus prometteurs pour la stabilité et sûrement la convergence. De plus, ils ont l'air plus adapté que les schémas centré
et décentré à droite. Ne tirons pas de conclusion trop vite et continuons de les analyser!
1. Schéma centré:
λa λa
⎛ 1 − 0 ⋯ ⎞
2 2
⎜ ⎟
⎜ λa λa ⎟
⎜ 1 − ⋱ ⋮ ⎟
2 2
⎜ ⎟
⎜ ⎟
⎜ λa ⎟
Qc = ⎜ ⎟ , Qc ∈ M(1,…,J )2 (R)
0 1 ⋱ 0
⎜ 2 ⎟
⎜ ⎟
⎜ λa
⎟
⎜ ⋮ ⋱ ⋱ ⋱ − ⎟
⎜ 2 ⎟
λa λa
⎝− ⋯ 0 1 ⎠
2 2
1 − λa 0 0 ⋯ λa
⎛ ⎞
⎜ ⎟
⎜ λa 1 − λa 0 ⋱ ⋮ ⎟
⎜ ⎟
⎜ ⎟
Qdg = ⎜
⎜
⎟,Q
⎟ dg ∈ M(1,…,J )2 (R).
0 λa 1 − λa ⋱ 0
⎜ ⎟
⎜ ⎟
⎜ ⎟
⎜ ⋮ ⋱ ⋱ ⋱ 0 ⎟
⎝ ⎠
0 ⋯ 0 λa 1 − λa
1 + λa −λa 0 ⋯ 0
⎛ ⎞
⎜ ⎟
⎜ 0 1 + λa −λa ⋱ ⋮ ⎟
⎜ ⎟
⎜ ⎟
Qdd = ⎜ ⎟,Q ∈ M(1,…,J )2 (R).
⎜ 0 0 1 + λa ⋱ 0 ⎟ dd
⎜ ⎟
⎜ ⎟
⎜ ⎟
⎜ ⋮ ⋱ ⋱ ⋱ −λa ⎟
⎝ ⎠
−λa ⋯ 0 0 1 + λa
1. Schéma de Lax-Friedrichs:
1−λa 1+λa
⎛ 0 0 ⋯ ⎞
2 2
⎜ ⎟
⎜ 1+λa 1−λa ⎟
⎜ 0 ⋱ ⋮ ⎟
2 2
⎜ ⎟
⎜ ⎟
⎜ 1+λa ⎟
QLF = , QLF ∈ M(1,…,J )2 (R).
⎜ 0 0 ⋱ 0 ⎟
⎜ 2 ⎟
⎜ ⎟
⎜ 1−λa
⎟
⎜ ⋮ ⋱ ⋱ ⋱ ⎟
⎜ 2 ⎟
1−λa 1+λa
⎝ ⋯ 0 0 ⎠
2 2
1. Schéma Lax-Wendroff:
2 2 2 2
λ a −λa λ a +λa
2 2
⎛1 − λ a 0 ⋯ ⎞
2 2
⎜ ⎟
⎜ 2 2
λ a +λa
2
λ a −λa
2 ⎟
2 2
⎜ 1 − λ a ⋱ ⋮ ⎟
⎜ 2 2 ⎟
⎜ ⎟
⎜ 2 2 ⎟
λ a +λa
QLW = ⎜ 2 2 ⎟ , QLW ∈ M(1,…,J )2 (R).
⎜ 0 1 − λ a ⋱ 0 ⎟
2
⎜ ⎟
⎜ ⎟
2 2
⎜ λ a −λa ⎟
⎜ ⋮ ⋱ ⋱ ⋱ ⎟
⎜ 2 ⎟
2 2 2 2
λ a −λa λ a +λa
2 2
⎝ ⋯ 0 1 − λ a ⎠
2 2
"Pour le schéma centré, la norme matricielle de Q est: 1.8 en norme infinie et 1.28062484748657 en norme L2."
"Pour le schéma décentré à gauche, la norme matricielle de Q est: 1.0 en norme infinie et 1.0 en norme L2."
"Pour le schéma décentré à droite, la norme matricielle de Q est: 2.6 en norme infinie et 2.5999999999999996 en norme L2."
"Pour le schéma de Lax-Friedrichs, la norme matricielle de Q est: 1.0 en norme infinie et 1.0 en norme L2."
"Pour le schéma de Lax-Wendroff, la norme matricielle de Q est: 1.1600000000000001 en norme infinie et 1.0 en norme L2."
Il n'y a que pour le schéma centré que l'on trouve des normes éloignées, tandis que pour les autres elles sont proches ou égales. Dans le second cas, on peut déduire une bonne stabilité des schémas. Cependant, dans le
premier cas, on dira plutôt que le schéma est instable.
Nous utiliserons ici la propriété 3.3.1 du cours disant: "Un schéma linéaire dont les coefficients sont positifs est stable dans l∞ ." (condition de CFL). Mais aussi, à la page 76, l'équivalence suivante: le schéma est stable pour la
norme l2 si et seulement si ∣αj ∣≤ 1 , pour j=1,...,J-1 (condition de stabilité de Von Neumann). La stabilité l2 se caractérise à l'aide de la transformée de Fourier discrète. Nous nous retrouvons avec
αj = ∑ ck exp(i2πkjΔx).
k=−1
1. Schéma centré: La stabilité dans l∞ n'est pas assurée car les coefficients ne sont pas tous positifs. Il est donc instable pour cette norme. Por la stabilité dans l2 , on a
λa
αj = (exp(−i2πjΔx) + exp(i2πjΔx)) + 1 = 1 − iλa sin(ω),
2
avec ω = 2πjΔx. Comme ∣sin(ω) ∣≤ 1 ∣αj > 1, pour le j tels que sin(ω) ≠ 0. Ce schéma n'est pas l2 -stable. Le schéma centré est donc instable pour les deux normes et cela correspond au résultat numérique.
le schéma est l2 -stable si λ ∣ a ∣≤ 1 donc si λa ≤ 1. Ce schéma est stable comme nous l'avons vu dans la partie numérique.
le schéma est l2 -stable si −λa ≤ 1. Ce schéma est stable comme nous l'avons vu dans la partie numérique.
1 + λa 1 − λa
αj = exp(−i2πjΔx) + exp(i2πjΔx) = cos(ω) − iλa sin(ω),
2 2
ce schéma est l2 -stable si λ ∣ a ∣≤ 1(CF L). Ce schéma est stable comme nous l'avons vu dans la partie numérique.
1. Schéma de Lax-Wendroff: si on a λa(λa + 1) ≥ 0 , alors λa ≥ 1 . Cependant, cela implique aussi que 1 − λ2 a2 ≤ 0. Tout les coefficients ne peuvent donc pas être positifs. Le schéma n'est pas l∞ -stable.
2 2 2 2 2 2
λ a + λa 2 2
λ a − λa λ a
αj = exp(−iω) + 1 − λ a + exp(iω) = 1 − iλa sin(ω) + (exp(iω) + exp(−iω) − 2),
2 2 2
or, comme
iω −iω
(exp( ) − exp( ))
2 2 2
(exp(iω) + exp(−iω) − 2) = −4( ) .
2i
2 2
ω 2
αj = 1 − 2λ a sin( ) − iλa sin(ω),
2
on en déduit que le schéma est l2 -stable si λ ∣ a ∣≤ 1(CF L). Ce schéma est stable comme nous l'avons vu dans la partie numérique (exercice 4).
1.2.2 Convergence
In [17]:
#code pour afficher les images
images = ["C:\DOCS\Projet\images\erreurs/errsc.png", "C:\DOCS\Projet\images\erreurs/errsdg.png", "C:\DOCS\Projet\images\erreurs/errsdd.png", "C:\DOCS\Projet\images\erreurs/errslf.p
for img in images:
display(Image(filename=img))
Nous avons ici les graphiques des erreurs pour J=200. Dans le documents avec les codes, nous voyons pour chaque schéma que les courbes des erreurs sont de plus en plus proches. Pour les schémas décentré à gauche,
de Lax-Friedrichs et Lax-Wendroff, les courbes sont croissantes donc cela signifie que la vitesse à laquelle les erreurs diminuent augmente. Elle augmente plus vite pour la norme infinie. Pour le schéma centré, lorsque J est
petit la vitesse augmente. Cependant, pour J=200, les courbes ne sont pas monotones. On voit qu'en allant vers +∞, la vitesse semble tendre vers 1. Enfin pour le schéma décentré à droite, lorsque J est petit, la vitesse va ,au
contraire, diminuer. Cependant, à partir de J=100, bien les courbes soit presques égales, elles ne sont pas monotones. On voit qu'en allant vers +∞, la vitesse semble tendre vers 0. Nous pouvons donc conclure que seuls les
schémas décentré à gauche, de Lax-Friedrichs et Lax-Wendroff convergent. Ce sont les schémas les plus adaptés au problème.
′′
−ϵu + u' = 2 dans S,
u(0) = 1, u(1) = 2,
Nous voulons à présent écrire a(u, v) = l(v) sous la forme Ah = U h Fh avec Uh un vecteur composé d'inconnus uj . Ces inconnues peuvent être représentées comme étant une combinaison linéaire de fonctions de base P2
2m−1
. En considérant ϕi (x)i=1 , une base de P2 , on a
2m−1
Uh (x) = ∑ ui ϕi (x).
i=0
xi+1 −x
ϕi (x) = ⎨ , (1)
si x ∈ [xi , xi+1 ]
h
⎪
⎩
⎪
0 sinon
1
⎧
⎪ si x ∈]xi−1 , xi [
⎪ h
′ −1
ϕ (x) = ⎨ si x ∈]xi , xi+1 [ , (2)
i
h
⎪
⎩
⎪
0 sinon
et xi = ih.
1 1
nous allons donc nous retrouver avec Ah = U h Fh avec Ah [i, j] = ∫
0
′
−ϵϕ (x)ϕ (x) + ϕ (x)ϕi (x)dx
j
′
i
′
j
et Fh [i] = ∫
0
2ϕi (x)dx.
Maintenant que nous avons explicité tout les termes, nous pouvons calculer les coefficients de Ah et Fh localement. Mais nous verrons, ci-dessous, que nous aurons le même résultat pour tout i donc Ah sera une matrice
tridiagonale.
Commençons par Ah :
si i ≠ j,
xi+1
ϵ ϵ
′ ′
∫ −ϵϕ (x)ϕ (x)dx = (xi+1 − xi ) = ,
i+1 i 2
xi
h h
xi+1 xi+1
−1 1
′ ′
∫ ϕ (x)ϕ (x)dx = ∫ xi+1 − xi dx =. . . = − ,
i+1 i 2
h 2
xi xi
xi xi
1 1
′
∫ ϕ′ (x)ϕ (x)dx = ∫ xi − xi−1 dx =. . . = .
i i−1
2
h 2
xi−1 xi−1
ϵ 1 ϵ 1
D'où, Ah [i, i + 1] =
h
−
2
et Ah [i − 1, i] =
h
+
2
si i = j,
xi+1
ϵ ϵ
∫ ϕ′ (x)ϕ′ (x)dx = (xi+1 − xi ) = .
i i
2
xi
2h 2h
ϵ 1
D'où, Ah [i, i] =
2h
−
2
.
Finalement, pour Fh , on a:
xi+1
2
∫ 2ϕi (x)dx = (xi+1 − xi ) = h.
xi
h
Donc Fh [i] = h.
ϵ 1 ϵ 1
⎡ − − 0 ⋯ 0 ⎤
2h 2 h 2
⎢ ϵ 1 ϵ 1 ϵ 1 ⎥
⎢ + − − ⋯ 0 ⎥
h 2 2h 2 h 2
⎢ ⎥
⎢ ϵ 1 ϵ 1
⎥
⎢ 0 + − ⋯ 0 ⎥
Ah = ⎢ h 2 2h 2 ⎥
⎢ ⎥
⎢ ⎥
⎢ ϵ 1 ⎥
⎢ ⋮ ⋮ ⋮ ⋱ − ⎥
⎢ h 2 ⎥
ϵ 1 ϵ 1
⎣ 0 0 0 + − ⎦
h 2 2h 2
et
h
⎡ ⎤
⎢h⎥
Fh = ⎢ ⎥.
⎢ ⎥
⎢ ⋮ ⎥
⎣ ⎦
h
Afin de tracer Uexact , la solution exacte, trouvons la manuellement. D'abord, nous regardons l'équation homogène qui, grâce à l'équation caractéristique, nous donne
1
2
−ϵr + r = 0 ⇒ r(r − ),
ϵ
1 x
les racines sont r = 0 et r =
ϵ
. La solution homogène est donc uh (x) = C1 + C2 exp(
ϵ
).
u(0) = 1 ⇒ C1 + C2 + 2 = 1 ⇒ C1 + C2 = −1 (∗)
1 1
u(1) = 2 ⇒ C1 + C2 exp( ) + 2 = 2 ⇒ C1 + C2 exp( ) = 0 (∗∗)
ϵ ϵ
x
exp( )−1
x
En faisant (*) - (), nous avons C2 (exp( 1ϵ ) − 1) = 1 ⇒ C2 =
1
1
et donc C1 = −1 −
1
1
. Donc u(x) = C1 + C2 exp(
ϵ
) + 2 = 1 +
ϵ
1
.
exp( )−1 exp( )−1 exp( )−1
ϵ ϵ ϵ
Pour m ∈ {25, 50, 100, 200} , nous avons les graphiques suivants:
In [16]:
#code pour afficher les images
images = ["C:\DOCS\Projet\images\FV/m25.png", "C:\DOCS\Projet\images\FV/m50.png", "C:\DOCS\Projet\images\FV/m100.png", "C:\DOCS\Projet\images\FV/m200.png"]
for img in images:
display(Image(filename=img))
Plus m augmente, plus la solution numérique sera nulle jusqu'à ce qu'elle atteigne un point à partir duquel elle oscille. Alors que si m diminue, on voit qu'il reste quand même des points où la solution numérique est nulle.
Cependant, il y en aura moins!
x
exp( ϵ
)
′
u (x) =
1
ϵ exp( ϵ
) − 1
′ ′
ϵh = ||u − πh u|| 2 puis ϵh = ||u − πh u || 2 .
L L
Nous noterons
avec
4(hi − (x − xi ))(x − xi )
Ni+1/2 =
2
h
i
hi
′ ′ ′
Ah = ∫ −ϵU (x)V (x) + U (x)V (x)dx,
0
hi
Fh ∫ 2U (x)dx,
0
Ui
⎡ ⎤
et U = ⎢ Ui+1/2 ⎥ .
⎣ ⎦
Ui+1
−2 1 0 ⋯ 0
⎡ ⎤
⎢ 1 −2 1 ⋯ 0 ⎥
⎢ ⎥
ϵ ⎢ ⎥
0 1 −2 ⋯ 0
Ah = ⎢ ⎥
h ⎢ ⎥
2
⎢ ⎥
⎢ ⋮ ⋮ ⋮ ⋱ ⋮ ⎥
⎣ ⎦
0 0 0 1 −2
et
h
⎡ ⎤
⎢h⎥
Fh = ⎢ ⎥.
⎢ ⎥
⎢ ⋮ ⎥
⎣ ⎦
h
In [20]:
#code pour afficher les images
images = ["C:\DOCS\Projet\images\erreurs/pi_u1.png", "C:\DOCS\Projet\images\erreurs/pi_u2.png", "C:\DOCS\Projet\images\erreurs/pi_u3.png"]
for img in images:
display(Image(filename=img))
Nous avons bien que plus h est petit plus l'erreur de la courbe de (πu )' décroit.
Pour conclure, ce projet nous aura permis de vérifier des propriétés théoriques telles que la stabilité t la convergence des schémas. De voir lesquels sont adaptés au problème et lesquels ne le sont pas, en fonction des valeurs
des paramètres. Il y a eu quelques défis comme le graphique de l'erreur de πu .
Ce projet met en évidence l'importance de choisir des méthodes numériques adaptées et de comprendre leur comportement pour assurer des solutions fiables et précises.