Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在scipy和x27中使用Levenberg-Marquardt方法;s最小二乘函数_Python_Optimization_Scipy_Nonlinear Optimization - Fatal编程技术网

Python 在scipy和x27中使用Levenberg-Marquardt方法;s最小二乘函数

Python 在scipy和x27中使用Levenberg-Marquardt方法;s最小二乘函数,python,optimization,scipy,nonlinear-optimization,Python,Optimization,Scipy,Nonlinear Optimization,我试图通过使用Python中的函数来解决一个(非线性最小二乘)玩具问题 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

我试图通过使用Python中的函数来解决一个(非线性最小二乘)玩具问题

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参数预期,得到float
。我是否缺少
最小二乘法的输入参数?我没有关于这个问题的更多信息,例如雅可比矩阵,所以我不确定这个方法是否特别适合这个问题。

如果你喜欢指数表示法,你需要写
max\u nfev=1000000
,或者
max\u nfev=int(1e6)

1e9
是浮点文字,但
max\u nfev
应为整数。显然,LM算法会检查这一点,而其他算法可能会默默地接受浮点

请注意值和数据类型之间的差异:


1
是值为1的整数,
1.0
是值为1的浮点。从数学上讲,两者都有相同的值,但它们不是相同的东西,因为它们有不同的数据类型。

谢谢,你说得对。看起来对于LM算法来说,
max\u nfev=int(1e6)
是必需的,但是
trf
dogbox
将接受
max\u nfev=1e6
max\u nfev=int(1e6)