你似乎只是寻找斜率反转(从正到负,反之亦然).粗略的java算法可以(未测试):
List points = ... //all the points in your curve
List extremes = new ArrayList ();
double previous = null;
double previousSlope = 0;
for (Point p : points) {
if (previous == null) { previous = p; continue; }
double slope = p.getValue() - previous.getValue();
if (slope * previousSlope < 0) { //look for sign changes
extremes.add(previous);
}
previousSlope = slope;
previous = p;
}
最后,测量相似度的一个好方法是相关性.在你的情况下,我会看看%move相关性(换句话说,你希望你的2系列同时上升或下降) – 这通常是在你计算2个资产回报之间的关联的财务中做的:
>为2系列的每个点创建2个新的系列,%移动
>计算这两个系列之间的相关性
Series 1 Series 2
100 50
98 49
100 52
102 54
“回报”系列将是:
Series 1 Series 2
-2.00% -2.00%
+2.04% +6.12%
+2.00% +3.85%
并且您计算那些2个返回系列(在本例中为0.96)的相关性,以获得两条曲线看起来相同程度的度量.您可能需要将结果调整为方差(即,如果一个形状的范围比另一个更宽).