如何解决条件达到后,Runge Kutta终止
Matlab ODE解算器中显示的弹跳球示例提供了一种在偶数触发(https://www.mathworks.com/help/matlab/math/ode-event-location.html)时终止积分的方法。在此示例中,它在高度为0时终止。您还可以在斜率从正变为负(球飞行的顶点)或从负变为正(当球撞击地板时)终止。
是否可以在Math.Net RungeKutta.FourthOrder()中实现这种触发?
此外,除了测试和类参考之外,还有更好的文档吗?那里的信息非常薄https://numerics.mathdotnet.com/api/MathNet.Numerics.OdeSolvers/RungeKutta.htm#FourthOrder。
感谢您的帮助!
解决方法
主要思想是检查每个集成步骤,当前段中是否有根。为了便于使用该解的插值多项式,所谓的dense output
。将其插入到事件函数中,然后对该复合函数使用普通的寻根过程,通常从对间隔进行采样以查找符号变化开始,然后通过带有括号间隔的某种方法完善根。
对于RK4,存在一个根据级的值构造的三次插值多项式。这样可以得到中等质量的结果,不仅要好于割线,而且还不能达到阶跃误差的全部4或5阶。
使用步进计算中的dy=(k1+2*k2+2*k3+k4)/6
和k1,k2,k3,k4
,
在y
和t
之间的t0
处的插值t1=t0+h
为
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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。