我正在做优化,但我得到了一个错误(TypeError: unsupported operand type(s) for /: 'float' and 'list'
)
我在excel中有几个已知参数(Jflu、Ci、Rd、O、a)。我首先使用Pandas从excel导入这些参数g
是一个未知常数,我想得到一个最优的g
,使objfun
最小化
我对Python还不熟悉。我的代码如下:
#import my data
import pandas as pd
curves=pd.read_excel('C:/Users/Hello World/Curves.xlsx')
j=curves.Jflu
c=curves.Ci
R=curves.Rd
O=curves.O
A=curves.A
# optimize data
from scipy.optimize import minimize
#objective function
def objfun(g):
return (-(j/g+4.0*c+8.0*O-4.0*R/g)-((j/g+4.0*c+8.0*O-4.0*R/g)**2.0-4.0*(-4.0/g)*(8.0*O*R+4.0*c*R+O*j-c*j))**0.5)/(2.0*(-4.0/g))-A
g0=[0.001]
print(objfun(g0))
#Bounds
bnds=((0,1.0),)
#Minimize the function
res=minimize(objfun,g0,method='SLSQP',bounds=bnds)
print (res)
g0
是包含单个整数的列表。将其传递给一个函数,该函数使用它(列表)进行除法。将g0定义为g0 = 0.001
应该可以解决这个问题看起来当你调用
objfun(g0)
时,你在传递一个列表g0
在声明为g0 = [0.001]
时被定义为一个列表。您可以:g0 = 0.001
return (-(j/g[0]+4.0*c+8.0*O-4.0*R/g[0])-((j/g[0]+4.0*c+8.0*O-4.0*R/g[0])**2.0-4.0*(-4.0/g[0])*(8.0*O*R+4.0*c*R+O*j-c*j))**0.5)/(2.0*(-4.0/g[0]))-A
g[0]
将变成g[i]
,假设您的for循环计数i
从0
到len(g)
,并且没有使用ranged for循环李>相关问题 更多 >
编程相关推荐