【问题标题】:implement an integration math equation using odeint in Python在 Python 中使用 odeint 实现积分数学方程
【发布时间】:2018-02-23 17:03:25
【问题描述】:

我正在尝试使用 scipy.odeint 函数在 python 中求解以下方程。

目前我能够实现这种形式的方程

在 python 中使用以下脚本:

def dY(y1, x):
    a = 0.001
    yin = 1
    C = 0.01
    N = 1
    dC = C/N
    b1 = 0
    return (a/dC)*(yin-y1)+b1*dC

x = np.linspace(0,20,1000)
y0 = 0
res = odeint(dY, y0, x)
plt.plot(t,res, '-')
plt.show()

我对第一个等式的问题是“i”。我不知道如何整合方程并且仍然能够提供当前和以前的 'y'(yi-1 和 yi) 值。 'i' 只是一个 0..100 范围内的序列号。

编辑 1:

原方程为:

我用 y,x,a,b 和 C 重写了它

编辑2: 我编辑了 Pierre de Buyl 的代码并更改了 N 值。幸运的是,我有一个验证表来验证结果。不幸的是,结果并不相同。

这是我的验证表:

这里是 numpy 输出:

使用代码:

def dY(y, x):
    a = 0.001
    yin = 1
    C = 0.01
    N = 3
    dC = C/N
    b1 = 0.01
    y_diff = -np.copy(y)
    y_diff[0] += yin
    y_diff[1:] += y[:-1]
    return (a/dC)*(y_diff)+b1*dC

x = np.linspace(0,20,11)
y0 = np.zeros(3)
res = odeint(dY, y0, x)
plt.plot(x,res, '-')

如您所见,这些值相差 0.02.. 的偏移量。

我是否遗漏了导致此偏移的某些内容?

【问题讨论】:

  • 该表示法可能意味着您正在使用欧拉前向积分来对 y 进行单个 ODE 或积分多个耦合 ODE。是哪一个?
  • @duffymo 他们正在使用欧拉前向积分来求解 y
  • @MD' 这个微分方程正确吗?能否请您提供一下从哪里获得的参考资料?
  • @SaulloCastro 我将原始方程式添加到原始帖子中。该方程式计算的是管式反应器中反应物的浓度。

标签: python numpy math scipy integration


【解决方案1】:

该方程是一个“耦合”常微分方程(请参阅Wikipedia 上的“ODE 系统”。

该变量是一个包含y[0]y[1] 等的向量。要求解 ODE,您必须输入一个向量作为初始条件,并且函数 dY 也必须返回一个向量。

我已经修改了你的代码来实现这个结果:

def dY(y, x):
    a = 0.001
    yin = 1
    C = 0.01
    N = 1
    dC = C/N
    b1 = 0
    y_diff = -np.copy(y)
    y_diff[0] += yin
    y_diff[1:] += y[:-1]
    return (a/dC)*y_diff+b1*dC

我已将y[i-1] - y[i] 部分编写为 NumPy 向量运算,并将坐标 y[0] 特例化(即您的符号中的 y1,但在 Python 中数组从 0 开始)。

解决方案,对所有 yi 使用初始值为 0 是

x = np.linspace(0,20,1000)
y0 = np.zeros(4)
res = odeint(dY, y0, x)
plt.plot(x,res, '-')

【讨论】:

  • 感谢您的实施。但是,我在执行代码时对 y0 和 N 稍作修改,以使输出与我的验证表的结果相匹配。请参阅 Edit2,我在其中详细说明了我所拥有的。
猜你喜欢
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
  • 2012-07-18
  • 1970-01-01
  • 2016-01-19
  • 2012-10-24
相关资源
最近更新 更多