/// <summary>
        /// Converts the symbolic variable into a state of separate simle terms with different denominators
        /// </summary>
        /// <param name="sv"></param>
        /// <returns></returns>
        public static SymbolicVariable[] SeparateWithDifferentDenominators(SymbolicVariable sv)
        {
            List <SymbolicVariable> SeparatedVariabls = new List <SymbolicVariable>();

            for (int i = 0; i < sv.TermsCount; i++)
            {
                SymbolicVariable ordered;
                SymbolicVariable.ReOrderNegativeSymbols(sv[i], out ordered);

                SeparatedVariabls.Add(ordered);
            }

            foreach (var eTerm in sv.ExtraTerms)
            {
                for (int i = 0; i < eTerm.Term.TermsCount; i++)
                {
                    SymbolicVariable ordered;
                    SymbolicVariable.ReOrderNegativeSymbols(eTerm.Term[i], out ordered);

                    if (eTerm.Negative)
                    {
                        ordered = SymbolicVariable.Multiply(SymbolicVariable.NegativeOne, ordered);
                    }

                    SeparatedVariabls.Add(ordered);
                }
            }

            return(SeparatedVariabls.ToArray());
        }
Esempio n. 2
0
        /// <summary>
        /// Converts the symbolic variable into a state of separate simple terms with different denominators
        /// </summary>
        /// <param name="sv"></param>
        /// <returns></returns>
        public static SymbolicVariable[] SeparateWithDifferentDenominators(SymbolicVariable sv)
        {
            List <SymbolicVariable> SeparatedVariabls = new List <SymbolicVariable>();


            var svclone = sv.Clone(true);
            var divisor = svclone._DividedTerm;

            svclone._DividedTerm = SymbolicVariable.One;
            for (int i = 0; i < svclone.TermsCount; i++)
            {
                SymbolicVariable ordered;
                SymbolicVariable.ReOrderNegativeSymbols(svclone[i], out ordered);
                ordered._DividedTerm = SymbolicVariable.Multiply(divisor, ordered._DividedTerm);
                SeparatedVariabls.Add(ordered);
            }

            var extraTerms = sv.ExtraTerms;

            foreach (var eTerm in extraTerms)
            {
                /*
                 * for (int i = 0; i < eTerm.Term.TermsCount; i++)
                 * {
                 *  SymbolicVariable ordered;
                 *  SymbolicVariable.ReOrderNegativeSymbols(eTerm.Term[i], out ordered);
                 *
                 *  if (eTerm.Negative)
                 *  {
                 *      ordered = SymbolicVariable.Multiply(SymbolicVariable.NegativeOne, ordered);
                 *  }
                 *
                 *  SeparatedVariabls.Add(ordered);
                 * }
                 */

                SeparatedVariabls.AddRange(SeparateWithDifferentDenominators(eTerm.Term));
            }

            return(SeparatedVariabls.ToArray());
        }