C# 达到条件时,龙格库塔终止

C# 达到条件时,龙格库塔终止,c#,ode,runge-kutta,C#,Ode,Runge Kutta,Matlab ODE解算器中显示的弹跳球示例有一种在偶数触发()时终止积分的方法。在本例中,它在高度为0时终止。当坡度从正变为负(球飞行顶点)或从负变为正(球落地时),也可以终止 在Math.Net RungeKutta.FourthOrder()中有没有实现这种触发的方法 此外,除了测试和类参考,还有更好的文档吗?那里的信息非常少 感谢您的帮助 主要思想是检查每个集成步骤是否在当前段中有根。为了便于使用解的插值多项式,所谓的密集输出。这被插入到事件函数中,然后对这个复合函数使用一个普通的根查找

Matlab ODE解算器中显示的弹跳球示例有一种在偶数触发()时终止积分的方法。在本例中,它在高度为0时终止。当坡度从正变为负(球飞行顶点)或从负变为正(球落地时),也可以终止

在Math.Net RungeKutta.FourthOrder()中有没有实现这种触发的方法

此外,除了测试和类参考,还有更好的文档吗?那里的信息非常少


感谢您的帮助

主要思想是检查每个集成步骤是否在当前段中有根。为了便于使用解的插值多项式,所谓的
密集输出
。这被插入到事件函数中,然后对这个复合函数使用一个普通的根查找过程,通常从对间隔进行采样以查找符号变化开始,然后通过使用括号间隔的某种方法细化根

对于RK4,存在一个由阶段值构造的三次插值多项式。这给出了中等质量的结果,比正割更好,但不是完整的第四或第五阶阶阶跃误差

使用步骤计算中的
dy=(k1+2*k2+2*k3+k4)/6
k1、k2、k3、k4
, 在
t0
t1=t0+h
之间的
t
处的插值
y

s = (t-t0)/h
y = y0+s*(3*(1-s)**2+s**2)*dy + s*(1-s)/2*(k1-2*(1-2*s)*(k2+k3)-k4)