> evala(AFactor(х^2+2*у^2));
> expand((x-1) * (x-2) * (x-3) * (x-4));
> AFactor(%);
> evala(%);
> expand((x-1+I*2)*(x+1-I*2)*(x-3));
> evala(AFactor(%));
> evala(AFactors(х^2-2*у^2));
Нетрудно заметить, что разложение полинома на множители позволяет оценить наличие у него корней. Однако для этого удобнее воспользоваться специальными функциями, рассмотренными ниже.
5.3.7. Вычисление корней полинома
Для вычисления действительных и комплексных корней полиномов служит уже известная нам функции solve(p, x), возвращающая список корней полинома p одной переменной. Кроме того, имеются следующие функции для вычисления корней полиномов:
roots(р)
roots(р, K)
roots(р, х)
roots(р, x, K)
Эти функции вычисляют точные корни в рациональной или алгебраической области чисел. Корни возвращаются в виде [[r1,m1], [rn, mn]], где mi — это корень полинома, a mi — порядковый номер полинома. С действиями этих функций можно разобраться с помощью приведенных ниже примеров:
> р:=х^4 1-9*х^3+31*х^2+59*х+60;
> solve(р,х);
> roots(р,х);
> roots(х^2-4,х);
> expend((х-1)*(х-2)*(х-3)*(х-4));
> roots(%,х);
5.3.8. Основные операции с полиномами
С полиномами могут выполняться различные операции. Прежде всего, отметим некоторые функции, которые относятся к одному полиному:
psqrt(p) — возвращает квадрат полинома;
proot(p,n) — возвращает n-ю степень полинома;
realroot(p) — возвращает интервал, в котором находятся действительные корни полинома;
randpoly(vars, eqns) — возвращает случайный полином по переменным vars (список) с максимальной степенью eqns;
discrim(p, var) — вычисление дискриминанта полинома по переменной var;
Primitive(a) mod p — проверка полинома на примитивность (возвращает true, если полином примитивен).
Действие этих функций достаточно очевидно, поэтому ограничимся приведением примеров их использования (файл polop):
> psqrt(х^2+2*х*у+у^2);
> proot(х^3+3*х^2+3*х+1, 3);
> psqrt(x+y);
> proot(x+y, 2);
> р:=х^3-3*х^2+5*х-10;
> discrim(p,x);
> readlib(realroot):
> realroot(p);
> randpoly([x],degree=10);
> randpoly([x],degree=10);
> randpoly([x],degree=10);
> Primitive(х^4+х+1) mod 2;
Обратите внимание на то, что для использования некоторых из приведенных функций необходим вызов их из стандартной библиотеки. Для функции randpoly приведенные результаты случайны, так что, скорее всего, их повторение невозможно.
С полиномами можно выполнять обычные операции, используя для этого соответствующие операторы:
> readlib(psqrt):
> readlib(proot):
> Primitive(х^4+х+1) mod 2;
> p1:=a1*x^3+b1*x^2+c1*x+d1: p2:=а2*х^2+b2*х+с2:
> p1+p2;