以下代码的目标是将函数“ddW”插入 odeint 以找到给定 X 的 W(稍后)。我正在使用打印功能来确保功能运行)。import matplotlib.pyplot as pltimport numpy as npfrom scipy.integrate import odeintimport pintu = pint.UnitRegistry()R = 8.31446261815324 * u.J/(u.mol*u.K)Rgas = R.to (u.atm*u.L/(u.mol*u.K))P0 = 10 * u.atmT = 400 * u.Kv0 = 2 * u.L/u.minα = 0.02 * u.kg**-1k = 1.4 * u.L**2/(u.mol*u.kg*u.min)FA0 = 0.5*P0*v0/(Rgas*T) #Assuming I.G.def ddW(param,w): #param: [X,P] X = param[0] P = u.Quantity(param[1]).magnitude * u.atm W = u.Quantity(w).magnitude * u.kg d = np.zeros(2) d[0] = k*FA0/(v0**2*P0) * P*W*(1-X) #dX/dW d[1] = -α/2 *P0**2 * (1-X)/P #dP/dW return dparam0 = [0,P0]Wrange = np.linspace(0,100) *u.kg#PBR = odeint(ddW,param0,Wrange)#plt.plot(Wrange,PBR)print(ddW(param0,0))Traceback (most recent call last): File "<ipython-input-1-83022bc3b5da>", line 1, in <module> runfile(REDACTED, wdir=REDACTED) File "C:\Users\Spencer\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile execfile(filename, namespace) File "C:\Users\Spencer\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile exec(compile(f.read(), filename, 'exec'), namespace) File "REDACTED", line 43, in <module> print(ddW(param0,0)) File "REDACTED", line 33, in ddW d[1] = -α/2 *P0**2 * (1-X)/P #dP/dWValueError: setting an array element with a sequence.在第 29 行定义 W 之前,我之前对现在的第 32 行(定义 d[0])有相同的错误消息。困扰我的是 d[1] 没有任何输入(据我所知) 的尺寸 > 1,所以它应该适合。
2 回答
波斯汪
TA贡献1811条经验 获得超4个赞
使用以下命令创建数组。您正在创建的数组是 float 类型,并且您在 d[0] 和 d[1] 中获得的值不是 float。
d = np.array(np.zeros(2), dtype=np.object)
料青山看我应如是
TA贡献1772条经验 获得超8个赞
假设您对第 32 行的修复(定义 d[0])是w用W您取 的大小的地方替换w,您需要对尝试放入 d[1] 的数量执行相同的操作。
=for line 32的右侧是无量纲Quantity对象,而=for line 33的右侧是具有维度的Quantity对象,standard_atmosphere / kilogram不能按原样放入数组d中,因为它只需要幅度,因此可以转换为 float 类型.
如果您想将数组保留d为 type ,请尝试此操作float:
val = -a/2 *P0**2 * (1-X)/P #dP/dW
d[1] = val.magnitude
添加回答
举报
0/150
提交
取消