> evala(AFactor(х^2+2*у^2));

(х - RootOf(_Z² + 2)y) (x + RootOf(_Z² + 2)y)

> expand((x-1) * (x-2) * (x-3) * (x-4));

x4 - 10 x3 + 35 x2 - 50 x + 24

> AFactor(%);

AFactor(x4 - 10 x3 + 35 x2 - 50 x + 24)

> evala(%);

(x-1)(x-2)(x-3)(x-4)

> expand((x-1+I*2)*(x+1-I*2)*(x-3));

x³ - 3x² + 3x - 9 + 4 I x-12 I

> evala(AFactor(%));

(x - 3)(x² + 3 + 4I)

> evala(AFactors(х^2-2*у^2));

[1, [[x - RootOf(_Z² - 2)y, 1], [x + RootOf(_Z² + 2)y, 1]]]

Нетрудно заметить, что разложение полинома на множители позволяет оценить наличие у него корней. Однако для этого удобнее воспользоваться специальными функциями, рассмотренными ниже.

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;

р:=х4 + 9х3 + 31х2 + 59 х + 60

> solve(р,х);

-3, -4, -1 + 2I, -1-2I

> roots(р,х);

[[-4, 1], [-3, 1]]

> roots(х^2-4,х);

[[2, 1], [-2, 1]]

> expend((х-1)*(х-2)*(х-3)*(х-4));

х4 -10х3 +35х2 - 50 х + 24

> roots(%,х);

[[1, 1], [2, 1], [3, 1], [4, 1]]

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);

у + x

> proot(х^3+3*х^2+3*х+1, 3);

x+1

> psqrt(x+y);

_NOSQRT

> proot(x+y, 2);

_ NOROOT

> р:=х^3-3*х^2+5*х-10;

p:=x³ - 3x² + 5x - 10

> discrim(p,x);

-1355

> readlib(realroot):

> realroot(p);

[[0, 4]]

> randpoly([x],degree=10);

63x10 + 57x8 - 59x5 + 45x4 - 8x3 - 93

> randpoly([x],degree=10);

-5x9 + 99x8 - 61x6 - 50x5 - 12x3 - 18x

> randpoly([x],degree=10);

41x9 - 58x8 - 90x7 + 53x6 - x4 + 94x

> Primitive(х^4+х+1) mod 2;

true

Обратите внимание на то, что для использования некоторых из приведенных функций необходим вызов их из стандартной библиотеки. Для функции randpoly приведенные результаты случайны, так что, скорее всего, их повторение невозможно.

С полиномами можно выполнять обычные операции, используя для этого соответствующие операторы:

> readlib(psqrt):

> readlib(proot):

> Primitive(х^4+х+1) mod 2;

true

> p1:=a1*x^3+b1*x^2+c1*x+d1: p2:=а2*х^2+b2*х+с2:

> p1+p2;

a1х³ + b1х² + c1x + d1 + a2x² + b2х + с2
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату