/// <summary>
        /// Подстваляет вместо переданной переменной
        /// </summary>
        /// <param name="variable"></param>
        /// <param name="value"></param>
        internal void Subs(char variable, Fraction value)
        {
            Fraction freeMember = VariableAndCoef[variable] * value;

            FreeMember += freeMember;
            VariableAndCoef.Remove(variable);
        }
        /// <summary>
        /// Подставялет вместо переданной переменной какое-то выражение
        /// </summary>
        /// <param name="variable"></param>
        /// <param name="eq"></param>
        internal void Subs(char variable, Equation eq)
        {
            try
            {
                Fraction coef = VariableAndCoef[variable];
                VariableAndCoef.Remove(variable);

                //Копируем словарь
                Dictionary <char, Fraction> vcCopy = new Dictionary <char, Fraction>();
                foreach (var vc in eq.VariableAndCoef)
                {
                    vcCopy.Add(vc.Key, vc.Value);
                }

                for (int i = 0; i < vcCopy.Count; i++)
                {
                    char key = vcCopy.Keys.ElementAt(i);
                    vcCopy[key] *= coef;
                }

                foreach (var vs in vcCopy)
                {
                    if (VariableAndCoef.ContainsKey(vs.Key))
                    {
                        VariableAndCoef[vs.Key] += vs.Value;
                    }
                    else
                    {
                        VariableAndCoef.Add(vs.Key, vs.Value);
                    }
                }

                VariableAndCoef = RemoveZero(VariableAndCoef);

                FreeMember += eq.FreeMember * coef;
            }
            catch (KeyNotFoundException)
            {
                throw new ArgumentException("Переданной переменной нет в уравнении", "variable");
            }
        }