The Algorithms logo
The Algorithms
AboutDonate

Verlet

V
"""
Verlet integration is an integration method used to integrate newtons - law of motion. It is frequently used to find trajectories in molecular dynamics simulation.
The function takes `four` inputs viz,
- `f` : the differential equation
- `x0` : the initial condition. This is a Vector with the first element as initial value for position(x_0) and the the second  initial condition for velocity (v_0) 
- `tspan`: is the time span for integration. It is a tuple (initial time, final time)
This functionr returns a tuple (x,t):
- `x` is the solution
- `t` is the array containing the time points
Reference:
- https://www.algorithm-archive.org/contents/verlet_integration/verlet_integration.html
Contributed by: [Ved Mahajan](https://github.com/Ved-Mahajan)
"""
function verlet_integration(f,x0,tspan,Δt= 1.0e-3)
        s,e = tspan
        N = floor((e-s)/Δt) |> Int
        x = Vector{Float64}(undef,N)
        t = collect(s:Δt:(e - Δt))
        x[1] = x0[1]
        x[2] = x0[1] + x0[2]*Δt + 0.5*f(x0[1])*(Δt)^2

        for i in 2:(N-1)
                x[i+1] = 2*x[i] - x[i-1] + f(x[i])*(Δt)^2
        end
        return x,t
end