我得到了一个折线图,其中 Y 轴为值,X 轴为时间。 X 轴有 5 分钟分辨率。我正在寻找某种算法来帮助我教 iPhone 了解线路的去向。我从来没有上过算法课,所以任何帮助将不胜感激。我需要知道的是这条线是否已经连续上升了一定数量的线段。
现在我正在实现以下内容: 如果当前数据点的 Y 值大于前一个,则将斜率计数器加一。如果相等,则将斜率计数器递增 0。如果值较小,则将斜率计数器递减。
if(current>previous)
{
counter++;
}
else if(current<previous)
{
counter--;
}
这会生成锯齿状的图形,更易于分析。但是由于窗口大小的问题,图形可能会“弹跳”。这是我预计我的逻辑会出现问题的地方。
我希望有某种 CS 算法可以帮助我完成这项任务,因为我什至不知道要为这个问题在 google 中输入什么样的关键字。
最佳答案
如果您只需要知道线条是否连续上升一定数量的线段,为什么不使用一个计数器递增直到达到一定数量的线段,或者在线下降时重置,例如:
int counter = 0;
for (int i = 1; i < datasize; i++) {
if (data[i] > data[i - 1]) {
++counter;
if (counter == THRESHOLD) {
println("trending up at %d.", i);
}
} else if (data[i] < data[i - 1]) {
counter = 0;
}
}
如果您只是想看看这条线总体上是呈上升趋势还是下降趋势,您可以这样做吗:
if (data[datasize - 1] > data[0]) {
println("Overall trend is up.");
} else if (data[datasize - 1] < data[0]) {
println("Overall trend is down.");
} else {
print("Overall trend is flat.");
}
如果您想要更好的预测——比如,这是到这个时间点的排队情况,这是对 future 情况的猜测,有两种探索途径。第一个是“回归分析”或“回归线”。这最适合随着时间的推移通常会增加或减少的数据,并且会让您了解这些增加或减少的速率(直线的平均斜率)。
第二个是“快速傅立叶变换”——这对于像波浪一样的线很有用,因为它们停留在最小和最大界限之间并且有一些规则循环(或许多规则循环,这就是等式会占卜)。
玩得开心。这是一个令人愉快的问题。
关于iphone - 以编程方式分析折线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8022887/