Beispiel #1
0
        /// <summary>
        /// Like the Evaluate method, except it replaces indeterminates with Polynomials instead of integers,
        /// and returns the resulting (usually large) Polynomial
        /// </summary>
        public MultivariatePolynomial FunctionalComposition(List <Tuple <char, MultivariatePolynomial> > indeterminateValues)
        {
            List <Term> terms = this.Terms.ToList();
            List <MultivariatePolynomial> composedTerms = new List <MultivariatePolynomial>();

            foreach (Term trm in terms)
            {
                MultivariatePolynomial        constant  = MultivariatePolynomial.Parse(trm.CoEfficient.ToString());
                List <MultivariatePolynomial> toCompose = new List <MultivariatePolynomial>();
                toCompose.Add(constant.Clone());
                foreach (Indeterminate variable in trm.Variables)
                {
                    int exp = variable.Exponent;
                    MultivariatePolynomial valueOfIndeterminate = indeterminateValues.Where(tup => tup.Item1 == variable.Symbol).Select(tup => tup.Item2).FirstOrDefault();
                    if (valueOfIndeterminate == null)
                    {
                        MultivariatePolynomial thisVariableAsPoly = new MultivariatePolynomial(new Term[] { new Term(BigInteger.One, new Indeterminate[] { variable }) });
                        toCompose.Add(thisVariableAsPoly);
                    }
                    else if (exp == 0)
                    {
                        continue;
                    }
                    else if (exp == 1)
                    {
                        toCompose.Add(valueOfIndeterminate);
                    }
                    else
                    {
                        MultivariatePolynomial toMultiply = MultivariatePolynomial.Pow(valueOfIndeterminate, exp);
                        toCompose.Add(toMultiply);
                    }
                }
                MultivariatePolynomial composed = MultivariatePolynomial.Product(toCompose);
                composedTerms.Add(composed);
            }

            MultivariatePolynomial result = MultivariatePolynomial.Sum(composedTerms);

            return(result);
        }