麻烦最小化python中的值

时间:2018-03-07 19:19:06

标签: python python-3.x optimization minimize

我试图最小化依赖于函数的值(并因此优化函数的参数),因此后者匹配一些实验数据。

问题是,我实际上并不知道我是否正确编码了我想要的内容,或者即使我使用了正确的函数,因为我的程序给了我一个错误。

import scipy.optimize as op

prac3 = pd.read_excel('Buena.xlsx', sheetname='nl1')

print(prac3.columns)

tmed = 176
te = np.array(prac3['tempo'])
t = te[0:249]
K = np.array(prac3['cond'])
Kexp = K[0:249]
Kinf = 47.8
K0 = 3.02
DK = Kinf - K0
def f(Kinf,DK,k,t):
    return (Kinf-DK*np.exp(-k*t)) 
def err(Kexp,Kcal):
    return ((Kcal-Kexp)**2)

Kcal = np.array(f(Kinf,DK,k,t))
print(Kcal)

dif = np.array(err(Kexp,Kcal))
sumd = sum(dif)
print(sumd)

op.minimize(f, (Kinf,DK,k,t)) 

程序给我的错误如下:

    ValueError                                Traceback (most recent call last)
<ipython-input-91-fd51b4735eed> in <module>()
     48 print(sumd)
     49 
---> 50 op.minimize(f, (Kinf,DK,k,t))
     51 
     52 

~/anaconda3_501/lib/python3.6/site-packages/scipy/optimize/_minimize.py in minimize(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options)
    352 
    353     """
--> 354     x0 = np.asarray(x0)
    355     if x0.dtype.kind in np.typecodes["AllInteger"]:
    356         x0 = np.asarray(x0, dtype=float)

~/anaconda3_501/lib/python3.6/site-packages/numpy/core/numeric.py in asarray(a, dtype, order)
    529 
    530     """
--> 531     return array(a, dtype, copy=False, order=order)
    532 
    533 

ValueError: setting an array element with a sequence.

1 个答案:

答案 0 :(得分:0)

例外情况表明您将数组传递给期望可调用的数组。如果没有看到你的追溯或者更多地了解你正在尝试做什么,我只能猜测这发生了什么,但我的猜测就在这里:

op.minimize(f(Kinf,DK,k,t),sumd)

the docs开始,第一个参数是可调用的(函数)。但是你作为第一个参数传递了任何f(Kinf,DK,k,t)返回值。并且,查看您的f函数,它看起来像是返回一个数组,而不是函数。

我的第一个猜测是你希望最小化f而不是(Kinf, DK, k, t)?如果是这样,你将f作为函数传递,将元组(Kinf, DK, k, t)作为args传递,如下所示:

op.minimize(f, sumd, (Kinf,DK,k,t))