繁体   English   中英

如何数值求解延迟微分方程

[英]How to solve a delay differential equation numerically

我想用数字计算Buchstab function 它由延迟微分方程定义:

在此处输入图像描述

我怎样才能有效地计算这个数值?

为了大致了解 DDE 集成的工作原理,我将提供一些基于低阶 Heun 方法的代码(以避免无趣的细节,同时仍然有点用处)。

在数值积分中,先前的值被视为 function 的时间,就像任何其他时间相关项一样。 由于没有真正的函数表达式,目前的解决方案将用作 function 表进行插值。 插值误差阶数应与 ODE 积分器的误差阶数一样高,这对于低阶方法很容易安排,但对于高阶方法则需要额外的努力。 solve_ivp步进器类每步提供这样一个“密集输出”插值,可以针对当前存在的积分区间组装成 function。


所以在理论之后实践。 Select 步长h=0.05 ,将给定的历史记录 function 转换为解决方案的开始 function 表

u=1
u_arr = []
w_arr = []
while u<2+0.5*h:
    u_arr.append(u)
    w_arr.append(1/u)
    u += h

然后求解方程,对于延迟值使用 function 表中的插值,这里使用numpy.interp `scipy.interpolate 中还有其他具有更多选项的函数。

请注意, h需要小于最小延迟,以便延迟值来自上一步。 这里就是这种情况。

u = u_arr[-1]
w = w_arr[-1]
while u < 4:
    k1 = (-w + np.interp(u-1,u_arr,w_arr))/u
    us, ws = u+h, w+h*k1
    k2 = (-ws + np.interp(us-1,u_arr,w_arr))/us
    u,w = us, w+0.5*h*(k1+k2)
    u_arr.append(us)
    w_arr.append(ws)

现在可以进一步处理数值近似,例如绘制。

plt.plot(u_arr,w_arr); plt.grid(); plt.show()

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM