First, we need to get the data, here from the website tlarsen2.tripod.com:
data = Import["http://tlarsen2.tripod.com/thomaslarsen/easterdates.html", "Table"];
dates = Reverse /@ SortBy[Partition[Flatten@Select[data,
MemberQ[#, "April"] || MemberQ[#, "March"] &], 3], Last] /.
"April" -> 4 /. "March" -> 3;
dates = Table[date[[1 ;; 2]]~Join~{ToExpression@
StringReplace[date[[3]], LetterCharacter -> ""]}, {date, dates}];
(* {{1700, 4, 11}, {1701, 3, 27}, {1702, 4, 16}, ... *)
Then, convert the dates into the number of days from the first possible date (March 23d), and use Tally
to count:
monthsDays = dates[[All, {3, 2}]];
days = If[#[[2]] == 4, #[[1]] + 31 - 22., (#[[1]] - 22.)] & /@ monthsDays;
dist = Sort@Tally[days];
That's the date (counted in days after March 23d) as a function of the year (counted from 1700).
ListPlot[days]
Then, we can fit a Gaussian curve on the distribution (note: to see how to do this properly, check J.M.'s answer)
model[x_] = ampl Evaluate[PDF[NormalDistribution[mu, sigma], x]];
fit = FindFit[dist, model[x], {ampl, mu, sigma}, x]
Show[ListPlot[dist],
Plot[model[x] /. fit, {x, 0, 35}, PlotStyle -> Red]]
The result is not really well approximated by a Gaussian.
JulianEasterSunday
onFindRepeat
documentation for one starting point. $\endgroup$