如何使用scipy最小化固定常量

时间:2018-05-08 12:58:38

标签: python scipy

我有一个非常基本的问题。我想使用scipy.minimize,但修复了一些常量。这是一个不起作用的玩具示例,但它显示了我想要实现的目标:

import scipy.optimize

def error(a, b, guess):
    target = 4
    return abs(a*guess - b*target)

a = 2
b = 3
calculated = scipy.optimize.minimize(error, (a, b, 0,))
print(calculated.x)

我的真实代码ab是在主体中计算的,因此我无法将它们硬编码到error函数中。

如何在固定常数中使用最小化,例如本例?

建议使用args。这是我失败的尝试:

import scipy.optimize

def error(x, b, c, n):
    return abs(c*b**x - n * 2**n)

n = 10
c = 1.1547
b = 1.6875
x = 10

calculated = scipy.optimize.minimize(error, 5, args=(b,c,n))
print(calculated.x)

这只会返回[5.],这不是最佳选择。

1 个答案:

答案 0 :(得分:1)

只需使用lambda函数创建一个修复常量的新函数:第一个示例变为:

import scipy.optimize

def error(a, b, guess):
    target = 4
    return abs(a*guess - b*target)

a = 2
b = 3
calculated = scipy.optimize.minimize(lambda guess: error(a, b, guess), 0)
正如预期的那样,

calculated.x返回6。感谢其他评论者指出args,这很有趣,但我总是使用这种lambda方法。