Seite 1 von 1

Warnung von fsolve in Scipy.optimize abfangen

Verfasst: Dienstag 2. Oktober 2007, 21:31
von HWK
fsolve gibt auf der Konsole als Hinweis, dass das Ergebnis wahrscheinlich falsch ist, eine Warnung aus, z.B. so:

Code: Alles auswählen

>>> from math import cosh
>>> from scipy.optimize import fsolve
>>> def func(x):
	return cosh(x)

>>> fsolve(func, 0)
Warning: The iteration is not making good progress, as measured by the 
  improvement from the last ten iterations.
0.0
>>> 
Wie kann ich diese Meldung im Programm abfangen, um dass Ergebnis von fsolve (in diesem Fall 0.0) zu verwerfen? Ich könnte vielleicht stderr umleiten. Dann bliebe aber das Problem, diese "Umleitroutine" mit der, die fsolve benutzt, zu synchronisieren.
Danke
HWK

Verfasst: Dienstag 2. Oktober 2007, 23:53
von Leonidas
Das ``warnings``-Modul verwenden, im Wiki gibt es eine [wiki=Neue Features#Warnings]kurze Beschreibung[/wiki] dazu.

Verfasst: Mittwoch 3. Oktober 2007, 09:51
von HWK
Danke. Der Tip scheint gut zu sein. Ich weiß nur nicht, wie ich es umsetzen soll. Ich habe als erstes versucht, alle Warnungen mit

Code: Alles auswählen

filterwarnings('error')
in Fehler umzuwandeln, um diese dann mit except abzufangen. Das funktioniert aber nicht. Selbst nach

Code: Alles auswählen

filterwarnings('ignore')
, was m.E. dazu führen sollte, dass die Warnungen nicht mehr angezeigt werden, werden wie Hinweise weiter eingeblendet!?
MfG
HWK

Verfasst: Mittwoch 3. Oktober 2007, 16:31
von HWK
fsolve gibt Warnungen nicht mit dem warnings-Modul aus. Man kann aber über das Argument full_output=True zusätzliche Informationen von fsolve zum Ergebnis erhalten: ier == 1 bedeutet kein Fehler, ansonsten entspricht es einer Warnung.
MfG
HWK