Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Mathematica / Глава 4. Евклидовы и факториальные кольца

.pdf
Скачиваний:
65
Добавлен:
30.05.2015
Размер:
273.04 Кб
Скачать

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 +x2

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

Соседние файлы в папке Mathematica