Scipi最小化所有0个参数中的结果

时间:2019-01-18 14:04:09

标签: python optimization scipy minimize

因此,我有一组值(图片中半径上的中值强度值),并且我想拟合一个多项式函数来模拟图片中的渐晕效果。 问题在于,scipy.optimize.minimize函数仅向我返回所有0参数。

如果要复制我在做什么,以下是Z_RB的一些示例数据: 注意:在拟合过程中,应该忽略最后的0值。 https://pastebin.com/MKqKgPFr 数据图:https://imgur.com/a/7HRM3N5

此外,约束不起作用,我需要使函数单调递减并从1开始。错误为“ IndexError:用作索引的数组必须为整数(或布尔值)类型”这不是主要问题,但是如果您有关于我的建议,我会很高兴听到它,我可能会在配件本身起作用后立即为此创建第二个问题。

我的大多数代码以前都在其他实例中工作过。 scipy.optimize.minimize的调用已经使用了简化的函数,但是由于我还没有使用它,所以我可能以错误的方式调用了某些东西 据我测试,该功能是完善的。 损失也应该起作用,但最有可能是造成这种情况的元凶,因为那曾经导致了问题。 计算Z_RB的工作原理,我确定。

调用拟合函数(p是多项式的次数):

7.3.0

拟合函数:

polpar = np.zeros(p)
if config["fitter"]==1:
    V_fit = calc.fit_my_polyfit(Z_RB, polpar, filename)

损失函数:

def fit_my_polyfit(Z_RB,param,title):
    last = np.amax(np.flatnonzero(Z_RB))
    print("polyfit with regularization")

    r = np.arange(0, len(Z_RB),dtype='uint32')
    b = (None,None)
    bnds = (b,)
    for i in range(len(param)-1):
        bnds = bnds + (b,)

    cons = ({'type': 'ineq', 'fun': lambda param: -np.diff(f(r,param))},
        {'type': 'eq', 'fun': lambda param: f(r, param)[0]-1})
    #The Constraints don't work, so they aren't called at the Moment
    res = minimize(loss, param, method='trust-constr', args=(Z_RB[3:last]), bounds=bnds)

    print(res.x)
var = res.x
    V_fit = f(r,var)
    Z_corr = np.minimum(np.divide(Z_RB, V_fit), 1)
    plt.figure(1)
    plt.clf()
    plt.plot(r, Z_RB, 'b-')
    plt.plot(r, V_fit, 'r-')
    plt.plot(r, Z_corr, "g-")
    plt.show()
    return V_fit

多项式函数:

def loss(param, Z_RB):
    r = np.arange(0, len(Z_RB),dtype='uint32')
    V = f(r,param)
    ll = 1
    lr = 1
    L2 = m.sqrt(np.sum(np.power(np.subtract(Z_RB,f(r, param)),2)))
    reg = np.sum(np.power(param,2))
    return ll*L2 +lr*reg

这是当前输出: https://pastebin.com/P8iCCjan

0 个答案:

没有答案