using System.Collections.Generic;
public static class ExpSmoothingTask
public static IEnumerable<DataPoint> SmoothExponentialy(this IEnumerable<DataPoint> data, double alpha)
double previousExponenta = 0;
foreach (DataPoint t1 in data)
DataPoint temp = new DataPoint()
OriginalY = t1.OriginalY,
ExpSmoothedY= t1.ExpSmoothedY,
AvgSmoothedY= t1.AvgSmoothedY,
temp.ExpSmoothedY = temp.OriginalY;
temp.ExpSmoothedY = alpha * temp.OriginalY + (1D - alpha) * previousExponenta;
previousExponenta = temp.ExpSmoothedY;
public double ExpSmoothedY;
public double AvgSmoothedY;
public static void Main()
DataPoint[] list = new DataPoint[6];
list[0] = new DataPoint(){OriginalY = -1};
list[1] = new DataPoint(){OriginalY = 1};
list[2] = new DataPoint(){OriginalY = 0};
list[3] = new DataPoint(){OriginalY = 2};
list[4] = new DataPoint(){OriginalY = 4};
list[5] = new DataPoint(){OriginalY = 6};
List<DataPoint> list_1 = new List<DataPoint>(list);
List<DataPoint> list_2 = new List<DataPoint>(list);
List<DataPoint> list1 = list_1.SmoothExponentialy(5d).ToList();
List<DataPoint> list2 = list_2.SmoothExponentialy(2d).ToList();
foreach(DataPoint dp in list1)
Console.WriteLine(dp.ExpSmoothedY);
foreach(DataPoint dp in list2)
Console.WriteLine(dp.ExpSmoothedY);