Die Swiss Ephemeris ist eine vom Astrodienst Zürich, namentlich Alois Treindl und Dieter Koch entwickelte leistungsstarke Bibliothek von Ephemeridenfunktionen, die auch – auf dem Weg über den Java-Port von Thomas Mack – den Berechnungsdiensten dieser Webseite zugrundeliegt. Im folgenden Artikel möchte ich anhand einiger Beispiele illustrieren, wie sich die Funktionen dieser Bibliothek im Verbund mit einer Tabellenkalkulation nutzen lassen.

Swiss Ephemeris und Tabellenkalkulation

Inhalt

Hinweise für Entwickler
Ein Ephemeridenblatt
Ereignisbogen und Unterschied zweier Datumswerte
Eine Ephemeride für Jahrtausende
Für Zyklenforscher - eine Langzeitephemeride
Selbsttest

Hinweise für Entwickler

Die Swiss Ephemeris wurde in der Programmiersprache C entwickelt. Sowohl der Quelltext als auch vorkompilierte Bibliotheken sind in der Download-Area des Astrodienstes Zürich verfügbar. Die Swiss Ephemeris ist für die private Nutzung kostenlos, für die Verwendung in kommerziellen Anwendungen jedoch gebührenpflichtig.

Da die Swiss Ephemeris als Bibliothek vorliegt, muss eine Anwendung, die ihre Funktionen nutzt, nicht unbedingt selbst in C programmiert sein. Irgendeine Programmiersprache muss jedoch verwendet werden, um auf die Swiss Ephemeris zuzugreifen. Je nach verwendeter Programmiersprache müssen Sie in der Dokumentation dieser Sprache nachforschen, wie der Zugriff auf die Funktionen einer Bibliothek, z.B. unter Windows der Zugriff auf eine DLL, erfolgen muss.

Ich will in diesem Artikel demonstrieren, wie man auf einer Windows-Plattform die Tabellenkalkulationssoftware Excel verwenden kann, um Funktionen der Swiss Ephemeris aufzurufen. Unter Windows benötigen Sie die aktuelle DLL der Swiss Ephemeris. Sie heisst swedll32.dll. Vielleicht haben Sie diese DLL bereits auf Ihrer Festplatte, denn die Swiss Ephemeris ist Teil von verschiedenen populären Astrologieprogrammen. Um auf die Funktionen zugreifen zu können, muss sichergestellt sein,

  1. dass diese DLL vorhanden ist (sonst laden Sie sie in der Download Area von http://www.astro.com/swisseph kostenlos herunter),
  2. dass Windows-Anwendungen die Bibliothek finden können. Das ist gewährleistet, wenn sie in einem Ordner enthalten ist, der Teil der Umgebungsvariablen PATH ist. Zur Not können Sie sie in C:\Windows\system32 ablegen, auch wenn das keine schöne Wahl ist. Besser wäre es, die PATH Variable um einen Pfad auf einen für die Swiss Ephemeris reservierten Ordner, zum Beispiel C:\SWEPH zu ergänzen, und
  3. die für die Swiss Ephemeris nötigen Ephemeridendateien auf der Festplatte an einem wohldefinierten Ort verfügbar sind, z.B. auf C:\SWEPH\EPHE.
Ich gehe im folgenden davon aus, dass die Swiss Ephemeris in einem Ordner namens C:\SWEPH installiert wurde und dort im Unterverzeichnis EPHE die Ephemeridendateien zu finden sind. Die Ephemeridendateien erkennen Sie am Suffix .se1. Es sind Binärdateien, die die Planeten- und Asteroidenpositionen für bestimmte Zeiträume enthalten. Wenn Sie den Ordner EPHE nicht verwenden, arbeitet die Swiss Ephemeris behelfsweise mit einer analytischen Näherung, der sogenannten Moshier-Ephemeride.

Um im Tabellenkalkulationsprogramm Excel auf die Funktionen der Swiss Ephemeris zuzugreifen, verwenden Sie die von Microsoft für komplexere Zellberechnungen vorgesehene Programmiersprache Visual Basic (VBA). Sie ist in meinen Augen keine besonders schöne Programmiersprache, ja im Vergleich zu Sprachen wie Perl geradezu hässlich - aber sie tut ihre Dienste, und als Excel-Anwender müssen wir uns auf sie einlassen.

Die zu verwendenden Funktionen der Swiss Ephemeris müssen nun zu Beginn der Verarbeitung eines Excel-Sheets der VBA-Laufzeit bekanntgemacht werden. Dies geschieht durch Deklarationen wie die folgende:

Public Declare Function swe_calc_ut Lib "swedll32.dll" _
        Alias "_swe_calc_ut@24" ( _
          ByVal tjd_ut As Double, _
          ByVal ipl As Long, _
          ByVal iflag As Long, _
          ByRef x As Double, _
          ByVal serr As String _
        ) As Long                       
Das ist schon alles. Wünschen Sie sich ein bisschen Glück, wenn Sie nun beginnen, eigene VBA-Funktionen im Macro-Abschnitt Ihres Excel-Sheets zu programmieren. Die folgende VBA-Funktion beispielsweise berechnet die Position eines Planeten aus dem gregorianischen Datum in Jahr, Monat und Tag und gibt die ekliptikale Länge zurück:
Public Function SwissCalc(Planet As Long, Year As Integer, Month As _
                          Integer, Day As Integer, hour As Double) As Double

Dim lon_lat_dist(6) As Double  
Dim err_msg As String
Dim flag_ret As Long  

jd = swe_julday(Year, Month, Day, hour, 1) 
err_msg = String(255,0)
flag_ret = swe_calc_ut(jd, Planet, SEFLG_MOSEPH, lon_lat_dist(1), err_msg)
SwissCalc = lon_lat_dist(1)
 
End Function
Beachten Sie, dass Sie, um einen String zu übergeben wie hier err_msg, genügend Speicher bereitstellen müssen, in den das aufgerufene Funktion ihre Daten hineinschreiben kann. Hierzu dient hier das Statement err_msg = String(255,0). Bei der Angabe des Strings err_msgals Argument einer Funktion wird dann ein Zeiger auf das erste Zeichen der Zeichenfolge an die DLL übergeben. Gemäss Programmierhandbuch der Swiss Ephemeris wird der in dieses Feld geschrieben String nie länger als 255 Zeichen sein. Nur aufgrund dieser Zusicherung wissen wir, dass keine Speicherüberschreibung auftreten kann.

Die in diesem Artikel vorgestellte Tabellenkalkulation orbit.xls kann nur dann auf die Swiss Ephemeris zugreifen, wenn die Ephemeridendateien im Verzeichnis C:\SWEPH\EPHE zu finden sind. Befinden sie sich an einem anderen Ort, z.B. an C:\SWISS\EPHE, so müssen Sie den VBA-Code so ändern, dass beim Laden der Tabellenkalkulation einmal die Funktion

    swe_set_ephe_path ("C:\\SWISS\\EPHE")  'Nur nötig für abweichenden Ort der Ephemeridendateien
aufgerufen wird (beachten Sie die doppelten Backslashes, der erste ist das Fluchtsymbol für den zweiten).

Ein Ephemeridenblatt

Ich komme nun zur Praxis. Laden Sie sich meine Tabellenkalkulation orbit.xls herunter und speichern Sie diese an einem beliebigen Ort auf Ihrer Festplatte. Wenn Sie das Excel-Sheet öffnen, kommt üblicherweise eine Virenwarnung, denn überall, wo etwas programmiert wird (wie hier in VBA), kann theoretisch auch Schaden angerichtet werden. Wenn Sie mir (und meinem Provider) aber vertrauen, können Sie dies im erscheinenden Popup bestätigen und den Visual-Basic-Prozessor aktivieren.

Die Kalkulation hat zwei Blätter, eines heisst "Ephemeride", das andere "Orbit". Ich will zunächst das Ephemeridenblatt besprechen. Es sollte auch auf Ihrem Rechner ungefähr so aussehen wie hier links dargestellt: Dies ist der obere Teil des Ephemeridenblatts. Sie können ihn verwenden, um Horoskopstände mit der Swiss Ephemeris zu berechnen. Die Felder in Fettschrift sind die Eingabefelder. Geben Sie dort die geographische Position, die Weltzeit und das Datum ein. Verwenden Sie dabei für die Länge und Breite die Sexagesimalnotation, wie sie früher in Taschenrechnern üblich war, indem die ersten beiden Nachkommastellen die Minuten und die folgenden beiden Stellen die Sekunden bedeuten. Also z.B. 15.1632 für 15°16'32".

Excel ist so programmiert, dass während der Eingabe erst einmal überhaupt nichts passiert. Erst wenn Sie die Zelle verlassen, z.B. mit der Tabulator- oder Entertaste, werden alle Zellen, die von der eingegebenen abhängen, neu berechnet.

Dieser Teil des Ephemeridenblatts ist so aufgebaut, wie Sie früher handschriftlich ein Horoskop berechnet hätten. Aus Datum und Zeit entnahmen Sie (damals mittels Interpolation) die Planetenstände aus der Ephemeride. Die Häuserspitzen (hier für ASC und MC vorgeführt) berechneten Sie in mehreren Schritten, ausgehend von der Greenwicher Sternzeit, zu der Sie die in Zeit umgewandelte Länge des Geburtsortes hinzuzählten. Das ergab schliesslich die Sternzeit des Gebortsortes (als Zeit) oder RAMC (dasselbe als Bogen), die Grundlage für die Berechnung aller Häuserspitzen (die Sie dann für die betreffende Breite einer Häusertafel entnahmen).


Ereignisbogen und Unterschied zweier Datumswerte

Im rechten Teil desselben Ephemeridenblatts finden Sie einen anderen nützlichen Rechner: Sie können damit Datumswerte in eine fortlaufende "Julianische Tageszahl" (JD) verwandeln, wie sie in der Astronomie üblich ist.

Auch hier wieder sind die hervorgehobenen Felder für Tag, Monat und Jahr die Eingabefelder. Die Formeln der übrigen Zellen berechnen dann die fortlaufenden Julianischen Tageszahlen (JD) der beiden Daten. Unterm Strich wird dann die Differenz der beiden Daten in Tagen berechnet, daraus resultierend die Differenz in Sonnenjahren und schliesslich der Ereignisbogen unter Zugrundelegung des Schlüssels 1 Grad = 1 Jahr (Ptolemäus-Schlüssel).

Der Ereignisbogen spielt insbesondere bei der Korrektur der Geburtszeit mittels Primärdirektionen eine Rolle. Wenn Sie den Bogen eines Ereignisses kennen und dieses einer Primärdirektion zu einer Achse (Aszendent oder MC) zugeordnet haben, können Sie durch Rückrechnung die daraus resultierende Geburtssternzeit ermitteln.

Eine Ephemeride für Jahrtausende

Wenn Sie das Ephemeridenblatt nach unten rollen, sehen Sie das Monatsblatt einer Ephemeride. Einen Auszug habe ich hier links abgebildet.

Entscheidend ist, dass Sie den Monat und das Jahr völlig frei wählen können. Nach Eingabe eines Monats und/oder eines Jahrs werden die Positionen sämtlicher Planeten für jeden Tag des Monats für 0h Weltzeit neu berechnet. Sie haben damit in kürzester Zeit eine Ephemeride, die für einige Jahrtausende verwendbar ist (das ist besonders interessant für die astrologische Geschichtsforschung).

Diese Monatsephemeride stellt in dieser Form ein praktisches Anwendungsbeispiel dar. Sie können es leicht nach eigenen Vorstellungen abwandeln, ohne viel programmieren zu müssen. Sie könnten etwa ein ähnliches Blatt zur Berechnung der Sekundärdirektionen einer Person oder eines Ereignisses auf dieser Grundlage leicht selbst zusammenstellen. Schauen Sie sich einfach an, wie die Zellen berechnet werden. Im VBA-Editor sehen Sie die Bedeutung der Funktionsparameter. Wandeln Sie dann das Beispiel entsprechend ab.

Für Zyklenforscher - eine Langzeitephemeride

Bei der Betrachtung der Weltgeschichte gelangen manche, rein phänomenologisch vorgehend, zu einem Zyklus, den sie weder einem bestehenden Planeten noch einem Planetenpaar (Konjunktionszyklus) zuordnen können. Wer in Begriffen astrologischer Symbole denkt, könnte vermuten, dass ein solcher Zyklus mit einem noch unbekannten Himmelskörper weit draussen in unserem Sonnensystem zusammenklingt.

Besonders die mundanastrologischen Überlegungen von Gerhard Lukert regten mich dazu an, einen "Orbitrechner" in Excel zu verfassen. Es ist mit dem Rechenblatt "Orbit" möglich,

Hier sehen Sie einen Screenshot des "Orbit"-Rechenblatts (es sollte auf Ihrem Rechner ähnlich aussehen):

In diesem Blatt gefiel es mir, die für die Eingabe vorgesehenen Tabellenfelder rosa einzufärben. Sie sehen, dass Sie die von den Astronomen zur Definition einer Bahnellipse verwendeten Elemente eingeben können:

  1. Die Umlaufzeit in Jahren,
  2. Die Masse des Himmelskörpers in Erdmassen. Sie wird benötigt, um aus der Umlaufzeit mit dem dritten Keplerschen Gesetz die grosse Halbachse zu ermitteln. Diese wird in der Zelle rechts daneben berechnet und angezeigt. Wenn Sie mit dem Wert spielen, werden Sie bemerken, dass der Einfluss der Masse auf die Bahn nur sehr gering ist.
  3. Die Exzentrizität, ein Wert, der zwischen 0 und 0.7 liegen sollte. Die 0.7 ist keine theoretische Einschränkung, sondern erfolgt nur der numerischen Stabilität willen. Die übliche iterative Lösung der Keplergleichung ist nämlich für höhere Exzentrizitätswerte nicht mehr praktikabel.
  4. Die Neigung der Bahn zur Ekliptik in Grad, wobei wieder die sexagesimale Notation zur Eingabe von Grad/Minuten/Sekundenwerten verwendet wird. Es kann ein Wert zwischen 0 und 180 Grad sein. Werte über 90 Grad bedeuten dabei einen rückläufigen Himmelskörper, dessen Bahndurchlauf also umgekehrt orientiert ist als der der Erde. Hohe Bahnneigungen bedeuten, wie hohe Exzentrizitäten, starke Abweichungen von der gleichförmigen Bewegung. Im Falle der Bahnneigung werden diese durch die Projektion auf die Ekliptik verursacht.
  5. Der Ort des Perihels, angegeben zum Zeitpunkt der Epoche in ekliptikaler Länge. An diesem Ort durchläuft der Planet seine Bahn am schnellsten.
  6. Der aufsteigende Knoten gibt die Länge des Bahnpunktes an, bei dem die Planetenbahn die Ekliptik trifft. Steht der Planet an dieser Stelle, hat er keine ekliptikale Breite, sondern wechselt gerade von südlicher auf nördliche Breite.
  7. Es folgen dann drei Eingabefelder (Tag, Monat, Jahr) zur Festlegung des Bezugsdatums für die Bahnelemente, die sogenannte Epoche. Schliesslich geben Sie die mittlere Länge des Planeten zum Bezugsdatum an. Diese ist nicht zu verwechseln mit der wahren Länge, sondern stellt eine reine Rechengrösse dar, die aber nicht viel von der wahren Länge abweicht. (Sie ist für einen hypothetischen, gleichförmig mit derselben Umlaufzeit wandernden Punkt konstruiert, der beim Periheldurchgang genau die Perihellänge annimmt.)
Nach Eingabe dieser Werte erhalten Sie

Der Langzeitephemeride habe ich noch einige weitere hypothetische sowie einige langsam umlaufende Himmelskörper hinzugefügt. Isis (Transpluto) und Nibiru sind zwei hypothetische Planeten. Eros und Eris hingegen sind die Asteroiden der Nummer 433 und 136199 (letzterer ist auch unter seiner Katalognummer 2003UB313 bekannt). Diese werden nur dann richtig berechnet, wenn die betreffenden Ephemeridendateien im Verzeichnis C:\sweph\ephe enthalten sind. Auch diese Ephemeridendateien können Sie in der Download Area der Swiss Ephemeris herunterladen.

Für Kenner der Ephemeridenrechnung: Die Präzession habe ich hier nur näherungsweise berechnet, indem ich eine gleichförmige Präzession von 5026.87" pro Jahrhundert in Rechnung gebracht habe. Da die Epoche hier frei eingebbar ist, kann für die Umrechnung auch keine Funktion der Swiss Ephemeris verwendet werden (hier gibt es nur Umrechnungen mit festen Äquinoktien wie J1900 oder J2000). Eine Programmierung der exakten Umrechnung, wie sie z.B. in Oliver Montenbrucks Grundlagen der Ephemeridenrechnung, Verlag Sterne und Weltraum, München 1987, Kapitel 4 angegeben ist, erschien mir an dieser Stelle übertrieben, da es ja nur um einen groben Überblick der Bahnbewegung im Laufe der Jahrtausende geht.

Ein Blatt für Selbsttests

Es ist immer eine gute Idee, Programmcode um Selbsttests zu ergänzen. Darunter ist eine Sammlung von automatisch ausführbaren Tests zu verstehen, die den Code daraufhin abprüfen, dass er das Erwartete tut. Welche Vorteile bringt das? Einerseits helfen die Tests bei der Diagnose. Wenn das Programm sich unerwartet verhält, weisen die fehlgeschlagenen Tests in die Richtung, in die man schauen sollte. Zum anderen helfen Selbsttests, einen gesicherten Bestand der Anwendung festzuschreiben und auf Knopfdruck zu überprüfen. Ein Blick auf den Testcode zeigt anderen Entwicklern, wie der Einsatz der Funktionen gedacht ist. Auch stellt die Prüfung bei späteren Erweiterungen oder Änderungen des Codes sicher, dass nicht bereits laufende Funktionen durch die Änderungen zerstört wurden.

Frameworks für solche, auch unter dem Namen Unit Tests laufenden Testsuiten gibt es in den meisten Programmiersprachen. Es ist auch nicht schwer, ein kleines Framework dafür zu schreiben, wie ich es hier für das Excel-VBA getan habe. Ich habe das Excel-Programm orbit.xls um eine kleine Sammlung besonders wichtiger Selbsttests erweitert, die sich bei Fehlermeldungen leicht um weitere Tests ergänzen lässt. Hier eine Ansicht auf das Blatt "Selbsttest" mit dem Knopf "Tests ausführen"

Um weitere Tests hinzuzufügen, ergänzt man den Namen des Tests in der Spalte "Funktionsname" und verfasst dann im VBA-Code zu diesem Blatt eine Funktion dieses Namens. Der Aufruf erfolgt dynamisch mit der VBA-Funktion CallByName().


Zum Anfang Zurück zur Homepage