首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Levenberg-Marquardt方法求解least_squares函数

用Levenberg-Marquardt方法求解least_squares函数
EN

Stack Overflow用户
提问于 2018-05-28 06:22:41
回答 1查看 4.5K关注 0票数 1

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

代码语言:javascript
复制
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的输入参数?对于这个问题,我没有任何进一步的信息,例如Jacobian矩阵,所以我不确定这个方法是否特别适合这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-28 06:39:20

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

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

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50560267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档