Je me demandais quelle différence entre les deux méthodes scipy.optimize.leastsq code>
et scipe.optimize.least_squares code>
est?
Lorsque je les implémenter, ils produisent des différences minimales dans CHI ^ 2: P>
>>> solution0 = ((p0.fun).reshape(100,100)) >>> # p0.fun are the residuals of my fit function np.ravel'ed as returned by least_squares >>> print(np.sum(np.square(solution0))) 0.542899505806 >>> solution1 = np.square((median-solution1)) >>> # solution1 is the solution found by least_sq, it does not yield residuals thus I have to subtract it from the median to get the residuals (my special case) >>> print(np.sum((solution1))) 0.54402852325
3 Réponses :
dans Il existe d'autres fonctionnalités que la moindreqq ne fournit pas si vous comparez les Docstrings P> moins_squares code> Vous pouvez donner des limites supérieure et inférieure pour chaque variable p>
La raison Cet ajout apparemment simple est en fait loin des algorithmes triviaux et requis complètement de nouveaux nouveaux algorithmes, en particulier le dogleg ( également important est le support des problèmes à grande échelle et des jacobiens clairsemés. P>
Lorsque les limites des variables ne sont pas nécessaires, et que le problème n'est pas très grand, les algorithmes de la nouvelle fonction scipe Cependant, le même code FORTRAN MINPACK est appelé à la fois par l'ancien méthode = "dogleg" code> dans
au moins_squares code>) et la région de confiance réfléchissant (
Méthode = "trf" code>), qui permet un traitement robuste et efficace des contraintes de la boîte (détails sur les algorithmes sont donnés dans les références au SCIPY Documentation ). P>
moins_squares code> ont peu, le cas échéant, en ce qui concerne le Minpeack Levenberg-Marquardt Mise en œuvre utilisée dans l'ancien
moinsq code> un. p>
moinsq code> et par le nouveau
code> avec l'option
méthode = "lm" code>. Pour cette raison, l'ancien
moinsq code> est maintenant obsolète et n'est pas recommandé pour le nouveau code. P>
Est-il possible de fournir différentes limites sur les variables. Mon problème nécessite que la première moitié des variables soit positive et la seconde moitié à être dans [0,1]. Il est difficile de faire ce correctif?
Bien sûr, chaque variable a sa propre liaison: limites = [(L1, L2, ...), (U1, U2, ...)] code>