# Ecriture matricielle de problèmes différentiels
> [name=Jacques-Olivier Lachaud][time=January 2022][color=#907bf7]
> (Les images peuvent être soumises à des droits d'auteur. Elles sont utilisées ici exclusivement dans un but pédagogique)
###### tags: `visi601`
Retour à [VISI601_CMI (Main) Algorithmique numérique](https://codimd.math.cnrs.fr/s/IWTaBkA9m)
---
## Problème différentiel
On cherche typiquement à résoudre des équations du genre $f'(x)=cf(x)$ ou $f''(x)=0$ avec des conditions aux bords.
* Equation de Lotka-Voltera: $\left\{\begin{align*}x'(t)&=A\,x(t)-B\,x(t)\,y(t)\\y'(t)&=-C\,y(t)+D\,x(t)\,y(t)\end{align*} \right.$
* Problème de Dirichlet: Trouver $f$, t.q. $f_{|{\partial \Omega}}=g$ et $\Delta f=0$ sur $\Omega$
* Equation de la chaleur: $\frac{\partial f}{\partial t}=\Delta f$
* Equation de transport linéaire: $\left\{\begin{array}{l l}
\displaystyle\frac{\partial u}{\partial t} + c\frac{\partial u}{\partial x} = 0, \quad & (x,t)\in\mathbb{R}\times\mathbb{R}^+\\
u(x,0) = u_0(x), & x\in\mathbb{R}
\end{array}\right.$
* Equation de propagation d'onde: ${\displaystyle \Delta \psi \ =\ {1 \over c^{2}}{\partial ^{2}\psi \over \partial t^{2}}}$
---
## Discrétisation de f' sur un intervalle et forme matricielle
En 1D, domaine = intervalle $[a,b]$, discrétisé avec $n+1$ points $(x_i)_{i=0,\ldots,n}$:
Ils sont espacés régulièrement de $h=\frac{b-a}{n}$.
Soit $f$ une fonction, connue sur ces points: $f_i := f(x_i)$
Différences finies "forward" partout sauf "backward" en $x_n$
$$
\begin{bmatrix}f'(x_0)\\ f'(x_1) \\ \vdots \\ f'(x_{n-1}) \\ f'(x_n) \end{bmatrix} = \frac{1}{h} \begin{bmatrix}-1 & 1 & \ldots & 0 & 0 \\ 0 & -1 & 1 & \ddots & \vdots \\ \vdots & \ddots & \ddots & \ddots & \vdots \\ \vdots & \ddots & 0 & -1 & 1 \\ 0 & 0 & \cdots & -1 & 1 \end{bmatrix}
\begin{bmatrix} f(x_0) \\ f(x_1) \\ \vdots \\ f(x_{n-1}) \\ f(x_n) \end{bmatrix} \\
$$
d'où $\mathbf{f}' = D_+ \mathbf{f}$ avec $D_+$ matrice $(n+1) \times (n+1)$
---
## Variantes pour f'
On peut bien sûr utiliser d'autres formules plus ou moins précises.
Par exemple, différences centrées au centre:
$$
\begin{bmatrix}f'(x_0)\\ f'(x_1) \\ \vdots \\ f'(x_{n-1}) \\ f'(x_n) \end{bmatrix} = \frac{1}{2h} \begin{bmatrix}-2 & 2 & \ldots & 0 & 0 \\ -1 & 0 & 1 & \ddots & \vdots \\ \vdots & \ddots & \ddots & \ddots & \vdots \\ \vdots & \ddots & -1 & 0 & 1 \\ 0 & 0 & \cdots & -2 & 2 \end{bmatrix}
\begin{bmatrix} f(x_0) \\ f(x_1) \\ \vdots \\ f(x_{n-1}) \\ f(x_n) \end{bmatrix} \\
$$
d'où $\mathbf{f}' = D_0 \mathbf{f}$ avec $D_0$ matrice $(n+1) \times (n+1)$
:::warning
Cette formule est plus précise pour $i=1,\ldots,n-1$ mais pas aux bords !
:::
---
## Discrétisation de f'' sur un intervalle et forme matricielle
On utilise en général les différences centrées, précises à l'ordre 2.
$$
\begin{bmatrix}f''(x_0)\\ f''(x_1) \\ \vdots \\ f''(x_{n-1}) \\ f''(x_n) \end{bmatrix} = \frac{1}{h^2} \begin{bmatrix}\color{red}{-2} & 1 & \ldots & 0 & 0 \\ 1 & -2 & 1 & \ddots & \vdots \\ \vdots & \ddots & \ddots & \ddots & \vdots \\ \vdots & \ddots & 1 & -2 & 1 \\ 0 & 0 & \cdots & 1 & \color{red}{-2} \end{bmatrix}
\begin{bmatrix} f(x_0) \\ f(x_1) \\ \vdots \\ f(x_{n-1}) \\ f(x_n) \end{bmatrix} \\
$$
d'où $\mathbf{f}'' = L \mathbf{f}$ avec $L$ matrice $(n+1) \times (n+1)$
:::warning
Les valeurs (rouges) au bord dépendent des conditions aux bords. Ici, cela implique une valeur 0 en dehors du domaine (donc conditions de Dirichlet)
:::
---
## Exemple: résoudre y''=0
On cherche $y$, avec $y''(x)=0$, aux bords $y(0)=0$, $y(1)=0$, et $y(0.5)=1$.
On met 10 points $x_0,\ldots,x_9$. On cherche donc à résoudre:
$L \mathbf{y} = \mathbf{0} =: \mathbf{b}$, avec $\mathbf{y}$ de taille 10
**contrainte** on doit forcer $y(x_5)=1$. On modifie $L$ en ligne 5 / col 5 et $\mathbf{b}$
On résoud $L' \mathbf{y} = \mathbf{b}'$

---
## Composition des opérateurs matriciels
* dérivées premières: $D_+$ "forward", $D_-$ "backward", $D_0$ centrées
* dérivées secondes
* on voit que $L=D^- D^+$ (sauf éventuellement aux bords)
* $D^+ D^+$ et $D^- D^-$ ressemblent à $L$ décalé à gauche ou à droite
* fonctionnera aussi pour composer des dérivées partielles !
{"title":"VISI601_CMI (7d) Ecriture matricielle de problèmes différentiels","type":"slide","slideOptions":{"transition":"slide","progress":true,"slideNumber":true}}