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:
Merci pour la suggestion, mais il ne fonctionne pas.
numpy.seterr(invalid='ignore')
Merci pour la suggestion, mais il ne fonctionne pas.
OriginalL'auteur Jason Strimpel | 2012-10-24
Vous devez vous connecter pour publier un commentaire.
Vous risqueriez de vous faire rater quelque chose d'important, mais, pour faire taire le message d'avertissement vous pouvez utiliser
warnings.filterwarnings
:En fait,
p(x0, 1.42, 41.0, -1)
n'est pas proche de zéro, de sortefsolve
est correctement avertissement vous qu'il a échoué à trouver une solution.PS. Quand vous dites
vous dites
fsolve
que votre supposition initiale, pours
est le tableau numpynp.arange(33.86, 50.86, 1.0)
. L'ensemble du tableau est passé àp
à la fois.Avis que
np.arange(33.86, 50.86, 1.0)
a longueur de 17 et ainsi de nex0
. C'est parce quefsolve
pense qu'il est à la recherche d'un tableau de longueur 17 qui résoutp
.Je pense peut-être que vous avez voulu dire
s
être un float? Dans ce cas, vous ne pouvez passer une valeur float pour votre supposition initiale:Par exemple,
rendements
fsolve
fait un travail décent de se concentrer sur la racine si la proposition initiale est >= 41.0 (la valeur dek
) mais échoue lors de l'estimation initiale est < 41.0.Je suppose que cela est dû à
np.maximum
ne changent pas pendant plusieurs hypothèses pours
. Doncfsolve
ne sais pas s'il faut augmenter ou diminuers
et est apte à deviner tort et déplacers
de plus en plus loin de la racine.OriginalL'auteur unutbu
OriginalL'auteur Abdar Mohammad