用于计算连续正弦方程的多个根的 ODE 事件检测

计算科学 寻根
2021-12-06 19:04:57

我找到了一篇论文[1],它提供了一种在给定封闭形式解决方案的情况下计算卫星上升和落下时间的方法。它是一个复杂的正弦函数,本文提供了一种使用牛顿拉普森方法计算单个周期内的单个上升集的方法。我想找到一种方法来计算给定时间间隔内的所有零。

这是等式:

E=αcos1[G+PZ¯aea[(PZ¯)2+(QZ¯)2(1e2)]12]

这是情节的初始间隔之一的图片 卫星绕地球运行的上升和下降时间图

我知道牛顿的方法在初步猜测良好的情况下会奏效。我的第一个想法是创建一个循环,当它找到一个零时前进到另一组,但我发现很难相信没有一种方法已经开发出来。

我在 MATLAB 中遇到过 ODE 事件检测,或者许多其他似乎适用于多项式但想看看是否有更好的方法的解决方案。

  1. 一颗关于扁行星的卫星的上升和落下时间 PR ESCOBAL AIAA Journal 1963 1:10, 2306-2310 DOI: 10.2514/3.2057
2个回答

假设评估函数不太昂贵,我建议使用 chebfun 工具箱(matlab),如下所示:https ://www.chebfun.org/docs/guide/guide03.html

它使用切比雪夫多项式构建函数的近似值,然后使用高效的根查找器找到多项式的根。它会一举找到所有的根源。像牛顿这样的方法不太理想,因为很难避免收敛到你已经找到的根。

我不知道一个通​​用的方法,但是围绕地球的卫星不能在大约 87 分钟内绕地球运行;在 100 公里的高度,该周期约为 5190 秒,但当然如此之低,它会很快燃烧!

这意味着无论您在地球上的哪个位置,这些峰值每天只能达到 16 次大于零(即高于地平线)的最大值。

因此,如果您在每 20 分钟左右间隔的时间点的均匀间隔网格上启动牛顿根查找器,它们将(可能)找到每个上升和下降时间。

当然会有很高的冗余率,但这可以很容易地向量化,然后排序,所以我认为它会没事的。