Недавно мы с
mancunianом обсуждали его замечательный фрактал, который теперь стал его юзерпиком. В этом контексте возникло уравнение
x^3 - x + 1/3 = 0,
корень которого участвует в формуле, и было бы желательно поиметь его в какой-либо удобной форме. ("Поручик, молчать!") Если применить общую формулу Кардано, то получается отталкивающее нагромождение вложенных радикалов, с пестрящими тут и там мнимыми единицами. В то же время, это уравнение имеет три вещественных корня, выражающиеся через числа вида cos(k*Pi/9). Чтобы установить это, нужно сделать отнюдь не очевидную "тригонометрическую" подстановку (попытайтесь найти сами, не заглядывая
на страницу mancunianа). Возникает вопрос, существует ли систематический метод решения таких уравнений?
Прежде всего, какие уравнения решаются "в косинусах"? Поскольку cos(2*Pi/n) это вещественная часть примитивного корня E(n) n-й степени из 1, корень уравнения, решаемого "в косинусах", лежит в некотором поле деления круга (т.к. cos(2*Pi/n)=(E(n)+E(n)^(-1))/2). Объединение же полей деления круга -- это максимальное абелево расширение поля рациональных чисел. Стало быть, в терминах косинусов и первообразных корней можно решить любое уравнение с абелевой группой Галуа. (Группа Галуа уравнения -- это то, что выдаёт Maple по команде galois :-) Конечно, абелевы группы разрешимы, так что такое уравнение всегда решается в радикалах, но получающиеся выражения, как правило, являются очень громоздкими по сравнению с линейными комбинациями нескольких косинусов.
Я подумал, что, возможно, кто-нибудь захочет научиться решать такие уравнения явно. А посему:
Описание метода и примеры.
Сейчас перечислю те факты, которые нам понадобятся.
Пусть дан многочлен p(x) от одной переменной с коэффициентами из поля рациональных чисел Q, имеющий абелеву группу Галуа G.
A. Поле деления круга CF(m) (циклотомическое поле) порождается корнем m-й степени из 1. Это поле имеет базис над Q, состоящий из первообразных корней m-й степени из 1. Этих корней ровно phi(m), т.е. равно количеству натуральных чисел, меньших m и взаимно простых с m. Например, при m=8, если E(8)=exp(2*Pi*I/8), то базис поля CF(8) над Q составляют числа E(8), E(8)^3, E(8)^5, E(8)^7. Показатели степени -- как раз и есть все числа, меньшие 8 и взаимно простые с 8. (Благодарю
posic, который обратил моё внимание на ошибку в этом месте.)
Update: В качестве базиса поля CF(m) над Q можно выбрать элементы E(m), E(m)^2, ..., E(m)^phi(m), где E(m)=exp(2*Pi*I/8) -- первообразный корень степени m из 1. (Это следует из того, что E(m) есть корень неприводимого кругового многочлена Ф_m(x) степени phi(m).)
B. По теореме Кронекера-Вебера, корни многочлена p(x) с абелевой группой Галуа порождают подполе k в некотором поле деления круга CF(m). Значит, группа Галуа G многочлена p будет факторгруппой группы Галуа некоторого поля CF(m).
C. Группа Галуа поля деления круга CF(m) равна группе (Z/mZ)* обратимых элементов кольца вычетов Z/mZ (относительно умножения). При этом вычет k+mZ задаёт автоморфизм s(k), который на базисных элементах действует по формуле: E(m)-->E(m)^k, а на остальные элементы поля продолжается по линейности. Для нечётных m=p^k группа (Z/mZ)* циклическая порядка p^(k-1)*(p-1), то есть, порождается одним элементом, называемым примитивным корнем по данному основанию.
D. Числовое поле алгебраических чисел можно вложить в пространство матриц степени, равной размерности поля над Q, если отождествить порождающий элемент поля с некоторой матрицей. Эту матрицу можно выбрать равной присоединённой матрице к многочлену, задающему алгебраическое число (фробениусова клетка). Такой подход позволяет вычислять минимальный многочлен алгебраического числа средствами линейной алгебры.
Метод состоит в последовательном рассмотрении подходящих циклотомических полей-кандидатов CF(m) и выяснения вопроса, может ли в таком поле содержаться корень данного уравнения:
1. Генерируем список полей-кандидатов вида CF(m). Это такие поля, у которых группа Галуа Г=(Z/mZ)* содержит факторгруппу, изоморфную G. Для циклических G достаточно, чтобы порядок Г (число элементов в Г) делился на порядок циклической группы G.
2. Если CF(m) -- такое поле, то мы находим подгруппу H в Г, такую что факторгруппа Г/H изоморфна G.
3. После чего строим подполе K неподвижных элементов относительно подгруппы H. Группа Галуа K/Q как раз будет равна G.
Мы надеемся, что поле K совпадает с полем k разложения многочлена p. Чтобы проверить это:
4. Выберем базис в K,
и будем проверять, существует ли линейная комбинация элементов базиса, дающая число с минимальным многочленом, равным p. Для этого:
5. Находим присоединённую матрицу для порождающего элемента поля CF(m) и выражаем элементы базиса поля K через эту матрицу (строим соответствующие линейные комбинации, где вместо E(m) стоит присоединённая к этому корню матрица).
6. Записываем линейную комбинацию базисных элементов поля K (соответствующих им матриц) с неопределёнными коэффициентами. Это будет общий вид элемента поля K. Теперь надо установить, может ли элемент такого вида иметь минимальный многочлен равный p(x).
7. Берём минимальный многочлен от элемента общего вида и приравниваем к многочлену p(x) покоэффициентно. Получаем систему нелинейных полиномиальных уравнений.
8. Решаем её методами, использующими базисы Грёбнера. Системы здесь получаются такие, что этот шаг не вызывает проблем. Если полученные решения рациональны, то система разрешима и K=k, иначе -- надо выбрать другую подгруппу H, а если уже все подгруппы рассмотрены, то другое поле-кандидат CF(m), и перейти к п. 2.
9. Если система имеет рациональные решения, то любое из этих решений задаёт коэффициенты линейной комбинации, которая выражает корни многочлена p(x) через базисные элементы поля K, а значит, через первообразные корни. Если базис поля K оказывается устойчивым относительно комплексного сопряжения, то корни многочлена p(x) можно выразить через косинусы углов, соизмеримых с Pi.
Благодаря теореме Кронекера-Вебера, нам рано или поздно повезёт, и наш поиск завершится успешно.
Посмотрим на примере, как это работает. Будем указывать соответствующие команды системы символьных вычислений Maple.
Для начала подключим все необходимые пакеты:
> with(numtheory):with(linalg):with(grobner):with(group):
Наш многочлен, задающий уравнение:
> p:=x^3-x+1/3;
Найдём его группу Галуа G:
> galois(p);
"3T1", {"A(3)"}, "+", 3, {"(1 2 3)"}
Мы видим, что это циклическая группа Z/3Z из трёх элементов, стало быть, она абелева. (Кто сомневается, может это проверить, задав команду:
> isabelian(permgroup(3,{[[1,2,3]]}));
true
В фигурных скобках мы пишем циклы, которыми задаётся группа -- то, что вернула команда galois() на последнем месте.)
Теперь надо составить список циклотомических полей-кандидатов, группы Галуа которых могут содержать циклическую группу порядка 3. Порядок группы (Z/mZ)* равен phi(m) -- количеству натуральных чисел, меньших чем m и взаимно простых с m. Для каких малых m phi(m) делится на 3?
> lst:=[]:for i to 30 do if phi(i) mod 3=0 then lst:=[op(lst),i]:fi:od:lst;
[7, 9, 13, 14, 18, 19, 21, 26, 27, 28]
Это те значения m, циклотомические поля которых мы будем проверять.
Итак, пойдём по порядку. Пусть сначала m=7.
Поле CF(7) имеет размерность phi(7)=6 над Q и натянуто на базисные элементы: E(7), E(7)^2, E(7)^3, E(7)^4, E(7)^5, E(7)^6. (E(7) -- первообразный корень 7-й степени из 1.). Его группа Галуа Г=(Z/7Z)* есть циклическая группа порядка 6, состоящая из автоморфизмов s(i), которые на базисных элементах действуют возведением в степень i. Образующая s этой циклической группы соответствует примитивному корню по модулю 7:
> primroot(7);
3
то есть, задаётся на базисных элементах так: s: a->a^3. Нас интересует подгруппа H, такая что Г/H = G(=Z/3Z). Такая подгруппа в Г единственна, она порождается элементом s^3 = s o s o s, который имеет порядок 2 и на базисных элементах действует по правилу: a -> ((a^3)^3)^3 = a^27 = a^6 (мы учитываем, что a^7=1).
Найдём теперь подполе K неподвижных точек относительно H. Для этого посмотрим, как элемент s^3 действует на базисных элементах:
E(7) <--> E(7)^6
E(7)^2 <--> E(7)^5
E(7)^3 <--> E(7)^4
Значит, поле неподвижных точек K (имеющее степень 3 над Q) натянуто на элементы
E(7) + E(7)^6, E(7)^2 + E(7)^5, E(7)^3 + E(7)^4,
которые являются корнями некоторого неприводимого многочлена степени 3.
Проверим теперь, совпадает ли K с полем разложения многочлена p. Для этого вложим K в кольцо матриц. Зададим матрицу для числа E(7):
> m:=companion(cyclotomic(7,x),x):
Очевидно, мы можем взять в качестве примитивного элемента поля K любой из трёх элементов базиса, пусть это будет E(7) + E(7)^6:
> M:=m+m^6:
Поле K имеет базис над Q из элементов (id, M, M^2), где id -- единичная 6х6-матрица. Произвольный элемент поля K имеет вид: a*id + b*M + c*M^2 для некоторых рациональных чисел a,b,c. Попробуем найти такой элемент с минимальным многочленом, равным p.
> id:=array(identity,1..6,1..6):
> A:= a*id + b*M + c*M^2:
> f:=minpoly(A,x);
3 2 2 2 2 2 3 3
f := -b + b c + 2 b a + c a b + a b + 2 c b - 6 c a - c - a
2 2 2 2
- 5 c a + (-2 b - b c - 2 b a + 6 c + 3 a + 10 c a) x
2 3
+ (b - 3 a - 5 c) x + x
Теперь надо установить, существуют ли такие рациональные a,b,c, что f равен нашему многочлену p. Для этого приравняем коэффициенты:
> S:=[seq(coeff(f,x,i)=coeff(p,x,i),i=0..degree(f)-1)];
3 2 2 2 2 2 3
S := [-b + b c + 2 b a + c a b + a b + 2 c b - 6 c a - c
3 2
- a - 5 c a = 1/3,
2 2 2
-2 b - b c - 2 b a + 6 c + 3 a + 10 c a = -1,
b - 3 a - 5 c = 0]
Решим полученную систему с использованием базисов Грёбнера:
> sol:=gsolve(S,[a,b,c]);
3 2
sol := [[[49 b - 21 b + 4, 6 a + 35 b + 13 b - 10,
2
2 c - 7 b - 3 b + 2], plex(c, a, b), {}], [[
3 2 2
49 b - 21 b + 5, 3 a - 35 b - 11 b + 10, c + 7 b + 2 b - 2
], plex(c, a, b), {}]]
Как легко видеть, многочлены 49b^3 - 21b + 4 и 49b^3 - 21b + 5 рациональных корней не имеют:
> roots(sol[1][1][1]);roots(sol[2][1][1]);
[]
[]
Это означает, что в поле K нет элемента с минимальным многочленом p. Значит, наше поле k не вкладывается в CF(7). Надо опробовать другие значения m.
Следующее значение m=9.
Поле CF(9) имеет размерность phi(9)=6 над Q и натянуто на базисные элементы: E(9), E(9)^2, E(9)^3, E(9)^4, E(9)^5, E(9)^6 (показатели -- числа от 1 до phi(9)=6). Группа Галуа снова изоморфна циклической группе порядка 6, которая порождается автоморфизмом s, действующим на базисных элементах возведением в степень primroot(9)=2. Подгруппа H индекса 3 порождается третьей итерацией элемента s, s^3: a -> ((a^2)^2)^2 = a^8 = a^-1. Поле K неподвижных элементов относительно H определяется исходя из того, как s^3 действует на базисные элементы:
E(9) <--> E(9)^8 = - E(9)^2 - E(9)^5
E(9)^2 <--> E(9)^7 = - E(9) - E(9)^4
E(9)^3 <--> E(9)^6
E(9)^4 <--> E(9)^5
Стало быть, К линейно порождается элементами:
E(9) + E(9)^8, E(9)^2 + E(9)^7, E(9)^3 + E(9)^6, E(9)^4 + E(9)^5
Поскольку подгруппа H имеет индекс 3, размерность поля K над Q также равна 3, и мы видим из приведённых выше разложений, что последний элемент E(9)^4 + E(9)^5 линейно выражается через первые два. Стало быть, в качестве базиса поля K можно взять первые три элемента:
E(9) + E(9)^8, E(9)^2 + E(9)^7, E(9)^3 + E(9)^6
Снова вкладываем поле K в матрицы. Сначала E(9):
> m:=companion(cyclotomic(9,x),x):
Теперь любой из элементов базиса K, пусть это будет E(9)+E(9)^8:
> M:=m+m^8:
Записываем произвольный элемент поля K в виде: a*id + b*M + c*M^2 для рациональных чисел a,b,c:
> A:= a*id + b*M + c*M^2:
> f:=minpoly(A,x);
2 2 3 3 2 2 3
f := 3 b a - 3 c a b - 3 c b + b - a - 6 c a - 9 c a - c
2 2 2 2 3
+ (-3 b + 3 b c + 3 a + 12 c a + 9 c ) x + (-3 a - 6 c) x + x
Проверим, существует ли в K элемент с минимальным многочленом p:
> S:=[seq(coeff(f,x,i)=coeff(p,x,i),i=0..degree(f)-1)];
2 2 3 3 2 2 3
S := [3 b a - 3 c a b - 3 c b + b - a - 6 c a - 9 c a - c =
2 2 2
1/3, -3 b + 3 b c + 3 a + 12 c a + 9 c = -1,
-3 a - 6 c = 0]
> sol:=gsolve(S,[a,b,c]);
3 2 2
sol := [[[27 b - 9 b + 1, 3 a - 18 b + 4, 3 c + 9 b - 2],
plex(c, a, b), {3 b + 2}],
[[-1 + 3 b, 3 a - 2, 3 c + 1], plex(c, a, b), {}],
[[-1 + 3 b, 3 a + 4, 3 c - 2], plex(c, a, b), {}],
[[3 b + 2, 3 a - 2, 3 c + 1], plex(c, a, b), {}]]
Мы видим, что решения в рациональных числах существуют!
> solve({seq(sol[2][1][i+1]=0,i=0..degree(f,x)-1)},{a,b,c});
{c = -1/3, b = 1/3, a = 2/3}
Найдём теперь корни уравнения p. Для этого составим линейные комбинации базисных элементов поля K с найденными коэффициентами:
> e:=exp(2*Pi*I/9):
> t:=[e+e^8,e^2+e^7,e^4+e^5]:
> x:=map(y->2/3 + 1/3*y - 1/3*y^2,t):
> map(y->Re(expand(y)),x);
[2/3*cos(2/9*Pi)-2/3*cos(4/9*Pi), 2/3*cos(4/9*Pi)+2/3*cos(1/9*Pi), -2/3*cos(1/9*Pi)-2/3*cos(2/9*Pi)]
Ура! Наши усилия увенчались победой! Это и есть решения нашего исходного уравнения! Их можно ещё свернуть в произведение двух косинусов, один из которых вычислится явно, но у меня не получилось заставить Maple сделать это.
Этот метод можно без большого труда запрограммировать. Самое сложное здесь -- это правильно генерировать все подгруппы H, особенно когда они не циклические...
Если непонятно что, пишите!