繁体   English   中英

在Scipy的minimum_squares函数中使用Levenberg-Marquardt方法

[英]Using Levenberg-Marquardt method in scipy's least_squares function

我正在尝试通过在Python中使用scipy.optimize.least_squares函数来解决(非线性最小二乘)玩具问题。

import numpy as np
from scipy.optimize import least_squares

a = 2
b = -1

def myfun(x,a,b):
    return [a*x[0]-x[1]-np.exp(-x[0]), b*x[0]+2*x[1]-np.exp(-x[1])]

x0 = [-5,-5]
sol = least_squares(myfun,x0,method='lm',ftol=1e-9,xtol=1e-9, \
                    max_nfev=1e6,args=(a,b))

print(sol)

'''
method='trf' solution:  x = array([0.56714329,0.56714329])
'''

如果我使用Levenberg-Marquardt方法method='lm'则会收到错误TypeError: integer argument expected, got float 我是否错过了least_squares的输入参数? 我没有任何有关此问题的进一步信息,例如雅可比矩阵,因此我不确定该方法是否特别适合该问题。

如果您希望使用指数表示法,则需要编写max_nfev=1000000max_nfev=int(1e6)

1e9是浮点文字,但max_nfev应该是整数。 显然,LM算法会对此进行检查,而其他算法可能会默默接受浮点数。

注意数据类型之间的区别:

1是值为1的整数, 1.0是值为1的浮点数。 从数学上讲,两者具有相同的值,但是它们却不是同一件事,因为它们具有不同的数据类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM