在循环内或python中的列表内使用odeint

问题描述

我正在为此化学任务编写一些代码,但是我在列表和使代码更高效方面遇到麻烦。

所以基本上,我想创建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 (将#修改为@)