用python中的ODEINT求解微分方程

问题描述 投票:1回答:1

我有一个耦合的微分方程组,我已经在Excel中用Euler求解了。现在,我想使用python中的ODE解析器使其更加精确。但是,我的代码中肯定有一个错误,因为曲线看上去与Excel中的不同。我不希望曲线最终达到1和0。

import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt

# define reactor
def reactor(x,z):
    n_a = x[0]
    n_b = x[1]
    n_c = x[2]

    dn_adz = A * (-1) * B * (n_a/(n_a + n_b + n_c)) / (1 + C * (n_c/(n_a + n_b + n_c)))
    dn_bdz = A * (1) * B * (n_a/(n_a + n_b + n_c)) / (1 + C * (n_c/(n_a + n_b + n_c)))
    dn_cdz = A * (1) * B * (n_a/(n_a + n_b + n_c)) / (1 + C * (n_c/(n_a + n_b + n_c)))
    dxdz = [dn_adz,dn_bdz,dn_cdz]
    return dxdz

# initial conditions
n_a0 = 0.5775
n_b0 = 0.0
n_c0 = 0.0
x0 = [n_a0, n_b0, n_c0]

# parameters
A = 0.12
B = 3.1e-9
C = 4.02e15

# number of steps
n = 100

# z step interval (m)
z = np.linspace(0,0.0274,n)

# solve ODEs
x = odeint(reactor,x0,z)


# Plot the results
plt.plot(z,x[:,0],'b-')
plt.plot(z,x[:,1],'r--')
plt.plot(z,x[:,2],'k:')
plt.show()

初始条件是否存在问题,它保持恒定并且一步一步没有变化?就像在带有Euler的Excel中一样,下一步使用珍贵步骤的条件/值吗?

python numpy ode
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.