Warnung von fsolve in Scipy.optimize abfangen

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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Das ``warnings``-Modul verwenden, im Wiki gibt es eine [wiki=Neue Features#Warnings]kurze Beschreibung[/wiki] dazu.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
Antworten