示例#1
0
        public void TestParseAndToString()
        {
            string[] toTest = new string[]
            {
                "a*b*c*d - w*x*y*z",
                "X - 1",
                "2*X^4 + 13*X^3 + 29*X^2 + 29*X + 13",
                "w^2*x*y + w*x + w*y + 1",
                "x*y + x + y + 1",
                "7*x*y + 14*y - 3*x - 1",
                "4*x*y - 2*y - 3*x - 1",
                "4*x*y - 11*y - 12*x",
                "12*x",
                "x",
                "1",
                "0"
            };

            int counter = 1;

            foreach (string testString in toTest)
            {
                MultivariatePolynomial testPolynomial = MultivariatePolynomial.Parse(testString);
                string expected          = testString;                //.Replace(" ", "");
                string actual            = testPolynomial.ToString(); //.Replace(" ", "");
                bool   isMatch           = (expected == actual);
                string passFailString    = isMatch ? "PASS" : "FAIL";
                string inputOutputString = isMatch ? $"Polynomial: \'{testPolynomial.ToString()}\"" : $"Expected: \"{expected}\"; Actual: \"{actual}\"";
                TestContext.WriteLine($"Test #{counter} => Pass/Fail: \"{passFailString}\" {inputOutputString}");
                Assert.AreEqual(expected, actual, $"Test #{counter}: MultivariatePolynomial.Parse(\"{testString}\").ToString();");

                counter++;
            }
        }
示例#2
0
        public void TestInstantiateNull()
        {
            MultivariatePolynomial testPolynomial = new MultivariatePolynomial(null);
            string expected = "0";
            string actual   = testPolynomial.ToString();

            Assert.AreEqual(expected, actual, $"Expected: \"{expected}\"; Actual: \"{actual}\"");
        }
示例#3
0
        public void TestMonomialOrdering()
        {
            string toParse  = "3*X^2*Y^3 + 6*X* Y^4 + X^3*Y^2 + 4*X^5 - 6*X^2*Y + 3*X* Y*Z - 5*X^2 + 3*Y^3 + 24*X* Y - 4";
            string expected = "4*X^5 + 6*X*Y^4 + 3*X^2*Y^3 + X^3*Y^2 + 3*Y^3 - 6*X^2*Y + 3*X*Y*Z - 5*X^2 + 24*X*Y - 4";

            MultivariatePolynomial poly = MultivariatePolynomial.Parse(toParse);
            string actual = poly.ToString();

            TestContext.WriteLine($"Result: \"{actual}\".");
            Assert.AreEqual(expected, actual, $"Test of: Monomial Ordering");
        }
示例#4
0
        public void TestInstantiateZeroCoefficient()
        {
            Indeterminate indt = new Indeterminate('X', 2);
            Term          term = new Term(0, new Indeterminate[] { indt });

            MultivariatePolynomial testPolynomial = new MultivariatePolynomial(new Term[] { term });
            string expected = "0";
            string actual   = testPolynomial.ToString();

            Assert.AreEqual(expected, actual, $"Expected: \"{expected}\"; Actual: \"{actual}\"");
        }
示例#5
0
        public void TestParse_ConstantPolynomial004()
        {
            string toTest = "-X";

            MultivariatePolynomial testPolynomial = MultivariatePolynomial.Parse(toTest);

            string expected = toTest;                    //.Replace(" ", "");
            string actual   = testPolynomial.ToString(); //.Replace(" ", "");

            TestContext.WriteLine($"Expected: \"{expected}\"; Actual: \"{actual}\"");
            TestContext.WriteLine($"Pass/Fail: \"{((expected == actual) ? "PASS" : "FAIL")}\"");
            Assert.AreEqual(expected, actual, $"MultivariatePolynomial.Parse(\"{toTest}\").ToString();");
        }
        public void TestGetDerivative2()
        {
            string polyString = "4*X^2*Y^4 - 4*X*Y^2 + 1";
            string expected   = "8*X*Y^4 - 4*Y^2";

            MultivariatePolynomial poly       = MultivariatePolynomial.Parse(polyString);
            MultivariatePolynomial derivative = MultivariatePolynomial.GetDerivative(poly, 'X');

            string actual = derivative.ToString();

            TestContext.WriteLine($"Expected: \"{expected}\"; Actual: \"{actual}\"");
            Assert.AreEqual(expected, actual, $"Test of: MultivariatePolynomial.GetDerivative({polyString});");
        }
        public void TestPow()
        {
            string polyBaseString = "2*X*Y^2 - 1";
            int    exponent       = 2;

            string expected = "4*X^2*Y^4 - 4*X*Y^2 + 1";

            MultivariatePolynomial polyBase = MultivariatePolynomial.Parse(polyBaseString);
            MultivariatePolynomial power    = MultivariatePolynomial.Pow(polyBase, exponent);

            string actual = power.ToString();

            TestContext.WriteLine($"Expected: \"{expected}\"; Actual: \"{actual}\"");
            Assert.AreEqual(expected, actual, $"Test of: MultivariatePolynomial.Pow({polyBaseString}, {exponent});");
        }
