Numerische Integration

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.
Heini
User
Beiträge: 21
Registriert: Donnerstag 12. April 2007, 10:48

Also mit den zahlreichen Tips hast du mir schon sehr geholfen. Das Programm an sich ist ja schon besser geworden und für meinen allgemeinen Programmierstil war das wohl auch sehr wohltuend.
Ich werde dann mal versuchen die Mailing-Liste zu kontaktieren.

Gruß, Thomas
Goa
User
Beiträge: 18
Registriert: Dienstag 10. Oktober 2006, 11:00

Noch ein allgemeiner Tipp: Teilweise wiederholst du die gleichen Berechnungen tausende male. Ich denk da vor allem an die ganzen M**2, M**3...
ich würde das an deiner Stelle genau einmal direkt nach der Definition ausrechnen, das heisst du definierst dir neue konstanten a la M2, M3 (eventuell auch per dictionnary M[2],...) und ersetzt es in den Funktionen F und Z.
Den selben Trick kannst du natürlich auch innerhalb der Funktionen für k und k0 anwenden.
Keine Ahnung wieviel dir das an Rechenzeit erspart (würd mich allerdings interessieren, d.h. ein bischen Feedback wäre nett), aber kostet ja nix das zu implementieren.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Oh ja, das ist ein guter Punkt! Üblicherweise solltest so etwas im Kopf der Funktion machen. Den Lookup per Dictionary würde ich (aus dem Bauch heraus, ich habe keine Belege) nicht empfehlen: Der Performancehit ist nicht sehr groß, meistens kann man so etwas machen, aber hier ... ? Also bleibt, z.B.

Code: Alles auswählen

M2 = M**2
M3 = M**3
Na ja, das ist trivial, spart aber sicherlich Rechenzeit. Und weshalb ich das überhaupt nochmal schreibe: Ich frage mich, ob es nicht tatsächlich sinnvoll ist derartige Paramter global zu lassen: Sonst wird bei jedem Funktionsaufruf noch mehr mitgeschleppt, die Funktion schluckt einen Haufen Parameter, die auch nicht gerade übersichtlich aussehen werden und Errechnen der Potenzen im Kopf würde ebenfalls bedeuten diese Parameter stehts neu auszurechnen. Also: Einmal ausrechnen und dann global lassen (ausnahmsweise)? Was denkt ihr?

Gruß,
Christian
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

@Heini: Habe nichs auf der scipy-Liste gelesen? Ist das Problem gelöst? Habe ich die Diskussion völlig übersehen?

Gruß,
Christian
BlackJack

Wenn sich etwas nicht ändert, kann man eine globale Konstante daraus machen. Das ist an sich ja nicht unsauber, eher das neu binden von globalen Variablen.

Aus Geschwindigkeitsgründen könnte man diese Berechnungen oder Ergebnisse auch als Defaultargumente einführen. Die Namen sind dann schneller beim Zugriff weil sie nicht im Namensraum des Moduls ("dynamischer" Dictionary-Zugriff) sondern in der Funktion (Array-Zugriff mit festem Index) liegen.

Aber Grundsätzlich gilt immer noch das Motto: Erst sollte die Funktion das korrekte Ergebnis liefern können, dann kann man optimieren.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

BlackJack hat geschrieben: Aber Grundsätzlich gilt immer noch das Motto: Erst sollte die Funktion das korrekte Ergebnis liefern können, dann kann man optimieren.
Ich finde: Mit der Ausnahme, daß Code erst einmal in einer sinnvollen Zei überhaupt ein Ergebnis liefert, das man evaluieren kann ...

Insofern kann ich "Heini" schon verstehen ;-).

Gruß,
Christian
Heini
User
Beiträge: 21
Registriert: Donnerstag 12. April 2007, 10:48

Hallo,
ich muss mich ersteinmal für das Ausbleiben meines Feedbacks in der letzte Woche entschuldigen. Ich habe das letzte viertel Jahr in Russland verbracht und bin in der letzten Woche in die Heimat zurück gekehrt. Da musste ich ersteinmal "resozialisiert" werden. ;-)
Das Problem besteht leider weiterhin. Ab bestimmtem n (n=2, also die 3. Zahl) in der Schleife schafft er es leider nicht ein Ergebnis zu liefern. Er gibt weiterhin die oben erwähnte Warnung aus. Ich werde aber in dieser Woche auf alle Fälle noch die SciPy-Mailingliste konsultieren.

Ansonsten lohnt es sich im Sinne Pythons dieses Problem zu lösen. In dem Institut an dem ich gerade war gibt es nur zwei Sorten von Angestellten. Wissenschaftler die Fortran programmieren und Putzfrauen. Ihr könnt euch vorstellen wie die geguckt haben als ich da mit Python aufgekreuzt bin. Und abgesehen von diesem kleinen Problemchen am Ende konnte selbst ich alle von der "Macht Pythons" überzeugen.

Gruß, Thomas
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

:lol:

Das Problem kenne ich. Man muß natürlich schon zugeben: Python ist toll, aber wo es wirklich um Numbercrunching geht, braucht man kompilierte Module (in C oder Fortran geschrieben). Deshalb numpy und scipy. Und manchmal kommt man halt nicht umhin doch selber Code auszulagern.

In welcher Gegend hockst Du eigentlich?

Gruß,
Christian
Antworten