/// <summary>
        /// 多項式が整理できる場合は整理する
        /// ・分母分子ごとに同類項をまとめる
        /// ・共通因数があれば求める
        /// ・共通因数を掛けて約分し、それを分母分子に分けて掛ける
        /// </summary>
        private void Initialise()
        {
            if (NumMonof.IsZero())
            {
                DenMonof = new List <Monomial> {
                    1
                };
                return;
            }
            if (NumMonof.IsOne() && DenMonof.IsOne())
            {
                return;
            }

            //0の項を削除
            NumMonof = NumMonof.Where(x => !x.IsZero()).ToList();
            DenMonof = DenMonof.Where(x => !x.IsZero()).ToList();

            //同類項をまとめる
            var SortedNumerator = NumMonof.Grouping(IsNumberKey: false).Select(x =>
            {
                var res = x[0];

                res.Number = x.Select(y => y.Number).Aggregate((now, next) => now + next);

                return(res);
            }).ToList();
            var SortedDenominator = DenMonof.Grouping(IsNumberKey: false).Select(x =>
            {
                var res = x[0];

                res.Number = x.Select(y => y.Number).Aggregate((now, next) => now + next);

                return(res);
            }).ToList();

            if (SortedNumerator.IsOne() || SortedDenominator.IsOne())
            {
                NumMonof = SortedNumerator;
                DenMonof = SortedDenominator;
                return;
            }

            var NumFactor = Factorizations.FactorOut(SortedNumerator);
            var DenFactor = Factorizations.FactorOut(SortedDenominator);

            Monomial Factor = NumFactor.Item1 / DenFactor.Item1;

            NumMonof = NumFactor.Item2.Select(x => x * Factor.GetNumerator()).ToList();
            DenMonof = DenFactor.Item2.Select(x => x * Factor.GetDenominator()).ToList();

            Reduction();

            Trace.WriteLine("Formula Initialized:" + this.GetString());
        }