5.5.1. Обзор возможностей пакета PolynomialTools
Для выполнения ряда специальных операций с полиномами или создания полиномов с заданными свойствами служит пакет PolynomialTools. Этот пакет имеет небольшое число функций:
> with(PolynomialTools);
В пакет входят функции расщепления, сортировки и преобразования полиномов (в том числе в дифференциальные уравнения и наоборот) и др.
5.5.2. Функции для работы с полиномами
Рассмотрим несколько функций пакета PolynomialTools общего характера.
Функция IsSelfReciprocal(a, х, 'р') — проверяет полином а(х) на условие соeff(a,x,k)=coeff(a,x,d-k) для всех k=0..d, где d=degree(a, х) — порядок полинома. Если это условие выполняется, то возвращается логическое значение true, иначе — false. Если порядок d четный и если задан третий аргумент р, то р будет представлять полином P порядка d/2, такой, что x^(d/2)*P(x+1/x)=а. При нечетном d, полином а будет взаимо-обратным, что подразумевает деление на х+1. В этом случае если p указано, результат вычисляется в форме а/(х+1).
Примеры применения этой функции представлены ниже (файл poltools):
> with(PolynomialTools):
IsSelfReciprocal(х^4+х^3+х+1, x, 'p');
> p;
> IsSelfReciprocal(х^5-3*х^4+х^3+х^2-3*х+1, x, 'p');
> p;
> r := evalf(1+sqrt(2));
Функция MinimalPolynomial(r, n, acc) возвращает полином минимальной степени не превышающей n, имеющий корень r. Необязательный аргумент acc задает погрешность приближения. Функция MinimalPolynomial(r, n) использует решетчатый алгоритм и находит полином степени n (или менее) с наименьшими целыми коэффициентами. Корень r может быть действительным или комплексным. Результат зависит от значения переменной окружения Digits. По умолчанию acc задано как 10^(Digits-2). Примеры применения данной функции:
> MinimalPolynomial(r, 2);
> r := 1+sqrt(2);
> ( r, 2 );
> MinimalPolynomial( 1.234, 3 );
> fsolve( %, X );
Функция Split(a, х, b) служит для расщепления полинома а с независимой переменной х. Параметр b — не обязательный. Функция Split(a, х) осуществляет комплексную факторизацию инвариантного полинома а по х. Если третий аргумент b задан, он представляет множество элементов {t1, … ,tm}, таких что полином а расщепляется над K=Q(t1, …, tm), где Q означает поле рациональных чисел.
Примеры:
> Split(х^2+х+1,х);
> Split(х^2+у*х+1+у^2, x, 'b');
> b;
В пакете определена еще одна подобная функция Splits, с которой можно познакомиться по справке на нее.
Функция Translate(a, х, х0) преобразует полином а(х) с подстановкой х=х+х0, где х0 — константа. Примеры применения этой функции даны ниже:
> Translate(х^2, х, 1);
> expand(eval(х^2,х=х+1));
> Translate(х^3,х,2);
> expand(eval(х^3,х=х+2));
> Translate((х+1)^3,х,-1);
5.5.3. Функции сортировки полиномов
Для
Shorter(f, g, х)
Sort(v, х)
Shorten(f, x)
Здесь f и g полиномы, v — список полиномов и x — независимая переменная. Функции отличаются характером сортировки.
Функция Shorter определяет полином f как более короткий, чем g, по следующим признакам: меньшая длина, меньшее имя независимой переменной х, не дробный и меньшая степень других переменных. Функция Sort сортирует лист полиномов х по признакам, определяемым Shorter. Функция Shorten использует преобразования Мёбиуса. Многочисленные детали ее применения можно найти в справке по данной функции. Примеры применения функций сортировки:
> Shorten(х^2+х+1,х);
> Shorten(3*х^3+18*х+14,х);
> Shorten(х^4+32);
> Shorter(х^3,х+5,х);