Convergence of AB4

We consider the IVP \(u'=\sin[(u+t)^2]\) over \(0\le t \le 4\), with \(u(0)=-1\).

using FundamentalsNumericalComputation
ivp = ODEProblem((u,p,t)->sin((t+u)^2),-1.,(0.0,4.0))
ODEProblem with uType Float64 and tType Float64. In-place: false
timespan: (0.0, 4.0)
u0: -1.0

We use a solver from DifferentialEquations to construct an accurate approximation to the exact solution.

u_exact = solve(ivp,Tsit5(),reltol=1e-14,abstol=1e-14);

Now we perform a convergence study of the AB4 code.

n = @. 10*2^(0:5)
err = zeros(size(n))
for (j,n) = enumerate(n)
    t,u = FNC.ab4(ivp,n)
    err[j] = norm(u_exact.(t)-u,Inf)
end

pretty_table((n=n,err=err),["n","inf-norm error"],backend=:html)
n inf-norm error
10 1.421332157914805
20 0.2998677236341702
40 0.006278094753455532
80 0.0005392729579345446
160 3.975975730263759e-5
320 2.64515824960343e-6

The method should converge as \(O(h^4)\), so a log-log scale is appropriate for the errors.

plot(n,err,m=:o,label="AB4",
    xaxis=(:log10,"n"),yaxis=(:log10,"inf-norm error"),
    title="Convergence of AB4",leg=:bottomleft)

plot!(n,0.1*(n/n[1]).^(-4),l=:dash,label="4th order")