为了账号安全,请及时绑定邮箱和手机立即绑定

如何确定 `TypeError: unsupported operand type(s)

如何确定 `TypeError: unsupported operand type(s)

蝴蝶刀刀 2022-06-22 18:18:53
我正在优化,但我得到了一个错误的错误(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应该可以解决此问题。


查看完整回答
反对 回复 2022-06-22
?
繁星淼淼

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]您有一个i0to计数的 for 循环len(g)并且没有使用范围 for 循环。


查看完整回答
反对 回复 2022-06-22
  • 2 回答
  • 0 关注
  • 269 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号