<ProgramFilesX86>\Sho 2.1\bin\MathFunc.dll <ProgramFilesX86>\Sho 2.1\bin\MatrixInterf.dll <ProgramFilesX86>\Sho 2.1\bin\ShoArray.dll <ProgramFilesX86>\Sho 2.1\bin\ShoViz.dll <RuntimeDirectory>\System.Windows.Forms.dll MathNet.Numerics ShoNS.Visualization System.Drawing MathNet.Numerics.LinearRegression MathNet.Numerics void Main() { var dates = Enumerable.Range(-7, 7).Select(daysInThePast => DateTime.Now.Date.AddDays(daysInThePast)); var values = new double[] { 1000, 800, 700, 600, 500, 400, 300 }; CreateRegressionGraph(dates, values); } private void CreateRegressionGraph(IEnumerable dates, IEnumerable values) { var xdata = dates.ToList(); var ydata = values.ToList(); // Find the date that we run out regression. var regression = Fit.Line(ydata.ToArray(), dates.Select(d => (double)d.Ticks).ToArray()); var runout = new DateTime((long)regression.Item1); runout.Dump(); // Draw a graph of it. regression = Fit.Line(dates.Select(d => (double)d.Ticks).ToArray(), ydata.ToArray()); var intercept = regression.Item1; var slope = regression.Item2; // The actual data. var rangeA_X = xdata.ToArray(); var rangeA_Y = ydata.ToArray(); // The regression data. var rangeB_X = xdata.Concat(new DateTime[] { runout }).ToArray(); //var rangeB_Y = ydata.Concat(new double[] { 0 }).ToArray(); var rangeB_Y = rangeB_X.Select(d => (double)d.Ticks).Select(x => intercept + slope * x).ToArray(); // Display a chart. var chart = new ShoChart() { Title = "Disk Space", HasLegend = true, }; // Swap x and y so that the slope is downwards to zero. chart.AddSeries(rangeA_X, rangeA_Y); chart.SeriesNames[0] = "Actual Samples"; chart.AddSeries(rangeB_X, rangeB_Y); chart.SeriesNames[1] = "Prediction " + runout.ToString("yyyy-MM-dd"); chart.Dump(); }