protected override void calculate()
            {
                int len = 2 * m - 2;

                double[]
                sumXpow = new double[len + 1],
                sumYpow    = new double[m];
                sumXpow[0] = length;
                double x, y, t;

                for (int i = 0; i < length; i++)
                {
                    x = X[i]; y = Y[i]; t = 1;
                    for (int pow = 1; pow <= len; pow++)
                    {
                        sumXpow[pow] += (t *= x);
                    }
                    t = 1;
                    for (int pow = m - 1; pow >= 0; pow--)
                    {
                        sumYpow[pow] += y * t;
                        t            *= x;
                    }
                }

                double[,] sums = new double[m, m];
                for (int ix = 0; ix < m; ix++)
                {
                    for (int iy = 0; iy < m; iy++)
                    {
                        sums[ix, iy] = sumXpow[len - ix - iy];
                    }
                }
#if DecMatrix
                var temp = new DecMatrix(change(sums, v => (decimal)v)).Invert() * DecMatrix.Vertical(change(sumYpow, v => (decimal)v));

                for (int i = 0; i < m; i++)
                {
                    values[i + 1] = (double)Round(temp[i, 0], round);
                }
#else
                var temp = new Matrix(sums).Invert() * Matrix.Vertical(sumYpow);

                for (int i = 0; i < m; i++)
                {
                    values[i + 1] = Round(temp[i, 0], round);
                }
#endif
                a = values[1];
                b = values[2];
            }
 public static bool Like(DecMatrix a, DecMatrix b) => a.n == b.n && a.m == b.m;