"RuntimeWarning: invalid value encountered in divide"

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
SimPy
User
Beiträge: 20
Registriert: Dienstag 19. Februar 2013, 15:36

Hallo Python-Forum,

Problembeschreibung:
================
Ich löse ein nicht lineares Gleichungssystem mit scipy.optimize.root(). Hierbei benutze ich verschiedene Lösungsalgorithmen. Bei einem dieser Algorithmen, nämlich Anderson, tritt folgende Fehlermeldung auf:
scipy\optimize\nonlin.py:970:RuntimeWarning: invalid value encountered in divide d = v/vdot (df,v)
Der Algorithmus arbeitet mit Ableitungen einer Funktion f (daher "df") nach verschiedenen Variablen (hier "v"). "vdot" führt eine Vektormultiplikation aus. Da es sich um eine Division handelt. liegt natürlich nahe, dass es eine Division durch Null sein könnte, die den Fehler hervorruft. Leider weiß ich nicht, wie ich das debuggen kann. Ich kann zum Beispiel nicht schreiben

Code: Alles auswählen

print "Nenner = "+str(vdot (df,v))
weil diese Division ja nicht in meinem Quellcode stattfindet, sondern innerhalb einer Bibliothek.
Nun meine Frage an Euch: Wie würdet Ihr beim debuggen vorgehen?

Gruß
SimPy
xeike
User
Beiträge: 83
Registriert: Donnerstag 28. Februar 2013, 09:58

Zeig doch mal etwas von deinem Skript.

Kannst du auf df oder v zugreifen?
BlackJack

@SimPy: Wenn das in Python-Code passiert, und danach sieht es aus, könnte man notfalls die Funktion oder Methode kopieren, mit Debugausgaben versehen und das „monkey patching” betreiben, damit `scipy` die präparierte Funktion oder Methode verwendet.

Oder Du schnappst Dir einen Debugger und gehst Da mal Schrittweise durch, oder setzt Haltepunkte. Im einfachsten Fall `pdb` aus der Standardbibliothek, oder zum Beispiel `winpdb`. Bei letzterem nicht durch das 'win' irritieren lassen, das steht nur für Fenster — der läuft nicht nur unter Windows. :-)
SimPy
User
Beiträge: 20
Registriert: Dienstag 19. Februar 2013, 15:36

Zeig doch mal etwas von deinem Skript. Kannst du auf df oder v zugreifen?
@ xeike: ich verwende exakt den gleichen Aufruf, wie er hier gezeigt ist. Meine Funktion ist natürlich nicht die gleiche - aber sie lässt sich mit manchen solvern lösen, und bei manchen tritt dann plötzlich der beschriebene Fehler auf. Daher kann ich leider nicht auf df bzw. v zugreifen.

@ BlackJack: Echt krass, was man hier im Forum alles lernt! Hier mal für alle, die so ein ähnliches Problem schon mal hatten, die Seite, unter der man diesen Python Debugger nachlesen kann. Das funktioniert sogar post_mortem, d.h. wenn das Programm bereits mit einem Fehler abgebrochen ist!

Danke!
Antworten