【问题标题】:Is there a way to calculate minima of a function有没有办法计算函数的最小值
【发布时间】:2021-08-23 13:56:58
【问题描述】:

我有一个类似于平方误差的函数。直到 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)?如果有任何更优化的方式来做到这一点,请提及。

【问题讨论】:

    标签: python numpy scipy derivative minima


    【解决方案1】:

    您可以使用此代码:

    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
    

    【讨论】:

    • 它给出的是局部最小值还是全局最小值?我想找到全局最小值。
    • 函数是s中的二次函数。因此,如果将其导数设置为零,它将是一个线性方程,这意味着将有一个驻点。因此,如果它是一个最佳点,那么它将是唯一存在的最佳点。因此,即使算法找到了局部最优值,在这种特殊情况下,局部最优值也等于全局最优值。
    • 感谢清晰的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 2016-09-06
    • 2021-09-10
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多