在Python中使用odeint实现积分数学方程

2024-09-30 20:37:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在python中使用西皮·奥德林功能。在

equation 1

目前,我能够实现这种形式的等式

equation 2

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

我对第一个等式的问题是“我”。我不知道如何积分方程,仍然能够提供当前和以前的‘y’(yi-1和yi)值我只是一个在0到100范围内的序列号。在

编辑1:

原始方程为: Original equation

我用y,x,a,b和C重写的

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

这是我的验证表:

Validation image

下面是numpy的输出:

numpy output

使用代码:

^{pr2}$

如您所见,值的偏移量为0.02。。在

我是不是漏了点东西导致了这个偏移?在


Tags: 代码功能编辑respltdcb1方程
1条回答
网友
1楼 · 发布于 2024-09-30 20:37:28

这个方程是一个“耦合”的常微分方程(见Wikipedia上的“ODEs系统”)。在

变量是一个包含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的解决方案是

^{pr2}$

相关问题 更多 >