【发布时间】:2014-08-04 11:43:56
【问题描述】:
我正在尝试编写一个程序来平滑离散数字化数据以用于运动模拟器。数据将作为一组 t, x(t) 点提供,旨在用于创建循环运动;因此,平滑后的数据不仅必须在 t 值范围内连续,而且必须在两个端点之间连续。此外,所提供的数据很可能比所需的分辨率低很多,因此会进行大量插值。
我研究了各种技术,例如 Gauss-Newton 和 Levenberg-Marquardt 曲线拟合,但这些都假设目标函数是事先已知的(而且它不会是)。不幸的是,所述运动模拟器的用户可能无法选择合适的功能(由于他们不同的背景)。最后,代码必须可以在非专有的、跨平台(最好是编译的)语言上使用,该语言可以在嵌入式平台(很可能是 ARM 上的 Linux)上运行——这排除了 Maple 的使用(它提供了一个通用的“适合”选择适当的目标函数的例程)、Matlab(类似 IIRC)或其他与数学相关的语言。我应该说由于经验,我倾向于使用 C++。
一些典型数据可以在页面here找到。
什么技术对此有用?
【问题讨论】:
-
我不知道你的数据到底是什么样子,但具有适当度数的多项式拟合可能足够通用
-
我记得一些表面上相似的东西——将连续循环函数拟合到一组点(转换为极坐标),在图像中定义一个模糊的圆形区域——我在其中破解了 Matlab 的
polyfit和 @ 987654323@ 函数使用 sin+cos 的组合而不是多项式作为基函数,在这种情况下效果很好。不确定这对您的数据有多合适,但可能值得考虑 - 我相信几乎所有语言都有适合代码的最小二乘法。
标签: c++ embedded arm interpolation curve-fitting