我正在执行优化,但是出现了错误错误(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)
答案 0 :(得分:2)
g0=[0.001]
print(objfun(g0))
g0
是一个包含单个整数的列表。您将此传递给使用它(列表)进行除法的函数。将g0定义为g0 = 0.001
应该可以解决此问题。
答案 1 :(得分:0)
就像调用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
{1}},并且未使用有范围的for循环。