首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将函数调用到另一个函数scipy.minimize中。缺少3个必需的位置参数:

将函数调用到另一个函数scipy.minimize中。缺少3个必需的位置参数:
EN

Stack Overflow用户
提问于 2021-11-18 11:22:09
回答 2查看 37关注 0票数 0

我想了解如何将另一个函数调用到函数中。例如,我想用有理函数来近似数据,所以我想最小化近似函数。我使用

代码语言:javascript
复制
def rational(a, b, c, d, x):
    return (a * x + b) / (x ** 2 + c * x + d)

def approximate(a, b, c, d, x, y, func):
    return np.sum( (func(a, b, c, d, x) - y) ** 2 )

我想将rational传递到approximate,然后将其传递给scipy.minimize like

代码语言:javascript
复制
minimize(approximate, x0=(0, 0, 0, 0), args=(X, Y, rational,), method='Nelder-Mead')

但出现错误:approximate() missing 3 required positional arguments: 'x', 'y', and 'func'

因此,我想了解我应该如何使用这样的构造和最佳实践

EN

回答 2

Stack Overflow用户

发布于 2021-11-18 14:30:41

您正在向minimize传递一个具有7个参数的函数,但它需要一个签名为fun(x, *args)的函数。如果你真的想通过minimize的args参数传递额外的函数参数,你可以这样做:

代码语言:javascript
复制
minimize(lambda z, *args: approximate(*z, *args), x0=(0, 0, 0, 0), args=(X, Y, rational), method='Nelder-Mead')

在这里,*z解压所有参数。然而,更清晰的解决方案是:

代码语言:javascript
复制
minimize(lambda z: approximate(*z, X, Y, rational), x0=(0, 0, 0, 0), method='Nelder-Mead')
票数 0
EN

Stack Overflow用户

发布于 2021-11-18 15:59:30

我使用a, b, c, d = params into函数解决了这个问题。工作代码是

代码语言:javascript
复制
def rational(params, x):
    a, b, c, d = params
    return (a * x + b) / (x ** 2 + c * x + d)

def approximate(params, x, y, func):
    return np.sum( (func(params, x) - y) ** 2 )

nm_coefs = minimize(approximate, x0=(0, 1, 3, 2), args=(X, Y, rational,), method='Nelder-Mead')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70018986

复制
相关文章

相似问题

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