public void TestComplicatedParseSqrt2() { string somePolynomial = "(x*x + sqrt2*x + 1)*(x*x - sqrt2*x + 1)"; SlowOperatorBasedField<double> rationalField = new SlowOperatorBasedField<double>(); PolynomialOverFieldRing<double> rationalPolynomialRing = new PolynomialOverFieldRing<double>(rationalField); IRing<Polynomial<double>> rationalWithSqrt2Ring = new QuotientRing<Polynomial<double>> (new PrincipalIdeal<Polynomial<double>> (rationalPolynomialRing, new Polynomial<double>(new double[] {-2, 0, 1}, rationalField))); var sqrt2 = rationalField.CreateMonomial(1, 1); PolynomialParser parser = new PolynomialParser (new PolynomialParserOptions() { Aliases = new Dictionary<string, object>() { {"sqrt2", sqrt2} } }); Polynomial<Polynomial<double>> parsed = parser.Parse(somePolynomial, rationalWithSqrt2Ring); PolynomialRing<Polynomial<double>> complexPolynomialRing = new PolynomialRing<Polynomial<double>>(rationalWithSqrt2Ring); Polynomial<Polynomial<double>> expectedResult = complexPolynomialRing.Add( rationalWithSqrt2Ring.CreateMonomial(rationalWithSqrt2Ring.Identity, 4), complexPolynomialRing.Identity); Assert.IsTrue(complexPolynomialRing.Comparer.Equals(parsed, expectedResult)); }
public void TestDivision() { PolynomialOverFieldRing<double> ring = new PolynomialOverFieldRing<double>(new SlowOperatorBasedField<double>()); Polynomial<double> remainder; var quotient = ring.Divide(new Polynomial<double>(new double[] {-1, 0, 0, 1}, ring.CoefficientsRing), new Polynomial<double>(new double[] {-1, 1}, ring.CoefficientsRing), out remainder); Assert.IsTrue(ring.Comparer.Equals(remainder, ring.Zero)); Assert.IsTrue(ring.Comparer.Equals(quotient, new Polynomial<double>(new double[] {1, 1, 1}, ring.CoefficientsRing))); }
public void TestInverse() { SlowOperatorBasedField<double> rationalField = new SlowOperatorBasedField<double>(); PolynomialOverFieldRing<double> rationalPolynomialRing = new PolynomialOverFieldRing<double>(rationalField); IField<Polynomial<double>> rationalWithSqrt2Ring = new QuotientField<Polynomial<double>> (new PrincipalIdeal<Polynomial<double>> (rationalPolynomialRing, new Polynomial<double>(new double[] {-2, 0, 1}, rationalField))); var sqrt2 = rationalField.CreateMonomial(1, 1); var number = rationalWithSqrt2Ring.Add(sqrt2, rationalWithSqrt2Ring.Identity); var result = rationalWithSqrt2Ring.Inverse(number); Polynomial<double> inverse = rationalWithSqrt2Ring.Add(sqrt2, rationalWithSqrt2Ring.Negative( rationalWithSqrt2Ring.Identity)); Assert.IsTrue(rationalWithSqrt2Ring.Comparer.Equals (result, inverse)); }