3

好的,伙计们,是时候发挥创意了。我有一个整数列表,并希望将整数保留在下面的 5 个绿色框中。我想找到 5 个最小值,然后从每个最小值左右移动,直到下一个整数距离太远。然而,这可能很难做到,因为最后一个盒子有一些我想维护的分散值。

所以悬崖笔记,有我想从中制作5个整数列表的整数列表,5个列表中的每一个都包含一个绿色框的值。

如果这个问题看起来很愚蠢,我很抱歉,我只是想看看其他人是否有比我上面提到的更好的方法来解决这个问题。

整数列表

编辑:也许 Levenberg-Marquardt 算法会有所帮助?如果我能看懂数学书就好了 xD。我发誓数学解释从来都不是用英语写的,但如果有人只是向我展示了它的用途和方法,我就会明白并理解它。然后我可以再次从书中阅读它,然后再次感到困惑!

4

2 回答 2

1

这可能是一个可能的解决方案:

让我们调用您的整数 P[n] 列表。

  • 定义一个新的点列表,我们称之为 MAX[n],计算方式如下:

如果 ((MAX[n] < P[n]) || (n == 0)) MAX[n] = P[n]; 否则 MAX[n] = MAX[n-1];

这样,MAX[n] 列表将成为图表上方的绿线:最大[n]

第一个解决方案:要识别绿色框内的点,您只需计算 P 列表的增量比率,并检查其绝对值何时小于阈值:

I = [P[n+1] - P[n]] / [T[n+1] - T[n]]

因此,如果 I 低于阈值且 P 低于 MAX,则一个点位于绿色框中:

if ((P[n] < MAX[n]) && (ABS(I) < DER_THRESHOLD)) // 你的点在绿框内

从你的图表中,粗略地说,你可以把 DER_THRESHOLD = 5。

第二个解决方案:计算一个新的整数列表,这次称为 AVG[n],如下所示:

AVG[n] = (MAX[n] + P[n]) / 2

这将以红线结束(对于丑陋的图表,抱歉,是手工完成的):

平均[n]

现在您可以识别绿色框,只需检查您的 P[n] 是否低于 AVG[n]。

在 AVG 计算中使用某种低过滤可能会更好。

于 2013-08-01T08:18:10.220 回答
1

尝试通过这些点找到最小二乘拟合线,然后查看这些点是在线上方还是下方。这会将您的点分成在线下方的五个绿色框和在线上方的六个红外框。它还将包括框之间的点,但由于在应排除的点之前或之后的大跳跃,这些点很容易排除。但看起来你可能在这个数据集的右上角有问题。

于 2013-08-01T00:21:35.157 回答