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())); }
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())); }
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(); }
public Term Clone() { return(new Term(CoEfficient.Clone(), CloneHelper <Indeterminate> .CloneCollection(Variables).ToArray())); }
public Term(Complex coefficient, Indeterminate[] variables) { CoEfficient = coefficient.Clone(); Variables = CloneHelper <Indeterminate> .CloneCollection(variables).ToArray(); }
public ComplexMultivariatePolynomial Clone() { return(new ComplexMultivariatePolynomial(CloneHelper <Term> .CloneCollection(Terms).ToArray())); }
public ComplexMultivariatePolynomial(Term[] terms) { Terms = CloneHelper <Term> .CloneCollection(terms).ToArray(); OrderMonomials(); }