Skip to content

Instantly share code, notes, and snippets.

@idontgetoutmuch
Created May 11, 2017 11:39
Show Gist options
  • Save idontgetoutmuch/597bcbe396a2598887542d35671fc72e to your computer and use it in GitHub Desktop.
Save idontgetoutmuch/597bcbe396a2598887542d35671fc72e to your computer and use it in GitHub Desktop.
using StaticArrays
e = 0.6
q10 = 1 - e
q20 = 0.0
p10 = 0.0
p20 = sqrt((1 + e) / (1 - e))
h = 0.01
x1 = SVector{2,Float64}(q10, q20)
x2 = SVector{2,Float64}(p10, p20)
x3 = SVector{2,SVector{2,Float64}}(x1,x2)
function oneStep2(h, prev)
h2 = h / 2
qsPrev = prev[1]
psPrev = prev[2]
function nablaQ(qs)
q1 = qs[1]
q2 = qs[2]
r = (q1^2 + q2^2) ^ (3/2)
return SVector{2,Float64}(q1 / r, q2 / r)
end
function nablaP(ps)
return ps
end
p2 = psPrev - h2 * nablaQ(qsPrev)
qNew = qsPrev + h * nablaP(p2)
pNew = p2 - h2 * nablaQ(qNew)
return SVector{2,SVector{2,Float64}}(qNew, pNew)
end
nSteps = 100
states = Array{SVector{2,SVector{2,Float64}}}(nSteps)
states[1] = x3
for i in 1:(nSteps - 1)
states[i+1] = oneStep2(h,states[i])
end
function bigH(x)
q1 = x[1][1]
q2 = x[1][2]
p1 = x[2][1]
p2 = x[2][2]
pe = - 1 / (sqrt(q1^2 + q2^2))
ke = 0.5 * (p1^2 + p2^2)
return (ke + pe)
end
test = map(bigH, states[1:100])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment