private DenseMatrix CalculateSmoothingFilters(int polynomialOrder, int filterLength) { int m = (filterLength - 1) / 2; var denseMatrix = new DenseMatrix(filterLength, polynomialOrder + 1); for (int i = -m; i <= m; i++) { for (int j = 0; j <= polynomialOrder; j++) { denseMatrix[i + m, j] = Math.Pow(i, j); } } var sTranspose = (DenseMatrix)denseMatrix.ConjugateTranspose(); var f = sTranspose * denseMatrix; var fInverse = (DenseMatrix)f.LU().Solve(DenseMatrix.CreateIdentity(f.ColumnCount)); var smoothingFilters = denseMatrix * fInverse * sTranspose; return smoothingFilters; }