在Python中使用odeint实现一个集成数学方程

问题描述:

我想在python中使用scipy.odeint函数解决以下方程。在Python中使用odeint实现一个集成数学方程

equation 1

目前我可以使用下面的脚本来实现这种形式的方程

equation 2

在蟒:

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() 

我与第一个方程问题'一世'。我不知道如何对方程进行积分,仍然能够提供当前和以前的'y'(yi-1和yi)值。 '我'只是一个在0..100范围内的序列号。

编辑1:

原始等式为: Original equation

哪我改写使用Y,X,A,B和C

EDIT2: 我编辑皮埃尔德Buyl”代码和改变了N值。幸运的是我有一个验证表来验证结果。不幸的是,结果并不相同。

这里是我的验证表:

Validation image

这里是numpy的输出:

numpy output

使用的代码:

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, '-') 

正如你所看到的值与a不同n的偏移量为0.02 ..

我是否错过了导致此偏移的原因?

+0

这符号可能意味着你使用的欧拉前向整合为一个单一的ODE为Y或整合多个耦合常微分方程。哪一个? – duffymo

+0

@duffymo他们正在使用欧拉正向积分求解y –

+0

@MD'这个微分方程是否正确?你能否从你从哪里得到一个参考? –

的方程是“耦合的”常微分方程(见“常微分方程的系统”上Wikipedia

变量是含有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 

我有WRI将y[i-1] - y[i]部分作为NumPy向量操作,并且特殊地使用坐标y[0](即符号中的y1,但Python中的数组从0开始)。

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

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

谢谢你的实施。但是,我通过对y0和N进行了一些修改来执行代码,以便输出与我的验证表的结果相匹配。请参阅Edit2,其中详细说明了我的内容。 –