示例#8
0
        public void TestParse001()
        {
            string toTest = "X*Y*Z^2 + X*Y + X*Z + Y*Z - 1";

            MultivariatePolynomial testPolynomial = MultivariatePolynomial.Parse(toTest);

            string expected       = toTest;                    //.Replace(" ", "");
            string actual         = testPolynomial.ToString(); //.Replace(" ", "");
            bool   isMatch        = (expected == actual);
            string passFailString = isMatch ? "PASS" : "FAIL";

            TestContext.WriteLine($"Expected: \"{expected}\"; Actual: \"{actual}\"");
            TestContext.WriteLine($"Pass/Fail: \"{passFailString}\"");
            Assert.AreEqual(expected, actual, $"MultivariatePolynomial.Parse(\"{toTest}\").ToString();");
        }
示例#9
0
        public void TestParseNegativeLeadingCoefficient()
        {
            string polynomialExpected  = "-8*X^2 - X + 8";
            string leadingTermExpected = "-8*X^2";
            string secondTermExpected  = "-X";

            MultivariatePolynomial testPolynomial = MultivariatePolynomial.Parse(polynomialExpected);
            string polynomialActual  = testPolynomial.ToString();
            string leadingTermActual = testPolynomial.Terms[2].ToString();
            string secondTermActual  = testPolynomial.Terms[1].ToString();

            Assert.AreEqual(polynomialExpected, polynomialActual, $"Expected: \"{polynomialExpected}\"; Actual: \"{polynomialActual}\"");
            Assert.AreEqual(leadingTermExpected, leadingTermActual, $"Expected: \"{leadingTermExpected}\"; Actual: \"{leadingTermActual}\"");
            Assert.AreEqual(secondTermExpected, secondTermActual, $"Expected: \"{secondTermExpected}\"; Actual: \"{secondTermActual}\"");
        }
        public void TestSubtract2()
        {
            string minuend    = "36*X*Y + 6*X + 6*Y + 1";
            string subtrahend = "36*X*Y + 1";

            string expected = "6*X + 6*Y";

            MultivariatePolynomial polyMinuend    = MultivariatePolynomial.Parse(minuend);
            MultivariatePolynomial polySubtrahend = MultivariatePolynomial.Parse(subtrahend);

            MultivariatePolynomial difference = MultivariatePolynomial.Subtract(polyMinuend, polySubtrahend);
            string actual = difference.ToString();

            TestContext.WriteLine($"Expected: \"{expected}\"; Actual: \"{actual}\"");
            Assert.AreEqual(expected, actual, $"Test of: MultivariatePolynomial.Subtract: ({minuend}) - ({subtrahend})");
        }
        public void TestAddUnlikeTerms()
        {
            string augend = "X^2";
            string addend = "6";

            string expected = "X^2 + 6";

            MultivariatePolynomial polyAugend = MultivariatePolynomial.Parse(augend);
            MultivariatePolynomial polyAddend = MultivariatePolynomial.Parse(addend);

            MultivariatePolynomial sum = MultivariatePolynomial.Add(polyAugend, polyAddend);
            string actual = sum.ToString();

            TestContext.WriteLine($"Expected: \"{expected}\"; Actual: \"{actual}\"");
            Assert.AreEqual(expected, actual, $"Test of: MultivariatePolynomial.Add({augend}, {addend});");
        }
        public void TestSubtract4()
        {
            string minuend    = "3*X^2*Y^3 + 2*X^3*Y^2 + 6*X*Y^2 + 4*X^3 - 6*X^2*Y + 3*X*Y - 2*X^2 + 12*X - 6";
            string subtrahend = "X^3*Y^2 + 3*X^2 - 3*Y^2 - 12*X - 2";

            string expected = "3*X^2*Y^3 + X^3*Y^2 + 4*X^3 + 6*X*Y^2 - 6*X^2*Y + 3*Y^2 - 5*X^2 + 3*X*Y + 24*X - 4";

            MultivariatePolynomial polyMinuend    = MultivariatePolynomial.Parse(minuend);
            MultivariatePolynomial polySubtrahend = MultivariatePolynomial.Parse(subtrahend);

            MultivariatePolynomial difference = MultivariatePolynomial.Subtract(polyMinuend, polySubtrahend);
            string actual = difference.ToString();

            TestContext.WriteLine($"Expected: \"{expected}\"; Actual: \"{actual}\"");
            Assert.AreEqual(expected, actual, $"Test of: MultivariatePolynomial.Subtract: ({minuend}) - ({subtrahend})");
        }
        public void TestDivide2()
        {
            string dividend = "2*X*Y^2 + 3*X*Y + 4*Y^2 + 6*Y";
            string divisor  = "X + 2";

            string expected = "2*Y^2 + 3*Y";

            MultivariatePolynomial polyDivedend = MultivariatePolynomial.Parse(dividend);
            MultivariatePolynomial polyDivisor  = MultivariatePolynomial.Parse(divisor);

            MultivariatePolynomial quotient = MultivariatePolynomial.Divide(polyDivedend, polyDivisor);
            string actual = quotient.ToString();

            TestContext.WriteLine($"Expected: \"{expected}\"; Actual: \"{actual}\"");
            Assert.AreEqual(expected, actual, $"Test of: MultivariatePolynomial.Divide({dividend}, {divisor});");
        }
        public void TestMultiplySameSymbols()
        {
            string lhs      = "6*X + 1";
            string rhs      = "6*X - 1";
            string expected = "36*X^2 - 1";

            MultivariatePolynomial polylhs = MultivariatePolynomial.Parse(lhs);
            MultivariatePolynomial polyrhs = MultivariatePolynomial.Parse(rhs);

            MultivariatePolynomial polyProdcut = MultivariatePolynomial.Multiply(polylhs, polyrhs);

            string actual = polyProdcut.ToString();

            TestContext.WriteLine($"Expected: \"{expected}\"; Actual: \"{actual}\"");
            Assert.AreEqual(expected, actual, $"Test of: MultivariatePolynomial.Multiply({lhs}, {rhs});");
        }
        public void TestSubtract5()
        {
            string minuend    = "504*X*Y*Z^2 + 216*X*Y - 42*X*Z^2 - 18*X + 84*Y*Z^2 + 36*Y - 7*Z^2 - 3";
            string subtrahend = "X*Y*Z^2 + 42*X*Z^2 - 8*X - X^2 - 3";

            string expected = "503*X*Y*Z^2 + 84*Y*Z^2 - 84*X*Z^2 + X^2 - 7*Z^2 + 216*X*Y + 36*Y - 10*X";

            MultivariatePolynomial polyMinuend    = MultivariatePolynomial.Parse(minuend);
            MultivariatePolynomial polySubtrahend = MultivariatePolynomial.Parse(subtrahend);

            MultivariatePolynomial difference = MultivariatePolynomial.Subtract(polyMinuend, polySubtrahend);
            string actual = difference.ToString();

            TestContext.WriteLine($"Expected: \"{expected}\"; Actual: \"{actual}\"");
            Assert.AreEqual(expected, actual, $"Test of: MultivariatePolynomial.Subtract: ({minuend}) - ({subtrahend})");
        }
        public void TestGCD()
        {
            //throw new NotImplementedException();

            string polyString1 = "X^4 + 8*X^3 + 21*X^2 + 22*X + 8";                 //"X^4 + 8*X^3 + 21*X^2 + 22*X + 8";
            string polyString2 = "X^3 + 6*X^2 + 11*X + 6";                          //"X^3 + 6*X^2 + 11*X + 6";
            string expected    = "X^2 + 3*X + 2";                                   //"X^2 + 3*X + 2";

            MultivariatePolynomial poly1 = MultivariatePolynomial.Parse(polyString1);
            MultivariatePolynomial poly2 = MultivariatePolynomial.Parse(polyString2);
            MultivariatePolynomial gcd   = MultivariatePolynomial.GCD(poly1, poly2);

            string actual = gcd.ToString();

            TestContext.WriteLine($"Expected: \"{expected}\"; Actual: \"{actual}\"");
            Assert.AreEqual(expected, actual, $"Test of: MultivariatePolynomial.GCD({polyString1}, {polyString2});");
        }
