Example #1
0
        MatrixX GetMinorsMatrixX()
        {
            DateTime t0            = DateTime.Now;
            MatrixX  minorsMatrixX = new MatrixX(Width, Height);
            MatrixX  minorMatrixX  = new MatrixX(Width - 1, Height - 1);
            int      numerator     = Width * Height;
            byte     size          = (byte)numerator.ToString().Length;

            for (int i = 0; i < Width; i++)
            {
                for (int j = 0; j < Height; j++)
                {
                    if (j + i != 0)
                    {
                        DateTime t     = DateTime.Now;
                        TimeSpan dt    = t - t0;
                        double   ratio = numerator / (i * Width + j + 0d);
                        Console.WriteLine("Get Minors Matrix: {0}/{1} = {2}% Complete. ETA: {3}", (i * Width + j).ToString().PadLeft(size), numerator, Math.Round(100 / ratio, 4).ToString().PadRight(8)
                                          , t0.Add(TimeSpan.FromMilliseconds(dt.TotalMilliseconds * ratio)));
                    }
                    GetMinor(i, j, ref minorMatrixX);
                    minorsMatrixX[i, j] = minorMatrixX.Determinant();
                }
            }
            Console.WriteLine("Ending time: {0}", DateTime.Now);
            return(minorsMatrixX);
        }
        public static PolynomialX Generate(IntX[] input, IntX[] output)
        {
            if (input.Length != output.Length)
            {
                return(null);
            }
            MatrixX A = new MatrixX(input.Length, input.Length);

            MatrixX column = new MatrixX(1, input.Length);

            for (int i = 0; i < input.Length; i++)
            {
                IntX prod = 1;
                for (int j = 0; j < input.Length; j++)
                {
                    A[j, i] = prod;
                    prod   *= input[i];
                }
                column[0, i] = output[i];
            }
            var det = A.Determinant();

            if (det == 0)
            {
                return(null);
            }
            var         adjoint = A.GetAdjointMatrix();
            PolynomialX poly    = new PolynomialX(input.Length);
            var         result  = adjoint * column;

            for (int i = 0; i < input.Length; i++)
            {
                poly.Coefficients[i] = (FractionX)result[i, 0] / det;
            }
            return(poly);
        }