Skip to content
Snippets Groups Projects
Commit 14d01573 authored by Olivier Cots's avatar Olivier Cots
Browse files

foo

parent 02baf4f3
Branches
No related tags found
No related merge requests found
%% Cell type:markdown id: tags:
<img src="https://gitlab.irit.fr/toc/ens-n7/texCoursN7/-/raw/main/LOGO_INP_N7.png" alt="N7" height="80"/>
<img src="https://gitlab.irit.fr/toc/ens-n7/texCoursN7/-/raw/main/logo-insa.png" alt="INSA" height="80"/>
# Méthodes de Runge-Kutta implicites - TP Projet
- Date : 2023-2024
- Durée approximative : inconnue
%% Cell type:markdown id: tags:
**Nom** : "Entrez votre nom ici"
**Prénom** : "Entrez votre prénom ici"
%% Cell type:markdown id: tags:
## Rendu et consignes
Une fois le travail terminé, vous enverrez directement le fichier `.ipynb` par email à l'adresse : `olivier.cots@toulouse-inp.fr`.
- **Date limite du rendu : mercredi 15/11/2023 à 23h59.** Attention, à partir de 24h, 2 points est enlevé de la note finale toutes les 30 minutes.
- **Attention :** Le fichier doit être renommé de la façon suivante : `rk_implicites_NOM_Prenom.ipynb`. 4 points enlevés si le nom du fichier n'est pas respecté.
- **Documents autorisés :** vous pouvez utiliser votre polycopié et les TPs précédents.
%% Cell type:code id: tags:
``` julia
a = (1, 2)
b = (3, 4)
a.-b
```
%% Output
%% Cell type:code id: tags:
``` julia
f(x, y) = x+y
```
%% Output
%% Cell type:code id: tags:
``` julia
f(a...)
```
%% Output
%% Cell type:code id: tags:
``` julia
v = [a...]
```
%% Output
%% Cell type:code id: tags:
``` julia
using LinearAlgebra
k1 = [1, 2]
k2 = [3, 4]
ks = (k1, k2)
G(k1, k2) = (k1, k2)
norm(ks.-G(ks...))
```
%% Output
%% Cell type:markdown id: tags:
## Introduction
Nous allons dans ce TP, implémenter quelques méthodes de Runge-Kutta **implicites** (voir **polycopié Section 8.2**) et étudier leur convergence. On considère un pas de temps $h$ uniforme. Une méthode à un pas implicite est convergente si pour toute solution $x(\cdot, t_0, x_0)$ d'un problème de Cauchy, la suite approximante ${(x_i)}_i$ donnée par la méthode à un pas implicite vérifie
$$
\max_{1 \le i \le N}\, \|{x(t_i, t_0, x_0) - x_i}\| \to 0
\quad\text{quand}\quad h \to 0.
$$
Si la convergence est d'ordre $p$ alors il existe une constante $C \ge 0$ telle que l'**erreur globale** $E$ vérifie
$$
E := \max_{1 \le i \le N}\, \|{x(t_i, t_0, x_0) - x_i}\| \le C\, h^p.
$$
Faisons l'hypothèse que $E = M\, h^p$ pour un certain $M \ge 0$. En passant au logarithme, on obtient
$$
\log(E) = \log(M) + p\, \log(h).
$$
Nous en déduisons que si on trace $\log(E)$ en fonction de $\log(h)$, on doit obtenir une droite de pente $p$. C'est ce que nous allons vérifier dans ce TP.
%% Cell type:code id: tags:
``` julia
# activate local project
using Pkg
Pkg.activate(".")
# load packages
using LinearAlgebra
using Plots
using Plots.PlotMeasures
using Polynomials
#
px = PlotMeasures.px;
```
%% Cell type:code id: tags:
``` julia
# Fonctons auxiliaires
# VOUS POUVEZ METTRE VOS FONCTIONS AUXILIAIRES ICI
```
%% Cell type:markdown id: tags:
## L'exemple d'étude
On s'intéresse (pour les exercices 1, 2 et 3) au problème de Cauchy
$$
\dot{x}(t) = (1-2t) x(t), \quad x(0) = x_0 = 1
$$
sur l'intervalle $[0, 3]$.
%% Cell type:code id: tags:
``` julia
# Définition du problème de Cauchy
f(t, x) = (1-2t)x # Second membre f(t, x)
x0 = 1.0 # Condition initiale
tspan = (0.0, 3.0); # Intervalle de temps
```
%% Cell type:code id: tags:
``` julia
# Solution analytique
function sol(t)
return exp(t-t^2)
end;
```
%% Cell type:code id: tags:
``` julia
# Estimation de la constante de Lipschitz de f sur [0, 3]
# Voir Théorème 8.2.2 pour l'utilité de cette estimation
function dfx(t)
return 1-2t
end
L = maximum(abs.(dfx.(range(0, stop=3, length=1000))))
```
%% Cell type:markdown id: tags:
## La méthode d'Euler implicite
La méthode d'Euler implicite est donnée par :
$$
\left\{
\begin{array}{l}
x_{n+1} = x_n + h f(t_n + h, x_{n+1}) = G(x_{n+1}) \\
x_0 = x(t_0)
\end{array}
\right.
$$
### Exercice 1
1. Implémenter la méthode d'Euler implicite avec le point fixe (penser à voir le polycopié Section 8.2).
2. Pourquoi si $h \ge 0.2$, l'algorithme du point fixe peut s'arrêter au bout du nombre d'itérations max et donc ne pas converger pour la méthode d'Euler implicite ?
3. Tracer la solution approchée et la solution exacte sur le même graphique pour différentes valeurs de $h$ que vous choisirez pour illustrer la convergence de la méthode.
4. Tracer l'erreur globale de la méthode d'Euler implicite en fonction de $h$ et vérifier que l'erreur est bien en $O(h)$.
**Attention** : pour l'algorithme du point fixe, faites attention aux critères d'arrêts (il y en a 2) ! Voir votre polycopié Section 8.2. Vous fixerez la valeur de la tolérance à $10^{-6}$ et le nombre maximum d'itérations à $1000$.
%% Cell type:code id: tags:
``` julia
# AJOUTER VOTRE CODE ICI
# F(y) = y - G(y)
G(y) = (y + sin(y))/3
y = 1
y = G(y)
y = G(y)
y = G(y)
y = G(y)
y = G(y)
y = G(y)
y = G(y)
y = G(y)
y = G(y)
y = G(y)
y = G(y)
y = G(y)
y = G(y)
```
%% Output
%% Cell type:code id: tags:
``` julia
F(y) = y - G(y)
F(y)
```
%% Output
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
## La méthode des trapèzes
La méthode des trapèzes est donnée par le tableau de Butcher :
$$
\begin{array}{c | c c}
0 & 0 & 0 \\[0.2em]
1 & 1/2 & 1/2 \\[0.2em]
\hline
& 1/2 & 1/2 \\
\end{array}
$$
### Exercice 2
1. Implémenter la méthode des trapèzes avec le point fixe.
2. Tracer la solution approchée et la solution exacte sur le même graphique pour différentes valeurs de $h$ que vous choisirez pour illustrer la convergence de la méthode.
3. Tracer l'erreur globale de la méthode des trapèzes. Quel est l'ordre de convergence de la méthode des trapèzes ?
%% Cell type:code id: tags:
``` julia
# AJOUTER VOTRE CODE ICI
```
%% Cell type:markdown id: tags:
## La méthode de Gauss à 2 étages
La méthode de Gauss à 2 étages est donnée par le tableau de Butcher :
$$
\begin{array}{c | c c}
1/2 - \sqrt{3}/6 & 1/4 & 1/4 - \sqrt{3}/6 \\[0.2em]
1/2 + \sqrt{3}/6 & 1/4 + \sqrt{3}/6 & 1/4 \\[0.2em]
\hline
& 1/2 & 1/2 \\
\end{array}
$$
### Exercice 3
1. Implémenter la méthode de Gauss à 2 étages avec le point fixe.
2. Tracer la solution approchée et la solution exacte sur le même graphique pour différentes valeurs de $h$ que vous choisirez pour illustrer la convergence de la méthode.
3. Tracer l'erreur globale de la méthode de Gauss à 2 étages. Quel est l'ordre de convergence de la méthode de Gauss à 2 étages ?
%% Cell type:code id: tags:
``` julia
# AJOUTER VOTRE CODE ICI
```
%% Cell type:markdown id: tags:
## Un autre exemple
On considère à partir de maintenant l'équation différentielle en dimension 2 :
$$
\dot{x}_1(t) = x_2(t), \quad \dot{x}_2(t) = - x_1(t).
$$
On peut montrer facilement que la norme de $x(t) = (x_1(t), x_2(t))$ est constante le long des solutions :
$$
\frac{\mathrm{d}}{\mathrm{d} t} \|x(t)\|^2 = 2\, \left( x(t) \,|\, \dot{x}(t) \right) = 2 \left( x_1(t) x_2(t) - x_2(t) x_1(t) \right) = 0.
$$
### Exercice 4
On considère le problème de Cauchy associé de condition initiale $x_0 = (1, 0)$.
1. Afficher l'approximation de la solution sur $[0, 10]$ pour les méthodes :
- Euler explicite ;
- Euler implicite ;
- Trapèzes ;
- Gauss à 2 étages.
2. Commentaires.
**Attention :** vous ferez un affichage dans le plan $(x_1, x_2)$. Vous fixerez le nombre de pas à $N=100$.
%% Cell type:code id: tags:
``` julia
# AJOUTER VOTRE CODE ICI
```
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment