Numerische Simulation, wie am besten?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
sonium
User
Beiträge: 66
Registriert: Mittwoch 27. Oktober 2004, 21:04

Hi, ich arbeite gerade ein einer nummerischen Simulation für Planeten und Raumsonden Laufbahnen. Das ganze funktioniert im Wesentlichen so, dass man in kleinen Schritten unter berücksichtigung der Anziehungskräfte, die jeweilige nächste Position berechnet.

Nun meine Frage: Wie implementiert man so etwas am effizientesten?
Ich hab mir jetzt mal kurz numarray angesehen, aber bin mir nicht sicher ob das das richtige für mich ist. Es sieht je mehr aus, wie ein ziemlich großen Array auf das dann ziemlich allgemein gehaltenen numarray Funktionen (ufuncs) angewendet werden.

Die Alternative ist wohl, zum Speichern die Standart Python Datentypen zu verwenden, oder?
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi

Na ja, Deine Frage ist ja ziemlich allgemein - Du spezifizierst nicht, was Du genau an mathematischer Funktionalität brauchen wirst. Aber wenn Du in Python bleiben willst (und nicht MatLab, Fortran oder C nehmen willst), dann könnte numarray schon das Mittel der Wahl sein - nicht zuletzt wurde es ja auch von etlichen Astronomen mitentwickelt.

Etwas spezifischer:
Vorteile:
- ufuncs sind schon ganz nett, vor allem ist es rel. einfach weitere ufuncs in C zu implementieren, falls Du das brauchst.
- es gibt einen ganzen Batzen zusätzlicher Funktionen. Z. B. Fouriertransformationen, resp. Powerspektren - da liegt zugleich auch ein Nachteil, denn die Dokumentation ist manchmal nicht so doll, dann hilft leider nur Ausprobieren.
- man kann recht große Datenmengen verwursten, aber ... s.u.

Nachteil:
- s.o. die Doku ist zwar eigentlich ziemlich gut, aber an manchen Punkten zu knapp (mit dem FFT-Teil hatte ich Probleme herauszufinden, wo die Unterschiede zwischen best. Funktionen liegen, bis ich eigene Daten reingefüttert habe und mir das Ergebnis angesehen habe)
- ich weiß halt nicht recht, was Du brauchen wirst, aber bei sehr großen Datenmengen und Operationen (weiß nicht was das bei Dir konkret heißt), solltest Du Dir vielleicht überlegen anders zu programmieren als in Python.

Nebenbei:
Kennst Du ccp7 und überhaupt ccps http://www.ccp.ac.uk/? Das könnte sich als wahre Fundgrube von Funktionen und bereits bestehenden mathematischen Implementationen erweisen. Ist aber wohl ein overkill für Dein aktuelles Problem ;-) .

Zur Herangehensweise: Tut mir leid, von Astophysik verstehe ich absolut nichts. Wenn Du simple Differentialgleichungen lösen willst, gilt das mit den großen Datenmengen vielleicht nicht. Und u. U. brauchst Du auch kein zusätzliches Modul.
Also: Was sind Deine Anforderungen hinsichtlich Mathematik und Datenmengen?

Gruß,
Christian
sonium
User
Beiträge: 66
Registriert: Mittwoch 27. Oktober 2004, 21:04

Naja, Datenmengen könnten wohl schon einige Anfallen. Mathematisch beschränkt sich das ganze auf einfache Vektorrechnung. Also der einfachste Algorithmus den ich implementieren will funktioniert so, dass ich die Position, Geschwindigkeit und Masse einiger Objekte habe, als nächstes wird aus Position und Masse die Gravitationskraft die auf jedes Objekt wirkt berechnet. (Einfach eine Schleife, die alle Objektkombinationen durch geht und die Kräfte dann Objektweise aufsummiert). Und schließlich wird aus der beschleunigung die sich aus der Kraft auf den Körper innerhalb eines kleinen Zeitschrittes wirkt, die neue Position und Geschwindigkeit berechnet.

Und das soll man mit ufuncs machen können?
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi,

tut mir leid, daß ich jetzt erst antworte, aber ich habe 9 Stunden Zeitdifferenz und gestern war ne lange Nacht :cry: ...

Tja, also ob ufuncs alleine alles bieten sei mal dahingestellt, aber numarray bietet ja noch einiges mehr. Sicher bin ich mir nicht, aber ich glaube für Dich dürfte auch die lineare Algebra ganz interessant sein. Das müsstest Du allerdings zusätzlich installieren - siehe Numarray Docs.

Viel Erfolg,
Christian
Antworten