/// <summary> /// Функция находит производную многочлена /// </summary> /// <param name="polynom"> многочлен</param> /// <returns>Производная</returns> public static Polynomial Run(Polynomial polynom) { Polynomial Pol = new Polynomial(polynom.Values); //Создается новая переменная полином for (int i = 0; i < polynom.Values.Length - 1; ++i) // Цикл для перенесения коэфицентов в новую переменную(После дифференциирования) { Pol.Values[i] = new Rational(N_6.Run(Z_5.Run(Pol.Values[i + 1].Numerator), i + 1)); // Коэффицент умножается на степень и записывается в предыдущий элемент } Pol.Values[polynom.Values.Length - 1] = new Rational(N_6.Run(Z_5.Run(Pol.Values[0].Numerator), 0)); Pol.Clear();// очищаем от лишних нулей return(Pol); }
/// <summary> /// сокращение дроби /// </summary> /// <param name="A"> Дробь </param> /// <returns>Будет возвращенa сокращенная дробь </returns> public static Rational Run(Rational A) { if (A.Clear().Numerator[0] == 0 && A.Numerator.Length == 1) { return(new Rational("0")); } Natural HOD = N_13.Run(Z_5.Run(new Digit(A.Denominator)), Z_5.Run(A.Numerator)); // Находим НОД числителя и знаменателя A.Numerator = Z_9.Run(A.Numerator, HOD); //Сокращаем числитель на НОД числителя и знаменятеля A.Denominator = N_11.Run(A.Denominator, HOD); // Сокращаем знаменатель на нод return(A); }
/// <summary> /// Функция сокращает многочлен /// </summary> /// <param name="polynom"> многочлен</param> /// <returns>Многочлен</returns> public static Polynomial Run(Polynomial polynom) { int i, j; int Len = polynom.Values.Length; Polynomial Pol = new Polynomial(polynom.Values); //Создается новая переменная полином Pol.Clear(); // очищаем от лишних нулей Natural E = new Natural(new int[] { 1 }); //Проверка на нулевые Digit Null = new DiskMat.Digit(new int[] { 0 }); // Алгоритм нахождения Нок Pol.Clear(); // очищаем от лишних нулей E = Pol.Values[0].Denominator; for (i = 0; i < Len; ++i) // Алгоритм нахождения Нок { E = N_14.Run((E), (Pol.Values[i].Denominator)); } Natural Gt = new Natural(E.Value); Digit HOK = new Digit(new int[] { 1 }); HOK = new Digit(Gt.Value); //Алгоритм вынесения НОК Pol.Clear();// очищаем от лишних нулей bool e; for (i = 0; i < Len; i++) { e = Pol.Values[i].Numerator.Sign; Pol.Values[i].Numerator = Z_8.Run((Pol.Values[i].Numerator), Z_9.Run(HOK, Pol.Values[i].Denominator));// При убирании из знаменателя НОК, мы домножаем числитель на частное знаменателя и НОК Pol.Values[i].Denominator = new Natural(new int[] { 1 }); Pol.Values[i].Numerator.Sign = e; } // Алгоритм нахождения НОД Pol.Clear(); // очищаем от лишних нулей E = Z_5.Run(Pol.Values[0].Numerator); for (i = 0; i < Len; i++) // Алгоритм нахождения НОД { if (Pol.Values[i].Numerator != Null) { E = N_13.Run(E, Z_5.Run(Pol.Values[i].Numerator)); } } Natural HOD = E; // Запоминаем Наибольший общий делитель //Алгоритм вынесения НОД Pol.Clear(); // очищаем от лишних нулей bool w; for (i = 0; i < Len; i++) { if (N_1.Run(Z_5.Run(Pol.Values[i].Numerator), Z_5.Run(new Digit(new int[] { 0 }))) != 0) // Если в знаменателе не ноль, то работаем с ним { w = Pol.Values[i].Numerator.Sign; Pol.Values[i].Numerator = Z_9.Run(Pol.Values[i].Numerator, HOD);// При убирании из числителя НОД , мы делим числитель на общий нод всех числителей Pol.Values[i].Numerator.Sign = w; } } Pol.Clear(); // очищаем от лишних нулей return(Pol); }