Om differentiaalvergelijkingen numeriek op te lossen kan men gebruik maken van:
|
|
Het gebruik van deze functie illustreren we met behulp van het probleem:
$x =$ | $2 x (1-x) - \frac{x y}{x + 0.6}$ |
$y =$ | $-\frac{y}{4} + \frac{x y}{x + 0.6} - \frac{{y^2}^{\phantom{1}}}{5 (y^2 + \frac{1}{16})}$ |
|
|
Experimenteer met de gegeven code:
|
Implementeer de stapmethode voor de voorwaartse Euler.
|
Test met behulp van stepper jouw implementatie voor het probleem:
$$ y' = \lambda y $$
met $y(0) = 1$.
Vergelijk verschillende staplengtes met de exacte oplossing $y = e^{\lambda t}$.
|
Implementeer nu ook de achterwaartse Euler methode en de trapezium methode.
Merk op dat deze methoden impliciet zijn. Het zal dus nodig zijn om newton raphson toe te passen.
De achterwaartse Euler methode gebruikt het schema $y_{n+1} = y_{n} + h f(t_{n+1}, y_{n+1})$.
De trapezium methode gebruikt het schema $y_{n+1} = y_{n} + (f(t_{n}, y_{n}) + f(t_{n+1}, y_{n+1}))\frac{h}{2}$.
Ter herinnering:
https://en.wikipedia.org/wiki/Newton%27s_method
https://en.wikipedia.org/wiki/Newton%27s_method#k_variables,_k_functions
|
Test jouw implementatie van deze impliciete methoden ten opzichte van $y' = \lambda y$ en $y(0) = 1$ over het interval $t \in [0,3]$. Maak ook een tabel die voor elke van de drie methoden de globale fout uitdrukt in functie van de stapgrootte. (Kies $\lambda < 1.5$)
Vergelijk de staplengtes $2^{-1}$, $2^{-2}$, ..., $2^{-8}$ en bekijk ook eens $\log_2$ van de globale fout.
|
Test al deze methoden ook tegenover
$$x' = -2yx+x\\y'=x-y/x$$
met $x(0) = y(0) = 1$. Bekijk verschillende stapgroottes.
|
|
En ook eens met het probleem $y'' = -y$ .
|
|
Deze methode worden gegeven door het volgende schema:
$$y_{k+1} = y_{k} + h \sum_{i=1}^s b_i K_i$$
met $K_i = f(t_k + c_i h, y_k + h\sum_{j=1}^{s} a_{ij} K_j)$.
Zo'n methodes kunnen dus samengevat worden door zijn Butcher-tableau:
$c_1$ | $a_{11}$ | $a_{12}$ | $\cdots$ | $a_{1s}$ |
$c_2$ | $a_{21}$ | $a_{22}$ | $\cdots$ | $a_{2s}$ |
$\vdots$ | $\vdots$ | $\vdots$ | $\ddots$ | $\vdots$ |
$c_s$ | $a_{s1}$ | $a_{s2}$ | $\cdots$ | $a_{ss}$ |
$b_1$ | $b_2$ | $\cdots$ | $b_s$ |
Men kan zien dat de methode expliciet is als $a_{ij} = 0$ voor alle $j \geq i$.
Implementeer een fuctie die een step-functie teruggeeft volgens het gegeven expliciete tableau.
|
Genereer de vergelijkende tabellen (voor beide problemen) hier opnieuw met twee extra rijen voor de methode van Heun en de 'echte' Runge-Kutta methode.
|
|
|
|