Ostermädchen

Ostern ausrechnen in MATLAB

Jedes Jahr befindet sich der Ostersonntag in einer anderen Woche? Aber welcher?

Die Antwort ist eben so einfach wie komplex: Man bestimme den ersten Sonntag nach dem ersten Vollmond im Frühling. (Wikipedia, Lizenz CC-BY-SA)

Das lässt sich dank Carl Friedrich Gauß ausrechnen, zusammen mit einigen Verbesserungen seines Algorithmus (Wikipedia).

Als Rechenwerkzeug nutze ich MATLAB, deswegen hier die Berechnung des Ostersonntages nach der ergänzten Gauß-Methode als MATLAB Code:

function ostersonntag = ostern(year) 
    K = fix(year/100);                  % 1.  Säkularzahl
    M = 15 + fix((3*K + 3)/4) - fix((8*K + 13)/25); % 2. säkulare Mondschaltung
    S = 2- fix((3*K + 3)/4);            % 3.  säkulare Sonnenschaltung
    A = mod(year,19);                   % 4.  Mondparameter
    D = mod((19*A + M),30);             % 5.  Keim für den ersten Vollmond im Frühling
    R = fix((D + fix(A/11))/29);        % 6.  kalendarische Korrekturgröße
    OG = 21 + D - R;                    % 7.  Ostergrenze
    SZ = 7 - mod((year + fix(year/4) + S),7); % 8.  erster Sonntag im März
    OE = 7 - mod((OG - SZ),7);          % 9.  Entfernung des Ostersonntags von der Ostergrenze 
    OS = OG + OE;                       % 10. Datum des Ostersonntags als Märzdatum
    ostersonntag = datetime(year,3,1) + OS - 1; % 11. Ostersonntag als Datum
    ostersonntag.Format = 'dd.MM.yyyy';
end

Den Ostersonntag in 2015 rechne ich nun aus mittels

eastersun = ostern(2015)
eastersun = 

   05.04.2015

Möchte ich die Daten aller Ostersonntage der Jahre 1000 bis 2500 wissen, rufe ich diese Funktion auf wie folgt:

eastersun = ostern(1000:2500);

Um herauszufinden, welche Tage besonders oft vorkommen, brauchen wir nur Monat und Tag in der Ausgabe. Die datetime-Klasse erlaubt das einfache Rechnen und manipulieren von Daten.

Das Jahr setzen wir auf 0, damit die Sortierung funktioniert.

eastersun.Format='dd.MM.';
eastersun.Year=0;

Das Histogramm ergibt dann die Anzahl der Ostersonntage für ein bestimmtes Datum:

hist(categorical(eastersun));

Dieses Histogramm verschönern wir noch ein wenig:

distri = gca;
distri.XTickLabelRotation = 60;
distri.YGrid = 'on';
distri.YMinorGrid = 'on';

Ostersonntage

Published with MATLAB® R2015a

Foto: Joachim Schlosser

Teilen & Verweilen

Kommentare

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert