【发布时间】: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