在Python中使用odeint实现一个集成数学方程
我想在python中使用scipy.odeint函数解决以下方程。在Python中使用odeint实现一个集成数学方程
目前我可以使用下面的脚本来实现这种形式的方程
在蟒:
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:
哪我改写使用Y,X,A,B和C
EDIT2: 我编辑皮埃尔德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, '-')
正如你所看到的值与a不同n的偏移量为0.02 ..
我是否错过了导致此偏移的原因?
的方程是“耦合的”常微分方程(见“常微分方程的系统”上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, '-')
谢谢你的实施。但是,我通过对y0和N进行了一些修改来执行代码,以便输出与我的验证表的结果相匹配。请参阅Edit2,其中详细说明了我的内容。 –
这符号可能意味着你使用的欧拉前向整合为一个单一的ODE为Y或整合多个耦合常微分方程。哪一个? – duffymo
@duffymo他们正在使用欧拉正向积分求解y –
@MD'这个微分方程是否正确?你能否从你从哪里得到一个参考? –