Python SciPy:使用SciPy.optimize.minimize时出现类型错误
在尝试使用scipy.optimize.minimize最小化函数时,我遇到了一个模糊的错误。我得到的错误是Python SciPy:使用SciPy.optimize.minimize时出现类型错误,python,numpy,scipy,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()
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
上面的代码非常难看,因为我对其进行了一些修改,以尝试找到错误;我道歉。我发现minimize函数在哈密顿量中的return语句上抛出错误消息之前,会运行一些哈密顿量的试验值。我在其他类似的函数上使用过最小化函数,但没有出现这种错误,老实说,我很困惑。任何帮助都将不胜感激。请始终在问题中显示完整的回溯信息。对此,我已将其输入。
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