有没有办法计算函数的最小值
Is there a way to calculate minima of a function
我有一个类似于平方误差的函数。直到 n (n ~ 1000)
f(s) = (d1 - sd'1)**2 + (d2 - sd'2)**2 + .... + (dn - sd'n)**2
我有 2 个列表
d = [0.0322, 0.245, 0.85 ..... n]
d' = [56, 200, 340 ..... n]
我想计算这个函数的全局最小值(找到 s ?)。我知道我可以尝试 scipy optimizer(http://scipy-lectures.org/intro/scipy/auto_examples/plot_optimize_example2.html) 来计算这个,但我无法像他们在下面的文档中那样形成函数。
def f(x):
return x**2 + 10*np.sin(x)
如何根据我的函数构造这个f(x)?如果有任何更优化的方法可以做到这一点,请提出来。
您可以使用此代码:
from scipy.optimize import minimize_scalar
def f(s,d1,d2):
return sum([(d1[i]-s*d2[i])**2 for i in range(len(d1))])
d1_list = [0.0322, 0.245, 0.85]
d2_list = [56, 200, 340]
res = minimize_scalar(f, args=(d1_list,d2_list))
print(res.x)
输出:
0.0021406813829251007
我有一个类似于平方误差的函数。直到 n (n ~ 1000)
f(s) = (d1 - sd'1)**2 + (d2 - sd'2)**2 + .... + (dn - sd'n)**2
我有 2 个列表
d = [0.0322, 0.245, 0.85 ..... n]
d' = [56, 200, 340 ..... n]
我想计算这个函数的全局最小值(找到 s ?)。我知道我可以尝试 scipy optimizer(http://scipy-lectures.org/intro/scipy/auto_examples/plot_optimize_example2.html) 来计算这个,但我无法像他们在下面的文档中那样形成函数。
def f(x):
return x**2 + 10*np.sin(x)
如何根据我的函数构造这个f(x)?如果有任何更优化的方法可以做到这一点,请提出来。
您可以使用此代码:
from scipy.optimize import minimize_scalar
def f(s,d1,d2):
return sum([(d1[i]-s*d2[i])**2 for i in range(len(d1))])
d1_list = [0.0322, 0.245, 0.85]
d2_list = [56, 200, 340]
res = minimize_scalar(f, args=(d1_list,d2_list))
print(res.x)
输出:
0.0021406813829251007