示例#17
0
        public void TestEvaluate_BigInteger()
        {
            string expected = "8551120982818029391";

            string polyString = "2*x^4 + 13*y^3 + 29*x^2 + 29*y + 13";
            MultivariatePolynomial           poly           = MultivariatePolynomial.Parse(polyString);
            List <Tuple <char, BigInteger> > indeterminants = new List <Tuple <char, BigInteger> >()
            {
                new Tuple <char, BigInteger>('x', 45468),
                new Tuple <char, BigInteger>('y', 63570),
            };

            BigInteger result = poly.Evaluate(indeterminants);
            string     actual = result.ToString();

            TestContext.WriteLine($"Result: \"{actual}\".");
            Assert.AreEqual(expected, actual, $"Test of: MultivariatePolynomial.Evaluate({polyString}) where {string.Join(" and ", indeterminants.Select(tup => $"{tup.Item1} = {tup.Item2}"))}");
        }
示例#18
0
        public void TestEvaluate_Double()
        {
            string expected = "15565";

            string polyString = "10000*x^4 + 125*y^3 + 500*x^2 + 75*y + 13";
            MultivariatePolynomial       poly           = MultivariatePolynomial.Parse(polyString);
            List <Tuple <char, double> > indeterminants = new List <Tuple <char, double> >()
            {
                new Tuple <char, double>('x', 1.1d),
                new Tuple <char, double>('y', 1.2d),
            };

            double result = poly.Evaluate(indeterminants);
            string actual = result.ToString();

            TestContext.WriteLine($"Result: \"{actual}\".");
            Assert.AreEqual(expected, actual, $"Test of: MultivariatePolynomial.Evaluate({polyString}) where {string.Join(" and ", indeterminants.Select(tup => $"{tup.Item1} = {tup.Item2}"))}");
        }
