一组数据怎样判断一组数据中波动比较大的点,找出他们的位置,如图中红色标记线所示
对曲线求导,导数就是变化率。找绝对值大的地方。
public static void CallWaveFacetor(List valueList, float waveValue, out List outList)
{
outList = new List();
//复制传来的参数信息 防止操作中修改原信息
List tempLilst = new List();
tempLilst.AddRange(valueList.ToArray());
while (true)
{
double sumDbe = 0;
ValueInfo maxInfo = tempLilst[0];
ValueInfo minInfo = tempLilst[0];
foreach (var item in tempLilst)
{
sumDbe += item.OccurValue;
if (item.OccurValue > maxInfo.OccurValue)
{
maxInfo = item;
}
if (item.OccurValue < minInfo.OccurValue)
{
minInfo = item;
}
}
double ave = sumDbe / tempLilst.Count;
if ((maxInfo.OccurValue - minInfo.OccurValue) / ave > waveValue && minInfo.OccurValue != maxInfo.OccurValue)
{
outList.Add(maxInfo);
outList.Add(minInfo);
tempLilst.Remove(maxInfo);
tempLilst.Remove(minInfo);
}
else
{
break;
}
}
}
public class ValueInfo
{
public DateTime OccurTime { get; set; }
public double OccurValue { get; set; }
}