예제 #1
0
        public void GetRootPowerSumsTest_IntegerFraction()
        {
            // Representação dos polinómios.
            var polynomText  = "(x-3)*(x-2)^2*(x+1)^3";
            var variableName = "x";

            // Estabelece os domínios.
            var integerDomain = new IntegerDomain();

            // Estabelece o corpo responsável pelas operações sobre as fracções.
            var fractionField = new FractionField <int>(integerDomain);

            // Estabelece os conversores.
            var integerToFractionConversion = new ElementFractionConversion <int>(integerDomain);

            // Estabelece os leitores individuais.
            var integerParser = new IntegerParser <string>();

            // Estabelece o leitor de fracções.
            var fractionParser = new ElementFractionParser <int>(integerParser, integerDomain);

            // Estabelece os polinómios.
            var integerPolynomial = TestsHelper.ReadUnivarPolynomial(
                polynomText,
                fractionField,
                fractionParser,
                integerToFractionConversion,
                variableName);
            var integerFractionExpectedVector = new ArrayVector <Fraction <int> >(6);

            integerFractionExpectedVector[0] = new Fraction <int>(4, 1, integerDomain);
            integerFractionExpectedVector[1] = new Fraction <int>(20, 1, integerDomain);
            integerFractionExpectedVector[2] = new Fraction <int>(40, 1, integerDomain);
            integerFractionExpectedVector[3] = new Fraction <int>(116, 1, integerDomain);
            integerFractionExpectedVector[4] = new Fraction <int>(304, 1, integerDomain);
            integerFractionExpectedVector[5] = new Fraction <int>(860, 1, integerDomain);
            var integerFractionActualVector = integerPolynomial.GetRootPowerSums(
                fractionField,
                new SparseDictionaryMathVectorFactory <Fraction <int> >());

            Assert.AreEqual(
                integerFractionExpectedVector.Length,
                integerFractionActualVector.Length,
                "Vector lengths aren't equal.");
            for (int i = 0; i < integerFractionActualVector.Length; ++i)
            {
                Assert.AreEqual(integerFractionExpectedVector[i], integerFractionActualVector[i]);
            }
        }
예제 #2
0
        public void GetRootPowerSumsTest()
        {
            // Representação dos polinómios.
            var polynomText  = "(x-3)*(x-2)^2*(x+1)^3";
            var variableName = "x";

            // Estabelece os domínios.
            var integerDomain = new IntegerDomain();

            // Estabelece o corpo responsável pelas operações sobre as fracções.
            var fractionField = new FractionField <int>(integerDomain);

            // Estabelece os conversores.
            var integerToFractionConversion = new ElementFractionConversion <int>(integerDomain);

            // Estabelece os leitores individuais.
            var integerParser = new IntegerParser <string>();

            // Estabelece o leitor de fracções.
            var fractionParser = new ElementFractionParser <int>(integerParser, integerDomain);

            // Estabelece os polinómios.
            var integerPolynomial = TestsHelper.ReadUnivarPolynomial(
                polynomText,
                fractionField,
                fractionParser,
                integerToFractionConversion,
                variableName);

            var number     = 10;
            var roots      = new int[] { 3, 2, 2, -1, -1, -1 };
            var powerRoots = new int[] { 3, 2, 2, -1, -1, -1 };
            var integerFractionExpectedVector = new ArrayVector <Fraction <int> >(number);

            // Primeiro cálculo
            var sum = powerRoots[0];

            for (int i = 1; i < powerRoots.Length; ++i)
            {
                sum += powerRoots[i];
            }

            integerFractionExpectedVector[0] = new Fraction <int>(sum, 1, integerDomain);
            for (int i = 1; i < number; ++i)
            {
                for (int j = 0; j < roots.Length; ++j)
                {
                    powerRoots[j] *= roots[j];
                }

                sum = powerRoots[0];
                for (int j = 1; j < powerRoots.Length; ++j)
                {
                    sum += powerRoots[j];
                }

                integerFractionExpectedVector[i] = new Fraction <int>(sum, 1, integerDomain);
            }

            var integerFractionActualVector = integerPolynomial.GetRootPowerSums(
                number,
                fractionField,
                new SparseDictionaryMathVectorFactory <Fraction <int> >());

            Assert.AreEqual(
                integerFractionExpectedVector.Length,
                integerFractionActualVector.Length,
                "Vector lengths aren't equal.");
            for (int i = 0; i < integerFractionActualVector.Length; ++i)
            {
                Assert.AreEqual(integerFractionExpectedVector[i], integerFractionActualVector[i]);
            }
        }