Пример #1
0
        public static Polynom operator -(Polynom a, Polynom b)
        {
            Polynom res = new Polynom();

            res.monoms.AddRange(a.monoms);
            res.monoms.AddRange((-b).monoms);
            res.SimplifyPolynom();
            return(res);
        }
Пример #2
0
        /// <summary>
        /// Деление полиномов с остатком
        /// </summary>
        /// <param name="f"> Делимое </param>
        /// <param name="g"> Делитель </param>
        /// <param name="q"> Частное </param>
        /// <param name="r"> Остаток </param>
        public static void DividePolynoms(Polynom f, Polynom g, out List <Monom> q, out Polynom r)
        {
            q = new List <Monom>();
            r = (Polynom)f.Clone();

            while (r.Degree >= g.Degree)
            {
                if (!r.IsNull && Monom.CanDivide(r.LT, g.LT))
                {
                    Monom divLT = r.LT / g.LT;
                    q.Add(divLT);
                    var temp = g * (divLT);
                    r = r - temp;
                    r = LexOrder.CreateOrderedPolynom(r);
                    r = r.SimplifyPolynom();
                }
                else
                {
                    break;
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Перестановка мономов в полиноме
        /// </summary>
        /// <param name="poly"> Анализируемый полином </param>
        /// <returns> Готовый полином </returns>
        public static Polynom CreateOrderedPolynom(Polynom poly)
        {
            Polynom tempPolynom = poly, orderedPolynom;

            Dictionary <Monom, int> monomRepeats = tempPolynom.monoms.ToDictionary(m => m, m => 1);

            foreach (Monom t in tempPolynom.monoms)
            {
                foreach (Monom t1 in tempPolynom.monoms)
                {
                    if (t.CompareTo(t1) > 0)
                    {
                        monomRepeats[t]++;
                    }
                }
            }
            monomRepeats = monomRepeats.OrderByDescending(pair => pair.Value).ToDictionary(pair => pair.Key, pair => pair.Value);

            //Составим упорядоченный полином
            orderedPolynom = new Polynom(monomRepeats.Keys.ToList());

            return(orderedPolynom.SimplifyPolynom());
        }