here is a shooting method solution right out of the docs: sol = First[ NDSolve[{x''[t] + Sin[x[t]] == 0 , x[0] == x[10] == 0}, x, t, Method -> {"Shooting", "StartingInitialConditions" -> { x'[0] == 1.666 }}]] Plot[Evaluate[x[t] /. sol], {t, 0, 10}] [![enter image description here][1]][1] The shooting method is of course iterative, so how to monitor progress (initial condidion vs end condition )? I came up with this sort of hack approach and I wonder if there is a better way: define a function that always returns zero, but saves what we want as a side effect: zero[t_?NumericQ, x_, xp_] := (If[t == 0, xp0 = xp, If[t == 10, Sow[{xp0,x}]]]; 0) now add as a term in the equation (no effect on solution since its always `0`): r = Reap[NDSolve[{x''[t] + Sin[x[t]] == zero[t, x[t], x'[t]] , x[0] == x[10] == 0}, x, t, Method -> {"Shooting", "StartingInitialConditions" -> { x'[0] == 1.666}}]][[2, 1]]; ListPlot[r, Frame -> True, FrameLabel -> {"x'[0]", "x[10]"}] [![enter image description here][2]][2] is there a better way? I tried working with `WhenEvent` with no luck.. [1]: https://i.sstatic.net/Gwc7p.png [2]: https://i.sstatic.net/ka7ep.png