Ejemplo n.º 1
0
        public static ComplexMultivariatePolynomial Pow(ComplexMultivariatePolynomial poly, int exponent)
        {
            if (exponent < 0)
            {
                throw new NotImplementedException("Raising a polynomial to a negative exponent not supported.");
            }
            else if (exponent == 0)
            {
                return(new ComplexMultivariatePolynomial(new Term[] { new Term(1, new Indeterminate[0]) }));
            }
            else if (exponent == 1)
            {
                return(poly.Clone());
            }

            ComplexMultivariatePolynomial result = poly.Clone();

            int counter = exponent - 1;

            while (counter != 0)
            {
                result   = ComplexMultivariatePolynomial.Multiply(result, poly);
                counter -= 1;
            }
            return(new ComplexMultivariatePolynomial(result.Terms));
        }
Ejemplo n.º 2
0
        public static ComplexMultivariatePolynomial GCD(ComplexMultivariatePolynomial left, ComplexMultivariatePolynomial right)
        {
            ComplexMultivariatePolynomial minuend    = left.Clone();
            ComplexMultivariatePolynomial subtrahend = right.Clone();
            ComplexMultivariatePolynomial difference;
            Complex minuendMaxCoefficient    = 0;
            Complex subtrahendMaxCoefficient = 0;
            Complex differenceMaxCoefficient = 0;

            do
            {
                minuendMaxCoefficient    = minuend.MaxCoefficient();
                subtrahendMaxCoefficient = subtrahend.MaxCoefficient();
                difference = ComplexMultivariatePolynomial.Subtract(minuend, subtrahend).Clone();
                differenceMaxCoefficient = difference.MaxCoefficient();

                if (Complex.Abs(minuendMaxCoefficient) > Complex.Abs(subtrahendMaxCoefficient) && Complex.Abs(subtrahendMaxCoefficient) > Complex.Abs(differenceMaxCoefficient))
                {
                    minuend    = subtrahend.Clone();
                    subtrahend = difference.Clone();
                }
                else if (Complex.Abs(differenceMaxCoefficient) > Complex.Abs(subtrahendMaxCoefficient))
                {
                    //minuend = subtrahend.Clone();
                    subtrahend = difference.Clone();
                }
            }while (Complex.Abs(minuendMaxCoefficient) > 0 && Complex.Abs(subtrahendMaxCoefficient) > 0 && minuend.HasVariables() && subtrahend.HasVariables());

            if (minuend.HasVariables())
            {
                return(subtrahend.Clone());
            }
            else
            {
                return(minuend.Clone());
            }
        }