错误 int' 对象不可下标' 在欧拉方法函数中



我正在尝试应用欧拉方法来求解以下微分方程:

dA/dt=-k/2*Ca*Cc;

dB/dt=-k*Ca*Cc;

dD/dt=k*Ca*Cc

我想得到[[t0,t2,…],[[A0,B0,D0],[A1,B1,D1],…]]其中A0、B0和C0是在时间t0(与A1、B1、D1相同,但与t1…相同(的每个产物的浓度

但我总是遇到这样的错误:

Traceback (most recent call last):
File "<ipython-input-58-7025b89a5cfb>", line 1, in <module>
runfile('C:/Users/catas/OneDrive/Desktop/ER_trab/simulator2_letshopethisworks.py', wdir='C:/Users/catas/OneDrive/Desktop/ER_trab')
File "C:UserscatasAnaconda3libsite-packagesspyder_kernelscustomizespydercustomize.py", line 827, in runfile
execfile(filename, namespace)
File "C:UserscatasAnaconda3libsite-packagesspyder_kernelscustomizespydercustomize.py", line 110, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/catas/OneDrive/Desktop/ER_trab/simulator2_letshopethisworks.py", line 70, in <module>
print(euler(react,0,C0,60,60))
File "C:/Users/catas/OneDrive/Desktop/ER_trab/simulator2_letshopethisworks.py", line 60, in euler
C0[0] += h * f(t0, C0[0]) #calculos das aproximacoes y
File "C:/Users/catas/OneDrive/Desktop/ER_trab/simulator2_letshopethisworks.py", line 44, in react
dAdt=-k/2*C0[1:][0]*C0[1:][2] #velocidade de consumo de A
IndexError: list index out of range

这是我的代码:

from math import e
initCa=9
initCb=9
initCc=3
initCd=0

C0=[initCa,initCb,initCd]


def react(t,C): #are t and T optional???
k=k0*e**(-Ea/(R*T))

dAdt=-k/2*C0[1:][0]*C0[1:][2] #velocidade de consumo de A
dBdt=-k*C0[1:][0]*C0[1:][2]#velocidade de consumo de B
dDdt=k*C0[1:][0]*C0[1:][2] #velocidade de formacao de D
return [dAdt,dBdt,dDdt]

def euler(f,t, C, tn, n):
t0=0
listat=[t0] #lista t inicial
listay=[C0] #lista y inicial
h = (tn - t0) / float(n) #step

for i in range(n): 
C0[0] += h * f(t0, C0[0]) #y
C0[1] += h * f(t0, C0[1])
C0[2] += h * f(t0, C0[2])
t0 += h #calculo dos tempos
listat.append(format(t0,".14E")) #times list
listay[i].append(C0) #aproximations list

return [format(h,".14E"),C0,[listat,listay]] 
print(euler(react,0,C0,60,60))

我不明白怎么解决这个问题?

谢谢!

此处:

C0[0] += h * f(t0, C0[0]) 

获取C0的单个元素,并将其传递给步骤函数(react(。显然,这些项目是整数。

然而,在该功能范围内:

Ca=C[0]

您显然希望接收整个C0列表,以便从中提取Ca等。C是作为整数传递的,因此C[0]失败,如错误消息所述。

您需要更清楚地思考您的程序逻辑,以及流程的哪些步骤将在哪里发生。

最新更新