我想了解如何将另一个函数调用到函数中。例如,我想用有理函数来近似数据,所以我想最小化近似函数。我使用
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
minimize(approximate, x0=(0, 0, 0, 0), args=(X, Y, rational,), method='Nelder-Mead')但出现错误:approximate() missing 3 required positional arguments: 'x', 'y', and 'func'
因此,我想了解我应该如何使用这样的构造和最佳实践
发布于 2021-11-18 14:30:41
您正在向minimize传递一个具有7个参数的函数,但它需要一个签名为fun(x, *args)的函数。如果你真的想通过minimize的args参数传递额外的函数参数,你可以这样做:
minimize(lambda z, *args: approximate(*z, *args), x0=(0, 0, 0, 0), args=(X, Y, rational), method='Nelder-Mead')在这里,*z解压所有参数。然而,更清晰的解决方案是:
minimize(lambda z: approximate(*z, X, Y, rational), x0=(0, 0, 0, 0), method='Nelder-Mead')发布于 2021-11-18 15:59:30
我使用a, b, c, d = params into函数解决了这个问题。工作代码是
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')https://stackoverflow.com/questions/70018986
复制相似问题