Ich möchte Lösungen für die stationäre Schrödingergleichung finden per Iteration. Während der Iteration soll die entstehende Kurve auf ein TKinter.Canvas ge"malt" werden. Dafür hab ich die Iteration und den "Mal-Befehl" in einen eigenen Thread gepackt, sodass diese Dinge von der Tkinter mainloop unabhängig laufen. Mit diesem Verfahrensprinzip hatte ich auch schonmal Erfolg bei einem anderen Problem, wo ich auch Punkte während einer Rechnung/Iteration auf ein Canvas gezeichnet habe.
Mein jetziges Skript hängt sich samt IDLE (ich arbeite unter Windows) aber zu einem willkürlichen Zeitpunkt auf, bzw. ich habe nichtmal die Möglichkeit, den Punkt genau zu erkennen. Der Zeitpunkt ist aber immer weniger als eine Sekunde nach Programmstart. Ich habe soviele Log-Ausgaben in eine Ausgabe-Datei gemacht, wie ich konnte und nur anhand dieser stelle ich fest, dass das Skript mal weiter und mal weniger weit kommt in der Iteration. Das IDLE Fenster und mein Tkinter Fenster sind dann "eingefroren". Fehlermeldungen kommen nicht in der Shell (zumindest nicht, bevor das Shellfenster einfriert).
Aber: Ohne den extra Thread hängt sich die Iteration in genau derselben Form (also die gleichen Funktionen FindPsi(),NumerovInt(),NumerovUpdate(),k(),x(),V() ) NICHT auf!
Mir fällt nichts anderes ein, als Euch erstmal den gesamten Quelltext zu zeigen. Habe ihn mal hier ausgelagert:
http://nopaste.ch/e61060a444eb25d.html
Kurz zur Erläuterung:
In Zeile 24/25 wird der Rechen/Zeichnen-Thread definiert und gestartet:
Code: Alles auswählen
calcPsiThread = CalcThread(sgn=1, E=0.7, dE=0.03, dEabort=1e-013)
calcPsiThread.start()
Code: Alles auswählen
E = FindPsi(self.sgn, self.E, self.dE, self.dEabort)
In Zeile 116
Code: Alles auswählen
if n%20 == 0: #window.Point((n*breite/N),newPsi,2)
Überhaupt interagiert durch dieses Auskommentieren der Thread calcPsiThread gar nicht mehr mit dem Hauptprogramm. Wo könnte nur der Fehler liegen?
Ich wünschte ich könnte mein Problem ein bisschen besser durchschauen oder eingrenzen...