We beschouwen het beginwaardeprobleem
$$\begin{cases}x'(t) = f(x, t)\\x(t_0) = x_0\end{cases}$$
waarvoor we een analytische oplossing $$x^* (t)$$ ter beschikking hebben.
We wensen de fout te bepalen tussen een numeriek bepaalde benadering voor $$x(t_{max})$$ en
de analytisch berekende waarde (die ook fouten kan vertonen) $$x^*(t_{max})$$, en dit als
functie van de stapgrootte $$h$$.
Schrijf de functie GDV_fout()
met volgende argumenten:
f
: de functie $$f(x, t)$$, met 2 reële argumenten x0
: de waarde $$x(t_0)$$ t0
: het beginpunt $$t_0$$ tmax
: het eindpunt waarvoor $$x(t)$$ moet bepaald worden x
: een functie in 1 reëel argument, namelijk de analytische oplossing van het beginwaardeprobleem solver
: een functie die een numeriek oplossingsschema voor beginwaardenprobleem implementeert, met als argumenten
f
: de functie $$f(x, t)$$, met 2 reële argumenten x0
: de waarde $$x(t_0)$$ t0
: het beginpunt $$t_0$$ tmax
: het eindpunt van het gesloten interval waar $$x(t)$$ moet bepaald worden N
: het aantal interatiestappen N
: een lijst van N
-waarden waarvoor de numerieke fout van het iteratieschema bepaald moet wordenf = lambda x,t : 5*x x = lambda t:3*np.exp(5*t) F_euler = GDV_fout(f, 3.0, 0.0, 2.0, x, euler, [5, 10, 15, 20] ) #[65350.40, 63007.40, 59698.93, 56103.63] F_midpoint = GDV_fout(f, 3.0, 0.0, 2.0, x, midpoint, [5, 10, 15, 20] ) #[56704.40, 37469.17, 24371.58, 16626.86] F_RK4 = GDV_fout(f, 3.0, 0.0, 2.0, x, runge_kutta_4, [5, 10, 15, 20] ) #[15658.40, 2378.96, 624.18, 227.09]