我正在优化,但我得到了一个错误的错误(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 pdcurves=pd.read_excel('C:/Users/Hello World/Curves.xlsx')j=curves.Jfluc=curves.CiR=curves.RdO=curves.OA=curves.A# optimize datafrom scipy.optimize import minimize#objective functiondef 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))-Ag0=[0.001]print(objfun(g0))#Boundsbnds=((0,1.0),)#Minimize the functionres=minimize(objfun,g0,method='SLSQP',bounds=bnds)print (res)
2 回答

FFIVE
TA贡献1797条经验 获得超6个赞
g0=[0.001] print(objfun(g0))
g0
是一个包含单个整数的列表。您将它传递给一个使用它(列表)进行除法的函数。将 g0 定义为g0 = 0.001
应该可以解决此问题。

繁星淼淼
TA贡献1775条经验 获得超11个赞
看起来当您调用时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]
您有一个i
从0
to计数的 for 循环len(g)
并且没有使用范围 for 循环。
添加回答
举报
0/150
提交
取消