public static void FactorForms() { var pol = new RationalTypes.RationalPolynomial(new RationalTypes.Rational[] { new RationalTypes.Rational(17), new RationalTypes.Rational(187), new RationalTypes.Rational(612), new RationalTypes.Rational(272), new RationalTypes.Rational(-1088) }); Console.WriteLine(RationalTypes.HornerScheme.GetFactorForm(pol)); pol = new RationalTypes.RationalPolynomial(new RationalTypes.Rational[] { new RationalTypes.Rational(1), new RationalTypes.Rational(-2), new RationalTypes.Rational(1), new RationalTypes.Rational(-18), new RationalTypes.Rational(-72) }); Console.WriteLine(RationalTypes.HornerScheme.GetFactorForm(pol)); pol = new RationalTypes.RationalPolynomial(new RationalTypes.Rational[] { new RationalTypes.Rational(12), new RationalTypes.Rational(2496, 5), new RationalTypes.Rational(-1826), new RationalTypes.Rational(416), new RationalTypes.Rational(-1528), new RationalTypes.Rational(416, 5), new RationalTypes.Rational(-306) // -306 + (416 x) / 5 - 1528 x ^ 2 + 416 x ^ 3 - 1826 x ^ 4 + (2496 x ^ 5)/ 5 + 12 x ^ 6 }); Console.WriteLine(RationalTypes.HornerScheme.GetFactorForm(pol)); pol = new RationalPolynomial(new Rational[] { (Rational)1, -(Rational)12 / 7, (Rational)54 / 49, -(Rational)108 / 343, (Rational)81 / 2401 }); Console.WriteLine(RationalTypes.HornerScheme.GetFactorForm(pol)); }
public static string GetTeXFactorForm(RationalPolynomial p) { var q = new RationalPolynomial(p.Coefficients); string answer = string.Empty; var roots = GetRationalRoots(q.MakePolynomial()); foreach (var root in roots) { while (q.At(root) == 0) { answer += "\\left( x" + (-root).ToSignedTeXString() + "\\right)"; q.DivideBySolution(root); } } answer += (q.Degree == 0 && q[0] == 1) ? string.Empty : "\\left( " + q.ToString() + "\\right)"; return(answer); }