
Mathematica / Глава 4. Евклидовы и факториальные кольца
.pdf
r6 = PolynomialRemainder[r4, r5, x]
1 272 943 070 806 564 261 |
- |
103 051 366 981 906 031 x |
- |
10 141 289 265 339 652 563 x2 |
13 664 195 416 883 200 |
1 115 444 523 827 200 |
54 656 781 667 532 800 |
r7 = PolynomialRemainder[r5, r6, x]
−126501666385563244213043200 − 126501666385563244213043200x 124265326150557573927519717 124265326150557573927519717
r8 = PolynomialRemainder[r6, r7, x]
0
Simplify[r7]
501 666 385 563 244 213 043 200 1 +x |
|
-126124 265 326 150 557 573 927 519 717H |
L |
PolynomialGCD[u, v]
1 + x
Очевидно, r7 является также по определению наибольшим общим делителем многочленов u и v, но Mathematica выдает нормированный многочлен.
Последовательность многочленов r1, r2, r3, …, 0 в алгоритме Евклида называется последовательностью
полиномиальных остатков.
Рост коэффициентов последовательности полиномиальных остатков может быть минимизирован,
если каждый член, как только он получен, нормируется. Определим функцию для определения старшего коэффициента
lc[poly_, x_] := Coefficient[poly, x, Exponent[poly, x]]
И очередной полиномиальный остаток будет вычисляться по
|
H |
|
|
|
|
@ |
|
|
D |
|
предыдущим остаткам следующим образом |
@ |
|
D |
DDL |
||||||
rk+2 = |
|
@ |
@ |
@ |
@ |
DD ê |
, x |
|||
|
p = |
PolynomialRemainder rk, rk+1 |
|
; |
||||||
Expand If Not SameQ p, 0 |
, p |
lc p, x |
|
, p |
Встроенная функция SameQ[p, 0] проверяет, является ли многочлен p нулевым.

Таким образом, для данных многочленов u и v мы получаем последовательность полиномиальных остатков
5 +15 x +4 x2 -9 x3 +6 x4 +4 x5 -4 x6 +x7
-1314 - 14639 x - 5339x2 |
+ 9439x3 |
- 4139x4 |
- 1513x5 |
+x6 |
|
|
|||||||||||
896981 + 2749896 x |
2 |
|
|
|
3 |
|
|
4 |
|
|
|
|
|
|
|||
+ 1965896x |
- 99224x + |
303896x +x5 |
|
|
|
|
|
||||||||||
|
|
|
|
|
|
103 125 |
|
48 323 x |
|
213 971 x2 |
|
81 932 x3 |
|||||
|
|
|
|
|
- |
19 409 |
|
+ |
19409 |
+ |
19 409 |
+ |
19 409 +x4 |
||||
- |
684 517 |
+ |
2 529 523 x |
+ |
851 133 x2 |
+x3 |
|
|
|
|
|
|
|||||
172 585 |
|
690 340 |
|
98 620 |
|
|
|
|
|
|
|
||||||
|
79 978 996 |
|
79 315 271 |
x |
+x2 |
|
|
|
|
|
|
|
|||||
- |
159 294 267 |
+ 159294 267 |
|
|
|
|
|
|
|
|
|||||||
1 + x |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Действительно, мы видим, что коэффициенты растут медленнее, но расплачиваемся за это вычислением gcd целых чисел на каждом шаге, чтобы максимально редуцировать дроби.
Заметим, что многочлены u и v на самом деле принадлежат кольцу Z[x] и gcd(u, v) также принадлежит кольцу Z[x].
Пока мы еще не рассмотрели вопрос: всегда ли существует наибольший общий делитель для элементов кольца Z[x]?
Кольцо Z[x] не является евклидовым и нельзя применить теорему 2.6.
Забегая вперед, предположим, что в кольце Z[x] всегда существует наибольший общий делитель.
Но из предыдущего примера видно, что использовать арифметику рациональных чисел для вычисления gcd в Z[x] нецелесообразно; с одной стороны, число требуемых для максимального редуцирования коэффициентов вычислений gcd целых чисел слишком велико, и с другой стороны, отказ от редукции ведет к стремительному росту выражения. Мы вернемся к этому вопросу.

