我正在面对C语言中实时计算布洛克值的问题。如何有效地评估或近似一条路段的线形?
首先,我尝试使用Matlab编码器为Fresnel公式的quadgk积分器获取自动生成的C代码。这在我的测试scnearios中基本上很有用。唯一的问题是它运行速度非常慢(在Matlab以及自动生成的代码中)。
另一种选择是插入通过直线(线性插值)连接采样点的单位回旋曲的数据表。当我发现只有曲率小的变化(沿着回旋线很小的台阶)后,我放弃了,结果明显降低了线条。真是令人惊喜......
我知道可以使用不同的公式绘制圆圈,但在实际情况下经常会遇到曲率变化较小的情况,并且标题0°和360°之间的30k采样点不会出现,为我的问题提供足够的角度分辨率。
然后我在R = inf点周围试了一个泰勒近似值,希望在任何地方都会有明显的曲率。我很快意识到我不能使用超过4项(幂的15),因为多项式很快会变得不稳定(可能是由于双精度fp计算中的数值不准确)。因此,对于较大的t值,显然准确度会迅速降低。通过“大t值”,我正在谈论回旋曲线上的每一点,它代表了超过90°w.r.的曲线。零曲率点。
例如,当评估从R = 150米到R = 125米的道路,同时做出90°转弯时,我正在有效近似区域外。相反,我处于204.5° - 294.5°的范围内,而我的泰勒极限将在大约90°的单位回旋曲线上。
我现在有点随意地尝试了一些东西。我的意思是我可以试着把时间花在有关这个话题的几十篇论文上。或者我可以尝试改进或组合上述的一些方法。也许甚至在Matlab中存在一个兼容编码器的集成功能,并且速度足够快。
这个问题对我来说很重要,我不应该有那么多麻烦解决它。任何暗示?
好的我编辑了我的例子并添加了你的数字。它们是正确的。我们再看看系数的计算(目前它们是离线预先计算的)。所以你认为即使对于大型的Thetas,在s = 0左右也可以达到足够好的效果? 注意:目前,我的积分是由数字t = k * s参数化的,其中k取决于清晰度。角度只是让我的例子更容易。 – rava
好吧,这就是我的意思。在0 | 0处,单位回旋曲线具有零航向和零曲率(即,R = inf)。你是否建议我应该为泰勒评估选择一个不同的参考点?这会使精度变得非常容易 - 而且这会使数学变得非常困难,因为我必须知道当时菲涅耳积分的确切解答,对吧? – rava
好吧我能够在Matlab中获得精确的泰勒近似。你是对的。很容易做到50个术语。但是对系数进行迭代逼近并没有帮助。要么检查5次的公式中存在错误,要么结果更差。无论如何,使用系数表工作对我来说效果不错。不,我们试着把它放到C中。 – rava