SciPy:使用scipy.optimize.minimize时的TypeError

时间:2015-01-27 10:09:38

标签: python numpy scipy

尝试使用scipy.optimize.minimize尝试最小化函数时遇到模糊错误。我得到的错误是,

Traceback (most recent call last):
 File "general_fd.py", line 103, in <module>:
  a_tmp[index] = minimize(iF.hamiltonian,0,(x,u_last,m_tmp,dt,dx,k*dt,index),tol=1e-3)
   TypeError: float() argument must be a string or number

,其中

def hamiltonian(alphas,x_array,u_array,m_array,dt,dx,time,index):
    sigma2 = Sigma_local(time,x_array[index],alphas,m_array[index])**2
    movement = f_global(time,x_array[index],alphas)
    L_var = L_global(time,x_array[index],alphas,m_array[index])
    dx2 = dx**2
    if index==0:
        sigma2R = Sigma_local(time,x_array[index+1],alphas,m_array[index])**2
        tmp = u_array[0]*(abs(movement)/dx - sigma2/dx2) + u_array[1]*(sigma2R/dx2 - abs(movement)/dx) + L_var
    elif index==x_array.size-1:
        sigma2L = Sigma_local(time,x_array[index-1],alphas,m_array[index])**2
        tmp = u_array[-1]*(abs(movement)/dx - sigma2/dx2) + u_array[-2]*(sigma2L/dx2 - abs(movement)/dx) + L_var
    else:
        sigma2L = Sigma_local(time,x_array[index-1],alphas,m_array[index])**2
        sigma2R = Sigma_local(time,x_array[index+1],alphas,m_array[index])**2
        tmp = u_array[index]*(abs(movement)/dx - sigma2/dx2) + u_array[index+1]*(sigma2R/(2*dx2) + min(movement,0)/dx) + u_array[index-1]*(sigma2L/(2*dx2) - max(movement,0)/dx) + L_var
    return tmp[0]

def Sigma_local(time,x,a,m):
    return 0*x
def f_global(time,x_array,a_array):
    return 0.1*a_array*x_array
def L_global(time,x_array,a_array,m_array): #general cost
    return a_array + np.sqrt(x_array) + a_array**2

上面的代码非常丑陋,因为我已经对它进行了一些修改以便尝试找到错误;我很抱歉。我发现在将错误消息抛出到 hamiltonian 的return语句之前,最小化函数会运行一些 hamiltonian 的试验值。我已经在其他类似功能上使用了最小化功能而没有发生这种错误,而且老实说我很难过。任何帮助将不胜感激。

0 个答案:

没有答案