You can do this using the Iridium MathDotNet library.
Here is an example of a C # class:
using MathNet.Numerics.LinearAlgebra; namespace StackOverflow.Examples { public class PolynomialRegression { readonly Vector _xData; readonly Vector _yData; readonly Vector _coef; readonly int _order; public PolynomialRegression(Vector xData, Vector yData, int order) { if (xData.Length != yData.Length) { throw new IndexOutOfRangeException(); } _xData = xData; _yData = yData; _order = order; var n = xData.Length; var a = new Matrix(n, order + 1); for (var i = 0; i < n; i++) a.SetRowVector(VandermondeRow(xData[i]), i);
And here is a usage example:
var xVector = new Vector(new double[] { 1, 2, 3, 4, 5 }); var yVector = new Vector(new double[] { 10, 20, 30, 40, 50 }); var order = 2; _poly = new PolynomialRegression(xVector, yVector, order);
source share