Exemplo n.º 1
0
        public static ComplexMultivariatePolynomial Divide(ComplexMultivariatePolynomial left, ComplexMultivariatePolynomial right)
        {
            List <Term> newTermsList  = new List <Term>();
            List <Term> leftTermsList = CloneHelper <Term> .CloneCollection(left.Terms).ToList();

            foreach (Term rightTerm in right.Terms)
            {
                var matches = leftTermsList.Where(leftTerm => Term.ShareCommonFactor(leftTerm, rightTerm)).ToList();
                if (matches.Any())
                {
                    foreach (Term matchTerm in matches)
                    {
                        leftTermsList.Remove(matchTerm);
                        Term result = Term.Divide(matchTerm, rightTerm);
                        if (result != Term.Empty)
                        {
                            if (!newTermsList.Any(lt => lt.Equals(result)))
                            {
                                newTermsList.Add(result);
                            }
                        }
                    }
                }
                else
                {
                    ///newTermsList.Add(rightTerm);
                }
            }
            return(new ComplexMultivariatePolynomial(newTermsList.ToArray()));
        }
Exemplo n.º 2
0
        private static ComplexMultivariatePolynomial OneToOneArithmetic(ComplexMultivariatePolynomial left, ComplexMultivariatePolynomial right, Func <Term, Term, Term> operation)
        {
            List <Term> leftTermsList = CloneHelper <Term> .CloneCollection(left.Terms).ToList();

            foreach (Term rightTerm in right.Terms)
            {
                var match = leftTermsList.Where(leftTerm => Term.AreIdentical(leftTerm, rightTerm));
                if (match.Any())
                {
                    Term matchTerm = match.Single();
                    leftTermsList.Remove(matchTerm);

                    Term result = operation.Invoke(matchTerm, rightTerm);
                    if (result.CoEfficient != 0)
                    {
                        if (!leftTermsList.Any(lt => lt.Equals(result)))
                        {
                            leftTermsList.Add(result);
                        }
                    }
                }
                else
                {
                    leftTermsList.Add(Term.Negate(rightTerm));
                }
            }
            return(new ComplexMultivariatePolynomial(leftTermsList.ToArray()));
        }
Exemplo n.º 3
0
        public MultivariatePolynomial(Term[] terms)
        {
            IEnumerable <Term> newTerms = terms?.Where(trm => trm.CoEfficient != 0) ?? new Term[0];

            if (!newTerms.Any())
            {
                Terms = new Term[] { Term.Zero };
                return;
            }

            Terms = CloneHelper <Term> .CloneCollection(newTerms).ToArray();

            OrderMonomials();
        }
Exemplo n.º 4
0
 public Term Clone()
 {
     return(new Term(CoEfficient.Clone(), CloneHelper <Indeterminate> .CloneCollection(Variables).ToArray()));
 }
Exemplo n.º 5
0
 public Term(Complex coefficient, Indeterminate[] variables)
 {
     CoEfficient = coefficient.Clone();
     Variables   = CloneHelper <Indeterminate> .CloneCollection(variables).ToArray();
 }
Exemplo n.º 6
0
 public ComplexMultivariatePolynomial Clone()
 {
     return(new ComplexMultivariatePolynomial(CloneHelper <Term> .CloneCollection(Terms).ToArray()));
 }
Exemplo n.º 7
0
        public ComplexMultivariatePolynomial(Term[] terms)
        {
            Terms = CloneHelper <Term> .CloneCollection(terms).ToArray();

            OrderMonomials();
        }