确定线斜率变化的位置(算法)

时间:2010-06-24 17:58:58

标签: math

如果你绘制下面的数字,你会得到一个“波动性微笑”: 数字遵循一个线性斜率(左斜率),然后更改为 跟随另一个线性斜率(右斜率)。

我有几组这样的数据,想知道斜率在哪里 变化。注意:

  • 斜率变化通常发生在点之间

  • 我不知道左边有多少分,有多少分 正确的坡度。

  • 对于斜坡或斜坡的符号/幅度,没有任何保证 斜坡之间的关系。每个斜率可能是负的或 积极的,要么可能比另一个要大。

  • 如果斜坡相同,程序应将此报告为a 特殊情况。

0.1613 
0.1596 
0.1579 
0.1561 
0.1544 
0.1528 
0.1511 
0.1495 
0.1478 
0.1462 
0.1446 
0.1431 
0.1415 
0.1416 
0.1418 
0.1419 
0.1421 
0.1422 
0.1424 
0.1425 
0.1426 
0.1428 
0.1429 
0.1431 

5 个答案:

答案 0 :(得分:5)

Slope(X) = f(x) - f(x-1)
Slope2(x) = Slope(x) - Slope(x-1)
你需要第二个。它显示了斜坡本身的变化速度。 (物理方面的加速度) 我在excel中绘制了两个图并检查了我的内容:

alt text http://img691.imageshack.us/img691/6716/slopes.png

你看到斜坡2的高峰?这是指标,很容易找到。

答案 1 :(得分:4)

创建一个新的数字列表,它是该列表中连续对的差异。这些差异是从一个点到另一个点的“斜率”。对于恒定斜率,这些数字都是相同的。这将问题从检测斜率变化变为检测水平变化。

答案 2 :(得分:1)

衍生品再次袭来。如果您或其他任何人没有意识到这一点。

关于微积分的基本文本应该可以帮助您分析函数。

导数产生函数切线的斜率。

积分产生一条线下的区域。

如前一个答案所暗示的,如果f(x)是“位置”,f [f'(x)]的导数是速度,那[f''(x)]的导数就是加速度

您也可以从表示f''(x)的数据向后工作,并计算相对于时间的速度和位置。

答案 3 :(得分:0)

您应该定义相同的斜率意味着什么,因为数据是/被舍入/截断。差异程度太大了吗?

如果只有一个实际的斜率变化,则可能在点之间发生,那么有三种情况:

  1. 斜率连续两次显着变化。例如,如果数据是6,5,4,3,3,4,5,6,7,则斜率变为-1,-1,-1,0,1,1,1,1。这意味着实际斜率变化是在中间斜率的点之间,在示例中为零,或者在3之间。要获得斜率真正改变的位置,您需要得到最后两个点(示例中为4)定义的直线与下两个点(示例中为3,4)定义的直线相交的点。 )。该示例给出了解决方案[4.5,2.5]。

  2. 斜率仅显着改变一次。例如,如果数据是7,6,5,4,3,4,5,6,7,则斜率变为-1,-1,-1,-1,1,1,1,1。这意味着实际的斜率变化是在两个斜率的点coomon中(示例中为3)。

  3. 坡度没有明显变化。这是你提到的特例。

答案 4 :(得分:0)

问题分为两部分:

  1. 将数据点分为两组;那些位于左边的那些,以及那些位于右边的那些。
  2. 在两组中分别设置一条线。
  3. 第二个问题很简单,并且有一个标准的解决方案:使用线性最小二乘法拟合一条线。

    如何解决第一个问题取决于您的应用程序的细节。这是一个非常简单的算法,如果数据点的数量n不是太大就能很好地工作:只需要在第一个i点和最后一个ni点上进行线性最小二乘,对于i从2到n-2,保留残差平方和最少的那个。

    如果n非常大,并且上述方法效率低下,则必须按照其他已发布的答案的建议来查看离散的二阶导数。请注意,与最小二乘法拟合不同,衍生物的近似值对即使很小的噪声也非常敏感。

    一旦你有两条拟合线,就可以使用一些启发式(即,斜率相差小于一些公差)来确定你是否有单行特殊情况。