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

我正在优化,但我得到了一个错误的错误(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)


蝴蝶刀刀
浏览 270回答 2
2回答

FFIVE

g0=[0.001] print(objfun(g0))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]您有一个i从0to计数的 for 循环len(g)并且没有使用范围 for 循环。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python