Python scipy.optimiser: à l'Aide de fsolve avec plusieurs premières suppositions

Scipy la version 0.10.0

De considérer les éléments suivants:

>>> import math
>>> from scipy.optimize import fsolve
>>> import numpy as np
>>> def p(s, l, k, q):
    p = q * np.maximum(s - k, 0.0)
    return (p + math.copysign(l, -q)) * math.fabs(q) * 100.0

>>> x0 = fsolve(p, np.arange(33.86, 50.86, 1.0), args=(1.42, 41.0, -1.0), xtol=1e-06, maxfev=500)
Warning (from warnings module):
  File "C:\Python27\lib\site-packages\scipy\optimize\minpack.py", line 152
    warnings.warn(msg, RuntimeWarning)
RuntimeWarning: The iteration is not making good progress, as measured by the 
   improvement from the last ten iterations.
>>> print x0
[ -4.87169392e+05  -4.87168392e+05  -4.87167392e+05  -4.87166392e+05
  -4.87165392e+05  -4.87164392e+05  -4.87163392e+05  -4.87162392e+05
   4.24200000e+01   4.24200000e+01   4.24200000e+01   4.24200000e+01
   4.24200000e+01   4.24200000e+01   4.24200000e+01   4.24200000e+01
   4.24200000e+01]

Première question est de savoir comment on peut supprimer le message d'avertissement qui est de retour?

Deuxième, pourquoi cette erreur peut être généré en premier lieu (autre que ce qui est évident, que l'itération n'est pas de faire de bons progrès 🙂 )?

Enfin, la racine de cette fonction est 42.42 (qui se trouve). Pourquoi est - fzero retour -4.87e+05?

Essayez d'utiliser numpy.seterr pour désactiver le message d'erreur:numpy.seterr(invalid='ignore')
Merci pour la suggestion, mais il ne fonctionne pas.

OriginalL'auteur Jason Strimpel | 2012-10-24