A Julia package implementing Runge-Kutta methods.
This package is a registered package compatible with Julia v1.6 and above. From the Julia REPL,
]add NSDERungeKutta
Read the documentation for a complete overview of this package.
Let's say that we want to solve the simple gravity pendulum problem using the midpoint method. Here is one way to do it with NSDERungeKutta.jl:
using NSDERungeKutta
f(u, t) = [u[2]; -sin(u[1])]
u0 = [0.0; π/4]
tspan = (0.0, 2π/3 * √9.81)
problem = IVP(f, u0, tspan)
solver = Midpoint(h = 1e-2)
solution = solve(problem, solver)
We can plot the obtained solution
by extracting its fields u
and t
, e.g. using the convenient macro @↓ u, t = solution
from ArrowMacros.jl. Alternatively, we can use the available predefined recipes:
using Plots, LaTeXStrings
gr(fontfamily = "Computer Modern", framestyle = :box, label = "", tickdirection = :out)
p₁ = plot(solution, xlabel = L"t", label = [L"\theta" L"\omega"])
p₂ = phaseplot(solution, variables = (1, 2), xlabel = L"\theta", ylabel = L"\omega")
plot(size = (900, 450), p₁, p₂, left_margin = 3Plots.mm, bottom_margin = 3Plots.mm)
For convenience, this package re-exports all the ODE problems defined in NSDEBase.jl, e.g. SimplePendulum
for the above problem.
This package has some predefined recipes to plot stability regions and order stars too:
p₁ = stabilityf(RK4(), xlabel = L"\Re(z)", ylabel = L"\Im(z)", colour = :blues, resolution = 500)
p₂ = orderstarf(RK4(), xlabel = L"\Re(z)", ylabel = L"\Im(z)", colour = :blues, resolution = 500)
plot(size = (1000, 400), p₁, p₂, left_margin = 5Plots.mm, bottom_margin = 5Plots.mm)
This package currently supports the following methods:
Explicit:
Euler
/ExplicitEuler
,Heun2
,Midpoint
/ExplicitMidpoint
,Ralston2
,Heun3
,RungeKutta3
/RK3
,Ralston3
,SSPRK3
,Ralston4
,RungeKutta4
/RK4
,Rule38
,Butcher5
,KuttaNystrom5
,Butcher6
,Butcher7
,- (Embedded)
HeunEuler
,BogackiShampine
,Fehlberg45
,DormandPrince54
,Verner65
,Fehlberg78
.
Diagonally Implicit:
BackwardEuler
/ImplicitEuler
,ImplicitMidpoint
/GaussLegendre2
,SDIRK2
,LobattoIII2
,CrankNicolson
/LobattoIIIA2
,SDIRK3
,RadauI3
,RadauII3
,SDIRK4
,LobattoIII4
.
Implicit:
LobattoIIIC2
,RadauIA3
,RadauIIA3
,GaussLegendre4
,LobattoIIIA4
,LobattoIIIB4
,LobattoIIIC4
,RadauI5
,RadauIA5
,RadauII5
,RadauIIA5
,GaussLegendre6
.