示例#19
0
        public void TestEvaluate_Complex()
        {
            string expected = "(0, 0)";

            string polyString = "x^2 + 1";
            MultivariatePolynomial        poly           = MultivariatePolynomial.Parse(polyString);
            List <Tuple <char, Complex> > indeterminants = new List <Tuple <char, Complex> >()
            {
                new Tuple <char, Complex>('x', Complex.ImaginaryOne)
            };

            Complex evaluated = poly.Evaluate(indeterminants);
            Complex result    = new Complex(Math.Round(evaluated.Real, 1), Math.Round(evaluated.Imaginary, 1));
            string  actual    = result.ToString();

            TestContext.WriteLine($"Result: \"{actual}\".");
            Assert.AreEqual(expected, actual, $"Test of: MultivariatePolynomial.Evaluate({polyString}) where x = sqrt(-1)");
        }
        public void TestFunctionalComposition001()
        {
            MultivariatePolynomial indeterminateX = MultivariatePolynomial.Parse("6*X + 1");

            MultivariatePolynomial zero     = MultivariatePolynomial.Parse("0");
            MultivariatePolynomial minusOne = MultivariatePolynomial.Parse("-1");
            MultivariatePolynomial one      = MultivariatePolynomial.Parse("1");
            MultivariatePolynomial X        = MultivariatePolynomial.Parse("X");

            MultivariatePolynomial even = MultivariatePolynomial.Parse("2*Y");
            MultivariatePolynomial odd  = MultivariatePolynomial.Parse("2*X + 1");


            string expecting1 = "1";
            string expecting2 = "6*X + 1";
            string expecting3 = "12*Y + 1";
            //string expecting4 = "";
            //string expecting5 = "";


            string actual1 = MultivariatePolynomial.Pow(indeterminateX, 0).ToString();
            string actual2 = MultivariatePolynomial.Pow(indeterminateX, 1).ToString();
            string actual3 = indeterminateX.FunctionalComposition(new List <Tuple <char, MultivariatePolynomial> >()
            {
                new Tuple <char, MultivariatePolynomial>('X', even)
            }).ToString();

            //string actual4 = composition4.ToString();
            //string actual5 = composition5.ToString();

            Assert.AreEqual(expecting1, actual1);
            Assert.AreEqual(expecting2, actual2);
            Assert.AreEqual(expecting3, actual3);
            //Assert.AreEqual(expecting4, actual4);
            //Assert.AreEqual(expecting5, actual5);
        }
        public void TestFunctionalComposition002()
        {
            MultivariatePolynomial indeterminateX = MultivariatePolynomial.Parse("6*X + 1");
            MultivariatePolynomial indeterminateY = MultivariatePolynomial.Parse("6*Y - 1");
            MultivariatePolynomial polyn          = MultivariatePolynomial.Multiply(indeterminateX, indeterminateY);

            MultivariatePolynomial zero     = MultivariatePolynomial.Parse("0");
            MultivariatePolynomial minusOne = MultivariatePolynomial.Parse("-1");
            MultivariatePolynomial six      = MultivariatePolynomial.Parse("6");

            MultivariatePolynomial even = MultivariatePolynomial.Parse("2*Y");
            MultivariatePolynomial odd  = MultivariatePolynomial.Parse("2*X + 1");

            MultivariatePolynomial inversePolyn = MultivariatePolynomial.Multiply(polyn, minusOne);             // -36*X*Y + 6*X - 6*Y + 1

            List <Tuple <char, MultivariatePolynomial> > indeterminantsOddEven = new List <Tuple <char, MultivariatePolynomial> >()
            {
                new Tuple <char, MultivariatePolynomial>('X', odd),
                new Tuple <char, MultivariatePolynomial>('Y', even),
            };

            List <Tuple <char, MultivariatePolynomial> > indeterminantsConstants = new List <Tuple <char, MultivariatePolynomial> >()
            {
                new Tuple <char, MultivariatePolynomial>('X', zero),
                new Tuple <char, MultivariatePolynomial>('Y', minusOne),
            };

            List <Tuple <char, MultivariatePolynomial> > indeterminantsInverse = new List <Tuple <char, MultivariatePolynomial> >()
            {
                new Tuple <char, MultivariatePolynomial>('X', inversePolyn),
                new Tuple <char, MultivariatePolynomial>('Y', inversePolyn),
            };

            List <Tuple <char, MultivariatePolynomial> > indeterminantSix = new List <Tuple <char, MultivariatePolynomial> >()
            {
                new Tuple <char, MultivariatePolynomial>('X', six)
            };

            MultivariatePolynomial composition1 = polyn.FunctionalComposition(indeterminantsOddEven);             // 36*X*Y + 6*Y - 6*X - 1
            MultivariatePolynomial composition2 = polyn.FunctionalComposition(indeterminantsInverse);
            MultivariatePolynomial composition3 = polyn.FunctionalComposition(indeterminantsConstants);
            MultivariatePolynomial composition4 = minusOne.FunctionalComposition(indeterminantSix);
            MultivariatePolynomial composition5 = indeterminateX.FunctionalComposition(indeterminantsConstants);

            string expecting1 = "144*X*Y - 12*X + 84*Y - 7";
            string expecting2 = "46656*X^2*Y^2 + 1296*X^2 - 15552*X^2*Y + 15552*X*Y^2 + 432*X - 5184*X*Y + 1296*Y^2 - 432*Y + 35";
            string expecting3 = "-7";
            string expecting4 = "-1";
            string expecting5 = "1";

            string actual1 = composition1.ToString();
            string actual2 = composition2.ToString();
            string actual3 = composition3.ToString();
            string actual4 = composition4.ToString();
            string actual5 = composition5.ToString();

            //Assert.AreEqual(expecting1, actual1);
            //Assert.AreEqual(expecting2, actual2);
            Assert.AreEqual(expecting3, actual3);
            Assert.AreEqual(expecting4, actual4);
            Assert.AreEqual(expecting5, actual5);
        }