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); }