基本上,你想使估计值和真实函数之间的误差最小。
EDIT : 这里的明显选择是在4个参数上使用梯度下降。如果你不想这样做,而要求更多的像一个务实的解决方案,这里就是。
这里的主要问题是有4个参数。为了解决这个问题,你可以这样做。
我将描述一个过程来证明这个想法。我们将使用scipy的scalar_minimizer,它采用了Brent方法。
为了便于讨论,让我们保持你的函数由2个参数组成,让我们假设你的函数是。
def f(p1, p2):
return p1 + np.sqrt(p2)
你基本上是在问如何找到和p1, p2的值,使f(p1, p2) = 100。
假设范围如下。
ranges for p1: 10-20
ranges for p2: 20-30
让我们把p1固定为10(你可以自由地固定为这个范围内的任何东西)。现在这个函数变成了
def g(p2):
return 10 + np.sqrt(p2)
我们希望它尽可能地接近100,所以让我们创建一个误差函数来衡量我们的估计值离100有多远。
def error(p2):
return 100 - (10 + np.sqrt(p2)) # we want to minimize this
你可以找到值来最小化这个误差,这样你就可以尽可能地接近100,通过
from scipy import optimize
optimize.minimize_scalar(error, bounds = (10,20), method = "bounded")
它给出了一个x=19.9的值,作为使误差最小的值。