关于如何在给定可变数量的数据点的情况下找到曲线方程的理论

Theory on how to find the equation of a curve given a variable number of data points

我最近开始做一个项目。我 运行 遇到的问题之一是将不断变化的加速度转换为速度。通过传感器提供不同时间点的加速度。如果你得到这些数据点的方程,某个时间(x)对该方程的导数就是速度。

我知道如何在计算机上执行此操作,但我如何才能得到方程式呢?我四处搜索,但我没有找到任何现有的程序可以在给定一组点的情况下形成一个方程。过去,我创建了一个神经网络算法来形成一个方程,但是它需要非常长的时间才能运行。

如果有人可以 link 给我一个程序或解释这样做的过程,那就太棒了。

抱歉,如果这是在错误的论坛。我会 post 学习数学,但需要编程背景才能了解计算机可以快速完成的可能性范围。

我同意数值积分可能是您想要的评论。如果你仍然想要一个函数来处理你的数据,让我进一步反对这样做。

找到恰好通过某些给定点的曲线通常不是一个好主意。在几乎任何应用数学环境中,您都必须接受输入中存在少量噪声,并且恰好通过这些点的曲线可能对噪声非常敏感。这会产生垃圾输出。找到一条恰好通过一组点的曲线要求 overfitting 得到一个记忆而不是理解数据的函数,并且不概括。

例如取点(0,0), (1,1), (2,4), (3,9), (4,16), (5,25), (6, 36).这些是 y=x^2 上的七个点,这很好。 x=-1 处的 x^2 的值为 1。现在如果将 (3,9) 替换为 (2.9,9.1) 会发生什么情况?有一个六阶多项式通过所有7个点,

4.66329x - 8.87063x^2 + 7.2281x^3 - 2.35108x^4 + 0.349747x^5 - 0.0194304x^6. 

x=-1 处的值为 -23.4823,与 1 相差甚远。虽然曲线在 0 和 2 之间看起来不错,但在其他示例中,您可以看到数据点之间的大幅振荡。

一旦你接受了你想要的是近似值,而不是精确通过点的曲线,你就有了所谓的 regression problem. There are many types of regression. Typically, you choose a set of functions and a way to measure how well a function approximates the data. If you use a simple set of functions like lines (linear regression), you just find the best fit. If you use a more complicated family of functions, you should use regularization 来惩罚过于复杂的函数,例如具有大系数的高次多项式,记忆数据。如果您使用简单的族或正则化,当您添加或保留几个数据点时,函数往往不会发生太大变化,这表明它是数据中有意义的趋势。

这开始是评论,但最终变得太大了。

只是为了确保您熟悉术语...

微分接受一个函数f(t)并产生一个新函数f'(t) 告诉你 f(t) 如何随时间变化(即 f'(t) 给出 f(t) 在时间 t)。这使您从位移到速度或从速度到加速度。

Integreation 采用函数 f(t) 并吐出一个新函数 F(t) 测量函数 f(t) 从时间开始到给定点 t 的面积。起初并不明显的是,整合实际上是分化的 反转 ,这一事实称为 The Fundamental Theorem of Calculus。因此,集成会将您从加速度转换为速度,或将速度转换为位移。

您无需了解微积分规则即可进行数值积分。对函数进行数值积分的最简单(也是最幼稚)的方法就是通过在时间点之间将其分成小片并对矩形面积求和来近似面积。这个近似和称为 Reimann 和.

如您所见,这往往会真正超过和低于函数的某些部分。更准确但仍然非常简单的方法是 梯形法则 ,它也用一系列切片来逼近函数,除了切片的顶部是函数值之间的直线而不是常量值。

Simpson 规则更复杂,但近似效果更好,它用时间点之间的抛物线近似函数。


(来源:tutorvista.com

您可以将这些方法中的每一种都视为获得更好的积分近似值,因为它们各自使用了更多有关函数的信息。第一种方法每个区域只使用一个数据点(一条恒定的扁平线),第二种方法每个区域使用两个数据点(一条直线),第三种方法每个区域使用三个数据点(一条抛物线)。

您可以阅读这些方法背后的数学原理 here or in the first page of this pdf

不幸的是,整合加速度计数据以获得速度是一个数值不稳定的问题。对于大多数应用程序,您的错误会很快发散而无法获得任何实用价值的结果。

回想一下:

所以:

无论您如何将函数拟合到加速度计数据,您基本上仍将对基础加速度函数进行分段插值:

每个积分的误差项将添加到哪里!

通常您会在 a few seconds 之后看到非常不准确的结果。