问题描述
我正在为此化学任务编写一些代码,但是我在列表和使代码更高效方面遇到麻烦。
所以基本上,我想创建3个列表(时间函数(arrayt)的浓度(C);时间函数(arrayt)的xA,时间函数(arrayt)的xB)。
问题是,我的代码编写方式:
- 我创建了一个C列表,仅提供浓度(不提供相应的时间);但我希望时间在同一清单上!
- 创建C列表,然后读取第一个“ for”的更改,然后再次读取以创建列表xA和xB。我认为效率低下(并且不知道如何解决),理想情况下,它只能读取一次; 我在这里尝试的操作是将其放在第一个“ for”中,但没有用。
- 列表xA和xB仅提供转换(x)值,而不提供相应的时间;
所以我希望C列表的输出像[[odeint],time]:
#my example
C=[[[9.,9.,0.,],0],[[ 8.98733601,8.97467201,0.02532799],0.10016694],(...) ]
对于xA,例如[x,time]:
xA=[[0,[0.00140711,(...)]
我无法为所尝试的内容提供错误信息,因为除了执行方法之外,我对如何执行此操作实际上一无所知:/
谢谢,对不起我的英语!
代码如下:
import numpy as np
from scipy.integrate import odeint
from math import e
global T,initCa,initCb,t,initCc
T=298.15
t0=0
t=60
initCa=9
initCb=9
initCc=3
initCd=0
C0=[initCa,initCd]
def react(C,t):
k=200334.9823*e**(-41837.03145/(8.314*T))
Ca=C[0]
Cb=C[1] #necessario??
Cc=initCc
Cd=C[2]
dAdt=-k/2*Ca*Cc #veLocidade de consumo de A
dBdt=-k*Ca*Cc #veLocidade de consumo de B
dDdt=k*Ca*Cc #veLocidade de formacao de D
return [dAdt,dBdt,dDdt]
#the part that Im confused about
arrayt=np.linspace(t0,(t-t0)*10)
C=odeint(react,C0,arrayt)
xA=[]
xB=[]
for i in range((t-t0)*10):
if C[i,1]<=0:
(C[i:,0])=C[i,0]
(C[i:,1])=0
(C[i:,2])=C[i,2]
break
for i in range((t-t0)*10):
xA.append(1-C[i][0]/initCa)
xB.append(1-C[i][1]/initCb)
print(C)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)