Используя расширенный алгоритм Евклида, мы можем найти не только наибольший общий делитель двух многочленов в Q[x], но и дополнительные многочлены, входящие в соотношение Безу.
В системе Mathematica имеется соответствующая функция PolynomialExtendedGCD.
Расширенный gcd многочленов f(x) и g(x) относительно переменной x есть такой список {d,{r, s}}, что d = gcd(f, g)
и f r + g s = d:
{f, g} = {2 x^5 – 2 x, (x^2 – 1)^2};
{d, {a, b}} = PolynomialExtendedGCD[f, g, x]
-1 +x2,
4x , 14
-4 -2 x2
Expand[a f + b g == d]
True

Полиномы могут иметь символьные коэффициенты: f = 2 a (x^2 – 1)^2 (x^3 – 2);
g = 4 a (x – 1)^3 (x^2 – 3);
{d, {r, s}} = PolynomialExtendedGCD[f, g, x]
:1 -2 x +x2, :- |
|
736 a |
, - |
1472 a |
+42 x4 |
>> |
|
166 |
-32 x -42 x2 |
|
-12 +188 x +224 x2 +158 x3 |
|
Наибольший общий делитель вычисляется с точностью до множителя, не содержащего x.
PolynomialGCD[f, g]
2 a -1 +x
2
PolynomialExtendedGCD[(x – a)(b x – c)^2, (x – a)(x^2
– b c), x] |
-2 b3 c3 +c4 , |
b6 c2 -2 b3 c3 +c4 |
>> |
:-a +x, :b6 c2 |
|||
b3 c |
+c2 +2 b c x |
-b5 c +3 b2 c2 -2 b3 c x |
|

Задача 2.11. Для трех многочленов a = (x – 2) (x –1);
b = (x – 1)^2 (x^3 + 3); c = (x –1) (x^2 – 7);
найти такие многочлены f и g, чтобы выполнялось равенство f a + g b = c.
Решение. Найдем расширенный gcd
{d, {r, s}} = PolynomialExtendedGCD[a, b, x]
:-1 +x, :111 I-7 -2 x -x2 -x3M, 111 >>
Решение существует, если c делится на d. h = Expand[c / d]
– 7 + x2
{f, |
g} = h {r, s} |
I-7 +x2M> |
:111 |
I-7 +x2MI-7 -2 x -x2 -x3M, 111 |

Проверка:
Expand[f a + g b == c]
True
Задача 2.12. Имеется дробь |
|
||||||||
e1 = |
|
J |
|
1 |
+ |
2 2ê3 |
|
N ê |
|
|
1 + |
1 + |
J2 |
N ê |
J |
2 |
|||
|
|
1 3 |
+N1 + |
|
2 3 |
содержащая алгебраическое иррациональное число
α = 3 |
1 + 2 . |
Преобразовать дробь так, чтобы иррациональность исчезла из знаменателя.
Решение. Определим два многочлена h, g Q[x]:
h[x_] := x^2;
g[x_] := x + x^2 +1;
Теперь дробь e1 есть значение дробно-рациональной функции h(x)/g(x) при x = α.
Далее мы снова собираемся воспользоваться соотношением Безу в расширенном алгоритме Евклида.
Найдем многочлен f Q[x], для которого число α является корнем.
После этого применим к многочленам f и g расширенный алгоритм Евклида. Если f и g будут взаимно просты, то задача легко решается.
Действительно, пусть f u + g v = 1 – полученное
соотношение Безу. Имеем тогда |
|
||||||
|
h(α) |
= |
h(α)v(α) |
= |
|
h(α)v(α) |
= h(α)v(α), |
|
g(α) |
g(α)v(α) |
1 − f (α)u(α) |
||||
|
|
|
|
так как f(α) = 0.
Проделаем это в Mathematica. Многочлен f можно найти при помощи встроенной функции для нахождения минимального многочлена:
f = MinimalPolynomial[α, x]
-1 -2 x3 +x6
Проверка подтверждает правильность нахождения многочлена.
Expand[f /. x → α]
0
Теперь надо убедиться, что многочлены f и g взаимно просты.
PolynomialGCD[f, g[x]]
1
Применяем расширенный алгоритм Евклида для f и g.
{d, {u, v}} = PolynomialExtendedGCD[f, g[x], x]
:1, :-12 , 12 I1 -x -x3 +x4M>>