gpt4 book ai didi

python - 在scipy的least_squares函数中使用Levenberg-Marquardt方法

转载 作者:行者123 更新时间:2023-12-01 01:52:52 25 4
gpt4 key购买 nike

我正在尝试使用 scipy.optimize.least_squares 来解决(非线性最小二乘)玩具问题。 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:需要整数参数,得到 float 。我是否缺少 least_squares 的输入参数?我没有关于该问题的任何进一步信息,例如雅可比矩阵,所以我不确定这个方法是否特别适合这个问题。

最佳答案

如果您喜欢指数表示法,则需要编写 max_nfev=1000000max_nfev=int(1e6)

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

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

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

关于python - 在scipy的least_squares函数中使用Levenberg-Marquardt方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50560267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com