/
Author: Дэвенпорт Дж. Сирэ И. Турнье Э.
Tags: алгебра компьютерная алгебра алгоритмы вычисления
ISBN: 5-03-001658-9
Year: 1991
Text
collection coordonnee par J.BERSTEL
Calcul formel
Systemes et algorithmes
de manipulations algebriques
J. Davenport
Professeur d'informatique titulaire de la Chaire Hebron et Meddock
a I'Universite de Bath
Y. Siret
Directeur technique du Centre Interuniversitaire
de Calcul de Grenoble
E. Tournier
Maftre de Conference en informatique a I'Universite
scientifique et medicate de Grenoble
Introduction du Pr. D. Lazard
MASSON
Paris New York
Barcelone Milan Mexico
Sao Paulo
1987
etudes et recherches en informatique
m
Дж.Дэвенпорт, И.Сирэ, Э.Турнье
Компьютерная
алгебра
Системы и алгоритмы
алгебраических вычислений
Перевод с французского
Е.В. Панкратьева
под редакцией
А. В. Михалёва
i
Москва «Мир» 1991
ББК 22.14 + 22.19
Д13
УДК 512 + 519.9
Дэвенпорт Дж., Сирэ И., Турнье Э.
Д13 Компьютерная алгебра: Пер. с франц. - М.: Мир, 1991. -
352 с, ил.
ISBN 5-03-001658-9
Книга французских специалистов, охватывающая различные
вопросы компьютерной алгебры: проблему представления
данных, полиномиальное упрощение, современные алгоритмы
вычисления НОД полиномов и разложения полиномов на множители,
формальное интегрирование, применение систем компьютерной
алгебры. Первый автор знаком читателю по переводу его книги
"Интегрирование алгебраических функций" (М.: Мир, 1985).
Для математиков-прикладников, механиков, физиков,
разработчиков и пользователей систем компьютерной алгебры.
д 1602120000—278 29—90 ББК 22.14 + 22.19
041@1)—91
Редакция литературы по математическим наукам
ISBN 5-03-001658-9 (русск.) © Masson, Paris, 1986
ISBN 2-225-80990-9 (франц.) (D перевод на русский
язык, Е. В. Панкратьев,
1991
ОТ РЕДАКТОРА ПЕРЕВОДА И ПЕРЕВОДЧИКА
Монография Дж. Дэвенпорта, И. Сирэ и Э. Турнье вышла на
французском языке в издательстве Masson в 1987 г. и сразу
же привлекла внимание специалистов в области компьютерной
алгебры и большой армии пользователей систем символьных
вычислений. Фактически это - одна из первых монографий по
компьютерной алгебре, хотя в журнальной литературе данная
область представлена весьма основательно. В книге удачно
сочетаются алгоритмические аспекты основных задач
компьютерной алгебры и инструкции по использованию наиболее
распространенных систем символьных вычислений. Системы MACSYMA
и REDUCE описаны достаточно подробно, чтобы начинающий
пользователь мог составить представление о их возможностях
и приобрел некоторые навыки работы с ними. Краткие сведения
о других системах, прежде всего о системе SCRATCHPAD, дают
представление о направлениях развития систем компьютерной
алгебры и проблемах, связанных с их разработкой. Основные
алгоритмы проанализированы достаточно глубоко, чтобы
читатель мог освоиться с используемым математическим аппаратом.
Формулировки новейших достижений и нерешенных проблем,
приведенные в книге, будут, по нашему мнению, стимулировать
дальнейшие исследования.
В 1988 г. вышел перевод данной книги на английский язык.
Его выполнили один из авторов, Дж. Дэвенпорт, и
А. Дэвенпорт. Основные отличия английского издания от
французского заключаются в следующем: добавлено несколько
примечаний в тексте и полностью переработано приложение
"Описание системы REDUCE" - это описание соответствует более
поздней версии системы REDUCE-3.2. Все эти изменения учтены
6 От редактора перевода и переводчика
в русском переводе. В русском издании добавлен также
дополнительный список литературы, включающий отдельные работы, в
основном монографии и тематические сборники, появившиеся за
рубежом после выхода оригинала этой книги, а также
литературу на русском языке, относящуюся к данному направлению и
совершенно не представленную в книге.
Системы компьютерной алгебры продолжают
совершенствоваться. Увеличение мощностей вычислительной техники привело
к более быстрому развитию больших систем аналитических
вычислений с широкими графическими возможностями и развитым
символьно-численным интерфейсом. Разработчик системы muMATH
прекратил работу по ее развитию, создав новую систему
DERIVE. Активно развивается система SCRATCHPAD-2. Пополняются
библиотеки системы REDUCE. Переносится на новые типы
компьютеров и широко применяется система MACSYMA. Реализованы
новые версии системы MAPLE. Вышло большое число новых
систем: MATHEMATICA, CoCoa, AlPi и др., причем система МАТНЕ-
MATICA быстро выдвинулась на ведущие позиции в области
применений компьютерной алгебры. Появилось большое количество
новых публикаций, включая монографии, учебные пособия,
тематические сборники и многочисленные статьи. Частично это
нашло отражение в списке дополнительной литературы, а также
в примечаниях переводчика. Состоялись международные
конференции EUROCAL-87, JSSAC-8, ISSAC-9, Computers and
Mathematics [42], [46] - [47], [58] и др.
Первые работы по компьютерной алгебре в СССР появились
примерно в то же время, что и за рубежом, более 30 лет
назад - см., например, [27]. Вопросы аналитических вычислений
на ЭВМ обсуждались на конференцях в Тбилиси в 1970 г., в
Харькове в 1972 г. [9], в Новосибирске в 1980 г. и на
многих других конференциях, симпозиумах, совещаниях. Среди них
следует выделить Международные совещания по аналитическим
вычислениям на ЭВМ и их применениям в теоретической физике,
проводившиеся ОИЯИ в Дубне в 1980, 1983, 1985 и 1990 гг.
[3-6], конференции 1984 г. в Вильнюсе [33] и Горьком [32],
конференцию в Юрмале в 1987 г., школу по аналитическим
вычислениям и их применению в механике, состоявшуюся в 1988 г.
Компьютерная алгебра 7
на Клязьме, школы по компьютерной алгебре 1989 г. в Рахове.
Несколько лет подряд в период зимних студенческих каникул
семинар по компьютерной алгебре с участием специалистов из
разных городов проводится на механико-математическом
факультете МГУ. Секции компьютерной алгебры работали на
многих всесоюзных и международных конференциях, в частности,
на Всесоюзной алгебраической конференции в 1985 г. в
Кишиневе, на Международной конференции по алгебре и логике в
Новосибирске в 1989 г. и многих других. Координация
деятельности ученых социалистических стран осуществляется
рабочей группой 24 КНВВТ (Комиссия многостороннего
сотрудничества академий наук социалистических стран по проблеме
«Научные вопросы вычислительной техники») по компьютерной
аналитике.
В своей деятельности советские специалисты активно
используют как зарубежные системы компьютерной алгебры
(REDUCE, SAC-2, muMATH и др.), так и отечественные
разработки. Здесь в первую очередь следует отметить язык для
аналитических вычислений "Аналитик", разработанный в
Институте Кибернетики им. В. М. Глушкова АН УССР [13] и системы,
созданные на базе алгоритмического языка Рефал. Подробный
обзор отечественных систем компьютерной алгебры выполнен в
статье [19].
Советские ученые внесли также заметный вклад в
разработку алгоритмов компьютерной алгебры. По вопросам,
рассматриваемым в данной книге, следует упомянуть работы
ленинградских математиков [14] - [17], [34] о разложении полиномов
на множители и разрешимости теории вещественно замкнутых
полей, и работы по теории базисов Грёбнера, выполненные в
Московском университете [24] - [26], [29]. Теория систем
линейных уравнений, коэффициенты которых принадлежат
коммутативному кольцу, рассматривается в [28]. В работах [1] -
[2] предложен простой алгоритм нахождения рациональных и
квазирациональных решений линейных дифференциальных и
разностных уравнений. Обзор [11] дает более подробное
представление о деятельности советских специалистов по
разработке алгоритмов компьютерной алгебры.
8 От редактора перевода и переводчика
Мы надеемся, что данная книга будет представлять интерес
для широкого круга читателей. Выход ее активизирует
деятельность в области, имеющей как теоретическое, так и
практическое значение. Считаем, что книга окажется полезной как
разработчикам алгоритмов и систем компьютерной алгебры, так
и многочисленным пользователям, применяющим системы
компьютерной алгебры в своей работе.
Пользуемся случаем выразить благодарность авторам за
внимание к русскому изданию. Во время работы над переводом
состоялась встреча с Дж. Дэвенпортом, где обсуждались
отдельные места монографии. Дж. Дэвенпорт прислал также
список опечаток, которые исправлены в настоящем издании.
А. В. Михалёв, Е. В. Панкратьев
ПРЕДИСЛОВИЕ АВТОРОВ К РУССКОМУ ИЗДАНИЮ
Мы очень рады видеть русское издание нашей книги "Calcul
Formel". В СССР имеются давние традиции в области
компьютерной алгебры: среди систем мы назовем систему "АНАЛИТИК",
реализованную на компьютере "МИР", - первую аппаратно-
реализованную систему специального назначения. В области
теории мы напомним о результатах А. О. Гельфонда; он первым
получил я-мерное обобщение границы Ландау - Миньотта,
значение которой демонстрируется в гл. 4. _ Но более всего
известны разработанные в СССР применения компьютерной алгебры
в физике - этот раздел гораздо значительнее, чем
продемонстрировано в нашей книге.
Мы надеемся, что наша книга дополнит имеющуюся на
русском языке литературу.
Дж. Дэвенпорт, И. Сирэ, Э. Турнье
ПРЕДИСЛОВИЕ
Один пример
Следующий пример представляет собой протокол работы на
ЭВМ с использованием программного обеспечения MACSYMA.
Команды пользователя расположены в строках, начинающихся с
(ci). Здесь мы имеем дело с ограниченным разложением {в ряд
Тейлора), вычислением первообразной и проверкой того, что
после дифференцирования снова получаем исходную функцию.
(с2) taylorC sinh(sin(x))-sin(sinh(x)) ,х ,0 , 15);
7 И 15
х х 5699 х
(d2)/T/ ч + . '. .
45 1575 1277025750
(сЗ) primitive:integrate* l/(x**2 + 1)**4, х);
5 3
5 atan(x) 15 х + 40 х + 33 х
(d3) +
16 6 4 2
48 х + 144 х + 144 х + 48
(с4) derivative:diff(primitive, x).;
4 2
75 х + 120 х + 33
(d4)
6 4 2
48 х •+ 144 х + 144 х + 48
5 3 5 3
A5 х + 40 х +33 х)B88 х + 576 х + 288 х) 5
D8 х + 144 х + 144 х +48) 16(х +1)
(с5) factor(ratsimp(derivative));
1
(d5)
2 4
(х + 1)
Компьютерная алгебра 11
Все эти вычисления в принципе может выполнить студент
первого курса, но они весьма трудоемки, и провести их с
карандашом и бумагой без ошибок довольно трудно.
Далеко не все знают, что вычисления такого типа, так же
как и численные расчеты, можно выполнить на компьютере.
Цель данной книги состоит в том, чтобы продемонстрировать
имеющиеся возможности, показать, как ими пользоваться,
указать принципы, на которых базируются системы нечисленных
вычислений, и показать трудности, которые приходится
преодолевать разработчикам этих систем, - трудности, с которыми
пользователь вскоре столкнется сам.
Но прежде чем мы попытаемся описать, как авторы надеются
справиться с таким нетривиальным заданием, попробуем точнее
определить предмет обсуждения.
Научные вычисления и алгебраические вычисления
С тех пор, как стали возможными вычисления на ЭВМ, одно
из главных применений компьютеров заключалось в численных
расчетах. Очень скоро начали доминировать (в смысле объема
вычислений) приложения к задачам управления. Однако научные
приложения остаются наиболее престижными, особенно если
взглянуть на требуемую производительность компьютера:
наиболее мощные компьютеры обычно предназначаются для научных
исследований.
Важно отметить, что в самом понятии "научные вычисления"
содержится двусмысленность: прежде чем на сцене появился
компьютер, вычисления представляли смесь численного счета с
тем, что будем называть "алгебраическими вычислениями",
т.е. с операциями над математическими формулами.
Единственным примером чисто численных расчетов является,
по-видимому, деятельность неординарных вычислителей, таких, как Ино-
ди: авторы таблиц, в особенности логарифмических, выполняют
огромный объем численных расчетов, но этим вычислениям
предшествует доводка алгебраических формул и методов,
необходимая для того, чтобы работа оказалась в пределах
человеческих возможностей. Напротив, знаменитые великие
вычисления XIX века содержат большое количество манипуляций с фор-
12 Предисловие
мулами. Наиболее известным является, несомненно, расчет
Леверье орбиты Нептуна, который был основан на возмущениях
орбиты Урана и привел к открытию Нептуна. Наиболее
впечатляющие вычисления с карандашом и бумагой выполнены также в
области астрономии: Делоне потребовалось 10 лет для
вычисления орбиты Луны и еще 10 лет для ее проверки. Результат
не является численным, поскольку он состоит в основном из
формулы, которая сама по себе занимает 128 страниц 4-й
главы его книги.
Отмеченная выше двусмысленность заключается в следующем:
с появлением компьютеров выполнять численные расчеты стало
значительно проще и сделалось достаточно привычным
выполнять огромные вычисления, которые в некоторых случаях
давали возможность избежать трудоемких алгебраических выкладок.
Это привело к тому, что для широкой публики и даже для
большинства научных сотрудников численные расчеты стали
синонимом научных вычислений. Когда в заголовках или в
списке тем конгресса или конференции содержатся слова
"научные вычисления", мы, как правило, можем быть уверены,
что речь идет только о численных расчетах, даже если
компьютерная алгебра также содержится в этом списке тем.
Однако численные расчеты не исключают алгебраических
вычислений: написание простейших программ требует
переписывания формул, на которых основан алгоритм. И мощности
компьютеров далеко не решают всех проблем: расчет развития
атмосферных процессов с точностью, необходимой метеорологам
для 48-часового прогноза, на наиболее мощных компьютерах,
доступных в настоящее время (типа CRAY), требует гораздо
более 48 часов. Увеличение производительности в 10 раз едва
ли улучшит ситуацию, поскольку одновременно с уточнением
теории потребуется в 2 раза уменьшить размер сетки (чтобы
отличать, например, погоду в Париже от погоды в Орлеане), а
это потребует 8-кратного увеличения объема вычислений.
Компьютерная алгебра
Таким образом, алгебраические вычисления не потеряли
своей актуальности. Однако чаще всего они выполняются вруч-
Компьютерная алгебра 13
ную, хотя первые логические устройства для их автоматизации
появились достаточно давно ([Kahrimanian 1953], [Nolan
1953]). Очень скоро стало ясно, что программное обеспечение
для использования в алгебраических вычислениях должно
представлять собой полную систему, включающую метод
представления нечисловых данных весьма специальной структуры, язык,
позволяющий манипулировать с ними, и библиотеку эффективных
функций для выполнения необходимых базисных алгебраических
операций.
Таким образом, появились хорошо работающие системы;
наиболее широко используемые из них описаны или упомянуты в
этой книге.
Разработка, развитие и даже использование этих систем
постепенно выделились в автономную научную дисциплину,
относящуюся, очевидно, к информатике. Ее цели лежат в области
искусственного интеллекта, несмотря на то что методы все
более и более удаляются от нее. Кроме того, используемые
алгоритмы вводят, в действие все менее элементарные
математические средства. Таким образом, эта дисциплина лежит на
стыке нескольких областей, что одновременно обогащает ее и
делает более трудной в исследовательском плане.
Наименование этой дисциплины длительное время колебалось
между "calcul symbol ique et formel" (французская
аббревиатура - CALSYF), "manipulations symboliques et formelles",
и, наконец, стабилизировалось как "Calcul formel" во
французском языке и "Computer algebra" - в английском . Тогда
же было создано несколько обществ, объединяющих
исследователей и пользователей этой дисциплины: всемирной ассоциаци-
ей является группа SIGSAM при АСМ , которая организует
В русском языке использовались и до сих пор
используются кроме термина "компьютерная алгебра" такие термины,
как "символьные и алгебраические вычисления", "символьные и
алгебраические преобразования", "аналитические вычисления"
и другие. - Прим. перев.
2) Special Interest Group in Symbolic and Algebraic
Manipulations.
3) Association for Computing Machinery.
14 Предисловие
конференции SYMSAC и EUROSAM и публикует бюллетень SIGSAM.
Европейская группа называется SAME , организуемые ею
конференции называются EUROCAM, EUROSAM,... , их труды
приведены в списке литературы. Для французских исследователей в
Национальном центре научных исследований CNRS имеется под-
разделение GRECO компьютерной алгебры. Кроме того,
начиная с 1985 г. издается специализированный Journal of
Symbolic Computation.
Системы компьютерной алгебры
Системы компьютерной алгебры весьма многочисленны, но
едва ли более десяти из них являются современными, общими и
достаточно широко распространенными. В данной книге авторы
остановились на четырех наиболее представительных из них:
- MACSYMA, наиболее развитая, но, к сожалению, доступная
только ha очень ограниченном числе компьютеров.
- REDUCE, наиболее широко распространенная из всех
больших систем.
- muMATH, наиболее доступная на микрокомпьютерах, что
означает ее очень широкое распространение, но одновременно
ограничивает ее использование в основном начинающими.
- SCRATCHPAD, совсем новая система с весьма ограниченным
доступом, которая из-за своей совершенно оригинальной
структуры может превзойти возможности других систем и стать
прототипом следующего поколения систем компьютерной алгебры.
За исключением SCRATCHPAD три упомянутые выше системы,
так же как и большинство неупомянутых, являются весьма дру-
Symbolic and Algebraic Manipulations in Europe.
На конференции EUROCAL-87, состоявшейся в июне 1987 г.
в Лейпциге, в связи с тем, что в организации и проведении
этих конференций активное участие принимают ученые из
других частей света, было принято решение в дальнейшем
называть подобные конференции ISSAC (International Symposium on
Symbolic and Algebraic Computation).В 1988 и 1989 гг.
симпозиумы ISSAC проводились совместно с международными
конференциями по прикладной алгебре, алгебраическим алгоритмам и
кодам, исправляющим ошибки, в Риме и Портленде
соответственно. - Прим. перев.
3) Groupe de REcherches COordonees.
Компьютерная алгебра 15
жественными по отношению к пользователю; разумеется,
синтаксис языка пользователя у них различный, разумеется,
библиотека доступных функций может меняться от нескольких
десятков до тысячи и более, разумеется, внутренние структуры
этих систем значительно отличаются одна от другой, но все
они обладают следующими общими свойствами:
- Программирование в основном интерактивное:
пользователь теоретически ,не знает ни формы, ни размера результатов
и поэтому должен иметь возможность вмешиваться в ход
вычислений в любое время.
- Большей частью используемые данные представляют собой
математические выражения, у которых по крайней мере внешнее
представление является таким, к какому все мы привыкли.
- Язык пользователя "алголоподобен".
- Языком реализации чаще всего является Лисп; во всяком
случае данные имеют структуру списка или дерева, а
управление памятью динамическое с автоматическим восстановлением
доступного пространства.
Таким образом, после освоения одной из систем
компьютерной алгебры переход к другой системе обычно не ставит перед
программистом сложных проблем, во всяком случае гораздо
меньше, чем смена системы, связанная со сменой компьютера.
По этой причине авторы считают, что лучше написать общее
введение в компьютерную алгебру, чем учебник по какой-либо
частной системе.
Таким образом, вводная гл. 1 "Как пользоваться системой
компьютерной алгебры" написана на основе системы MACSYMA,
команды и результаты которой имеют легко читаемый и удобный
для понимания вид. Но для детального описания выбрана
система REDUCE из-за ее очень широкого распространения. В
остальных главах обычно нет ссылок ни на какую частную
систему.
Доступность систем компьютерной алгебры
Системы компьютерной алгебры используются практически
только на достаточно больших ЭВМ, операционная система
которых работает с виртуальной памятью: чтобы работать без
16 Предисловие
слишком больших сложностей, нужна, по-видимому, рабочая
память не менее одного мегабайта. Самой экономичной системой
является, очевидно, muMATH, самой расточительной по
используемой памяти - SCRATCHPAD, для которой в настоящее время
необходимо рабочее пространство в 8 мегабайт. Наибольшее
количество дискового пространства требует, по-видимому,
MACSYMA, скомпилированные коды которой занимают мегабайты и
к ним следует добавить несколько мегабайт линейной
документации.
Доступность систем в настоящее время такова: MACSYMA
эксплуатируется на ЭВМ типов VAX, MULTICS (эта широко
распространенная во Франции система, к сожалению, может скоро
исчезнуть) и на некоторых персональных рабочих станциях
(Symbolics, Sun). REDUCE может использоваться почти на всех
основных моделях больших ЭВМ и мини-ЭВМ, хотя в некоторых
случаях доступны только старые версии (Cyber, IBM серий
360, 370, ..., MULTICS, все ЭВМ, работающие под управлением
системы UNIX, ...). muMATH может эксплуатироваться почти на
любом микрокомпьютере. Что касается SCRATCHPAD, то она
работает только на IBM под управлением системы VM/CMS, и в
настоящее время планируется весьма ограниченное число
пунктов ее реализации.
Использование систем компьютерной алгебры
Для новичка языки систем компьютерной алгебры - одни из
наиболее простых для использования. Действительно, сначала
ему требуется знать лишь несколько функций, которые
позволят ему переписать рассматриваемую проблему в виде, очень
похожем на ее математическую формулировку. Даже если
переписывание выполняется неуклюже или некорректно,
интерактивный режим позволяет после нескольких шагов наощупь быстро
получить результаты, которые нельзя получить с помощью
карандаша и бумаги. А для очень многих приложений. этого
достаточно.
Однако в отличие от языка программирования типа Фортран,
в котором синтаксические тонкости требуют тщательного
изучения, в то время как принципы работы компилятора можно
Компьютерная алгебра 17
полностью игнорировать, здесь пользователь должен очень
быстро разобраться, "как это работает", в частности, как
представляются и обрабатываются данные.
В действительности, хотя обычно трудно предсказать время
вычисления и размер результатов, знание принципов работы
может дать представление о порядке их величины и при
необходимости оптимизировать их. Эти оценки в действительности
существенны: для большинства алгебраических вычислений
результаты получаются почти моментально, и все идет отлично.
Но если это не так, то требуемое время и память возрастают
обычно экспоненциально. Таким образом, выполнимость данных
вычислений не всегда очевидна, и глупо жертвовать
значительными ресурсами, когда неудачу можно предсказать
заранее.
Кроме того, квалифицированное моделирование задачи и
программирование, приспособленное к структуре данных, могут
позволить легко справиться с нерешаемой в противном случае
задачей. Так, в гл. 1 приводятся две программы вычисления
наибольшего коэффициента полинома; текст, кажущийся
наиболее естественным для человека, привыкшего иметь дело с
Фортраном, значительно сложнее второго, но, кроме того, он
требует в 10 раз больше времени для полиномов степени 30.
Если же перейти к полиномам 1000-й степени, т.е. примерно в
30 раз большей, то время вычислений по второй программе
теоретически увеличится в 30 раз, тогда как для первой оно
умножится примерно на 1000, что даст отношение времени
работы двух программ, равное 300, а реальное время работы -
приблизительно одна минута и пять часов.
Поэтому владение эффективным стилем программирования и
способность предвидеть размер вычислений являются здесь
значительно более весомыми, чем в численных расчетах, где
возрастание обычно бывает линейным. К сожалению, это в
значительной степени приобретается с опытом и трудно
передается с помощью учебника. Однако знакомство с методами
позволяет легче приобрести этот опыт; именно поэтому
значительная часть нашей книги посвящена описанию математических
принципов работы систем компьютерной алгебры.
176—2
18 Предисловие
План книги
Книгу можно разделить на четыре части.
Первая (гл. 1) - введение в компьютерную алгебру при
помощи прокрмментированных примеров, большинство из которых
написано в системе MACSYMA. Для их понимания обычно
достаточно одного чтения. Тем не менее весьма полезно
запрограммировать эти или подобные примеры в системе MACSYMA или в
какой-либо другой. Очевидно, что для этого потребуется
знакомство с соответствующим руководством для пользователя.
Вторая часть, состоящая из гл. 2, 3 и 4, описывает
работу систем компьютерной алгебры. Описание проблем, требующих
решения, и принципов используемых решений, интересное само
по себе, может, кроме того, существенно помочь пользователю
обходить проблемы "комбинаторного взрыва", с которыми ему
придется столкнуться.
Глава 5 составляет третью часть, в которой представлены
две проблемы компьютерной алгебры, находящиеся на стадии
исследования, хотя описываемое программное обеспечение
начинает распространяться достаточно широко. Это очень
хорошие примеры, требующие всей мощи и всех возможностей систем
компьютерной алгебры для решения трудных естественных
задач; они хорошо иллюстрируют как возможности, так и
сложности этой дисциплины.
Наконец, детальное описание системы REDUCE, выполненное
в виде приложения, позволяет этой книге служить учебником,
по крайней мере по наиболее распространенной из этих систем.
Имеется также обширная библиография, включающая
значительно больше источников, чем явно упоминается в тексте,
так что читатель имеет доступ к методам, результатам и
алгоритмам, для которых не нашлось места в книге.
В заключение позвольте выразить надежду, что эта книга,
до настоящего времени не имеющая аналогов в мировой
литературе, поможет расширить использование инструмента, такого
мощного и так мало известного, - компьютерной алгебры.
Даниэль Лазар
Председатель группы компьютерной алгебры GRECO
Профессор университета П. и М. Кюри (Париж VI)
Компьютерная алгебра 19
БЛАГОДАРНОСТИ
Авторы хотели бы поблагодарить всех тех, кто читал
различные варианты этой книги, в частности г-жу X. Дэвен-
порт, Ж. Деллу Дора, Д. Дюваля, М. Жюсти, Д. Лазара и
Дж. К. Смита.
Эта книга была набрана с помощью системы ТрХ. Автор
системы Т сХ Д. Е. Кнут несет ответственность за
великолепное полиграфическое оформление книги, но, разумеется, не
отвечает за возможные ошибки и неточности. Мы многим
обязаны специалистам по системе TgX: С. Гуторбу из
Межуниверситетского вычислительного центра Гренобля1 и С. Е. Томпсону
из Кембриджского университета.
Работа была выполнена на оборудовании, принадлежащем
Межуниверситетскому вычислительному центру Гренобля. (Это
все относится, разумеется, к французскому изданию.
Перев.).
Глава 1
КАК ПОЛЬЗОВАТЬСЯ СИСТЕМОЙ КОМПЬЮТЕРНОЙ АЛГЕБРЫ
1.1. ВВЕДЕНИЕ
Идея использовать компьютер в алгебраических вычислениях
не нова. Начиная с 1960 г. появились многочисленные
программы, призванные показать, что использование компьютеров в
научной области может выйти за пределы чисто численных
расчетов. В этот период возник язык Лисп, который и открыл
путь к первым эффектным демонстрациям таких возможностей, -
формальному интегрированию и доказательству теорем. К тому
же некоторые специалисты очень быстро увидели, что на
машину можно переложить алгебраические операции, хотя и
трудоемкие, но весьма полезные для дальнейших расчетов:
разложение полиномиальных выражений, формальное дифференцирование
и т.д. Появление систем с распределением времени внесло
существенный вклад в обобщение программ алгебраических
вычислений, и они постепенно становились подлинными
подсистемами, общение с которыми осуществлялось на языке, близком к
обычным алгоритмическим языкам. Однако в отличие от этих
языков при этом стандартизация отсутствовала, что
объяснялось существенно большими размерами задачи, чем обычные
численные расчеты или управление. Здесь кроется одна из
причин, почему эти возможности так долго игнорировались
научным и промышленным миром. В течение долгого времени
использование этих систем ограничивалось определенными типами
машин, и, очевидно, это ограничение не способствовало
распространениям знаний о данных системах. Однако недавно
произошли значительные перемены: язык Лисп снова обретает
популярность, и многочисленность его диалектов и версий не
мешает тому, чтобы такая система, как REDUCE, реализовыва-
лась на большом числе компьютеров и рабочих станций. В не-
Компьютерная алгебра 21
сколько меньшей степени адаптирована для коммерческого
использования на некоторых компьютерах система MACSYMA,
которую перестали считать недоступной. Еще позднее появились
системы для микрокомпьютеров, которые, хотя и в
ограниченной степени, наконец, дают нам возможность почувствовать
предмет; к ним относится muMATH. Очень хорошо, что основные
существующие системы - REDUCE, MACSYMA, muMATH и
многообещающая система SCRATCHPAD, - написаны на языке Лисп. Знание
этого языка, безусловно, поможет сделать алгебраические
вычисления на ЭВМ более понятными и распространенными.
1.2. ОБЩИЕ СВЕДЕНИЯ О СИСТЕМАХ
КОМПЬЮТЕРНОЙ АЛГЕБРЫ
Наиболее интуитивный, хотя в чем-то ограниченный взгляд
на системы компьютерной алгебры, - считать, что они созданы
для повседневных манипуляций с формулами в научных и
технических расчетах. Математическая формула, описанная на одном
из обычных языков (Фортран, Паскаль, Бейсик, ...),
предназначена только для численных расчетов, когда переменным и
параметрам присвоены численные значения. В языке,
допускающем алгебраические вычисления, для этой формулы также можно
получить численное значение, но, кроме этого, она может
стать объектом формальных преобразований:
дифференцирования, разложения в ряд, различных других разложений и даже
интегрирования.
Например, можно при помощи всего одной команды выполнить
разложение на простейшие дроби выражения
х2-Б
х(х-\)*
имеющее вид
5_ _5 5 6 4
х х-Л (х-1J (jc-1K (jc-1L
которое, безусловно, нетрудно сделать вручную. Но гораздо
приятнее выполнить с помощью машины разложение формулы
х+а
х(х-Ь)(х +с)
22 Как пользоваться системой компьютерной алгебры
имеющее значительно более сложный вид:
а a+b (c-ab)x+(b+a)c
Ьсх (Ьс+Ь3)(х-Ь) (с2 + Ь2с)(хг+с)
Как правило, системы компьютерной алгебры
разрабатываются со следующими целями:
- предложить пользователю набор базисных предпрограмми-
рованных команд, которые будут передавать машине трудоемкие
вычисления, встречающиеся в процессах, полностью
выполняемых пользователем: это функции развитой конторской машины;
- предложить язык программирования, позволяющий
определять команды и процедуры высокого уровня, расширяющие
исходное множество команд.
Мы видим, что здесь нет фундаментальных противоречий с
целями таких языков, как Лисп или APL: тот же интерактивный
подход, те же возможности определения процедур или функций
и, значит, те же возможности расширения существующих
библиотек по данной теме.
Разумеется, при соответствующем алгоритме вполне
возможно использовать алгебраические вычисления в пакетном
режиме. Это зависит только от вычислительного окружения, и
пользователю нужно следить за тем, чтобы все данные к"
моменту вычисления были определены.
1.3. СИНТАКСИС АССОЦИИРОВАННЫХ ЯЗЫКОВ
Хотя между системами имеются различия, синтаксис - не
главная проблема компьютерной алгебры. В общем случае
нескольких часов и небольшой практики вполне достаточно.
Можно утверждать, что синтаксис систем компьютерной алгебры в
значительной степени аналогичен синтаксису Паскаля.
Обязательно имеются операторы присваивания, понятие вызывающей
функции (команды), более или менее богатый выбор
управляющих структур (if, do, while, repeat и т.д.), возможности
определения процедур,... - одним словом, весь арсенал
классических языков программирования, необходимый для записи
алгоритмов.
Компьютерная алгебра 23
1.4. ОБЛАСТИ, ОХВАТЫВАЕМЫЕ
СУЩЕСТВУЮЩИМИ СИСТЕМАМИ
Чтобы быть полезной и привлечь внимание пользователей,
система компьютерной алгебры должна охватывать с помощью
богатого набора команд области, естественно возникающие при
желании выйти за рамки ограничений, налагаемых
оборудованием и традиционными языками программирования. Следующие
средства составляют часть необходимого снаряжения:
- Операции с целыми, рациональными, вещественными и
комплексными числами с неограниченной точностью. Важность их
показана в гл. 2.
- Операции с полиномами от одной или нескольких
переменных и с рациональными дробями. Одним словом, очевидные
рациональные операции, вычисление НОД, разложение на
множители полиномов с целыми коэффициентами.
- Вычисления с матрицами с численными и/или символьными
элементами.
- Простой математический анализ: дифференцирование,
разложение в ряды, аппроксиманты Паде и т.д.
- Преобразования формул: различные подстановки,
выделение коэффициентов и частей формулы, нахождение численных
значений, распознавание образов, управляемые упрощения и
т.д.
Исходя из этой общей базы, система может предлагать
другие возможности в специфических областях, возможности,
которые до некоторой степени характеризуют степень ее
развития. Например:
- Решение уравнений.
- Формальное интегрирование.
- Вычисление пределов.
- Тензорное исчисление.
Кроме того, пользователи имеют возможность расширять
библиотеку функций, передавая в общее пользование работы,
которые носят достаточно общий характер, чтобы представлять
интерес для некоторой группы людей. Типичным примером может
служить библиотека SHARE системы MACSYMA.
24 Как пользоваться системой компьютерной алгебры
1.5. КОМПЬЮТЕРНАЯ АЛГЕБРА НА ПРИМЕРЕ
Ниже мы выбрали для демонстрации с использованием
системы MACSYMA серию примеров из различных упомянутых областей.
Большинство этих примеров можно повторить с использованием
других систем, особенно REDUCE, которая описывается в
приложении. Очевидно, что мы не преследуем цель заменить
пособие для программистов по системе MACSYMA, и временами
читатель вынужден довольствоваться краткими разъяснениями,
приведенными в виде комментариев. Примеры распечатаны так, как
они давались машиной. Печать результатов не изменена.
Строки, напечатанные пользователем, помечены символами (с) и
оканчиваются символом ";" или "$". Последний символ
сообщает системе MACSYMA, что результат распечатывать не нужно.
Таким образом экономится время, если распечатка результата
несущественна. Результаты выполнения команд помечены
символами (d). Символ %, используемый в командах, представляет
собой значение, полученное в результате выполнения
предыдущей команды. Константы я, е, i обозначаются %pi, %e, %i.
Символ присваивания - двоеточие.
1.5.1. Простые операции с числами
(cl) пО : 123456789123456789 * 123456789
+ 98765.4321123456789;
(dl) 15241579753086420873647310
(с2) nl : 100! ;
(d2) 93326215443944152681699238856266700490715968264381621
46859296389521759999322991560894146397615651828625369
7920827223758251185210916864000000000000000000000000
(сЗ) 101! / % ;
(d3) 101
В системе.MACSYMA имеются предикаты и функции, значения
которых очевидны, но применение которых может требовать
значительного времени. Это относится к предикату проверки
простоты primep или к функции разложения на множители
factor.
Компьютерная алгебра 25
(с4) primepA2)
(d4)
(с5) primepB16091)
(d5)
(сВ) factorB**63-l);
false
true
(d6) 7 73 127 337 92737 649657
(c7) largejrime : 2**216091 - 1 $
Ниже приводится пример цикла с оператором for. Когда
цикл закончен, MACSYMA печатает слово "done". Его можно
рассматривать как значение (не представляющее интереса),
соответствующее этой команде.
(с8) for a:l thru 5 do
for b:l thru 5 do
if gcd(a,b)=l
then print("a=\a, \b=\b,", \factor(b**6 + 3*a**6));
a= 1
a= 1
a= 1
a= 1
a= 1
a= 2
a= 2
a= 2
a= 3
a= 3
a= 3
a= 3 ,
•a= 4
a= 4
a= 4
a= 5
a= 5
a= 5
a= 5 ,
, b=
, b=
, b=
, b=
, b=
, b=
, b=
, b=
, b=
b=
b=
, b=
b=
b=
b=
b=
b=
b=
b=
1
2
3
4
5
1
3
5
1
2
4
5
1
3
5
1
2
3 ,
4 ,
2
, 2
, 67
2
, 2 3 61
, 4099
2
, 2 3907
, 193
, 3 307
, 15817
2
2 547
, 2251
, 61 103
2
, 2 61 73
, 12289
3 4339
103 271
2
2 11719
73 643
2
2 3 3967
50971
(d8)
done
26 Как пользоваться системой компьютерной алгебры
(с9) for p:2 thru 3600 do
if primep(p) and (remainderB**(p-l), p**2) =1)
then display(p);
p = 1093
p = 3511
(d9) done
(clO) for n:2' thru 100 do
for p:l thru (n-1) do
(q: n-p,
if (gcd(p,q)=l and integerp(D*p**3+27*q**2)**(l/2)))
then display(p,q)
p
q
p
q
p
q
p
q
=
=
=
=
=
=
=
=
l
10
13
34
33
32
69
22
(dlO) done
Примеры вычислений с рациональными числами:
Cell) s:0 $
(с12) for i:l thru 100 do s:s+l/i;
(dl2) done
(cl3) s;
14466636279520351160221518043104131447711
(dl3)
2788815009188499086581352357412492142272
(cl4) s: sum(l/i, i, 1, 100);
14466636279520351160221518043104131447711
(dl4)
2788815009188499086581352357412492142272
Компьютерная алгебра 27
Очевидно, что MACSYMA может производить вычисления с
вещественными числами с точностью, реализованной в ЭВМ:
(с15) 216091*0.69314718;
(dl5) 149782.87
(с!6) а:123.897 * 1234.6 /A.0 -345.765е-03);
(dl6) 233804.73
Однако благодаря функции bfloat. можно превзойти эту
точность и #выйти за пределы границ для чисел, накладываемых
аппаратурой. В системе MACSYMA такие большие вещественные
числа записываются следующим образом: п. nnnnnnnbtnn.
Точность, принимаемая по умолчанию, совпадает со значением
символа fpprec.
(с17) fpprec;
(dl7) 16
(с18) bfloat(%pi);
(dl8) 3.141592653589793b0
(cl9) big: 1.123424213423452515135b53*2. 23423458725412745
124523423544b64
(dl9) 2.50999323378944bll7
(c20) fpprec:36;
(d20) 36
(c21) bfloat(%pi);
(d21) 3.14159265358979323846264338327950288b0
(c22) big:1.123424213423452515135b53*2.23423458725412745124
523423544b64
(d22) 2.50999323378944021829124202358948023bll7
(c23) bfloat(s);
(d23) 5.18737751763962026080511767565825316b0
. Следующий пример демонстрирует медленную сходимость ряда
1 я2
£ — к его сумме ^ .
28 Как пользоваться системой компьютерной алгебры
(с24) s2: sum(l/i**2, i, 1, 200)$
(с25) float(%);
(d25) 1.6399465
(c26) float(%pi**2/6);
(d26) 1.6449341
Мы можем воспользоваться этой классической задачей для
демонстрации определения функций в системе MACSYMA. Будем
вычислять п по формуле Мечина
f=4arctg£-arctg2Jg,
разложение которой в ряд имеет вид
я = 16 Е {~1)Р 4 у ЬП1
/i=0 Bр+1).52р+* Р=0 Bр+1).2392р+]
Входной параметр п этой функции - количество слагаемых,
выбранных в первом ряду. Известно, что погрешность такого
ряда меньше первого опущенного члена и имеет тот же знак.
Вычисление второго ряда выполняется таким образом, чтобы
ошибка была меньше, чем в первом ряду.
(с27) approx_pi (n) := block(tsl,s2,isgn,isgnl,errl,
егг2,егг,i,j,savl,
si: 0, isgn: 1, sav: fpprec, fpprec: 3,
for i:1 thru n do
( J: 2*i -1,
31: si + isgn /U *
errl: 16/(B*n+l)*5**B*n+l)),isgnl: isgn,.
si: si + isgn /(j * 5**j), isgn: - isgn),
si: 16*sl,
for i:l step 1 while true do
( j: 2*1-1,
err2: l/(j * 239**j ),
if D*err2 - errl)<=0 then return(done),
s2: s2 + isgn * err2,
isgn: -isgn ),
err:bfloat(isgnl*(errl + 4* err2)), display(err),
fpprec:sav,
return (si - 4*s2) )$
Отметим большое сходство с алголоподобными языками
программирования. Слева от символа := находится имя функции, за
Компьютерная алгебра 29
которым следует список формальных параметров. Справа мы
помещаем определение функции в виде простого выражения либо
с использованием в более сложных случаях, таких, как
приведен выше, символа block. Команда return, в зависимости от
контекста, имеет различный смысл: в цикле for она
заставляет выйти из цикла, в другом месте она приводит к выходу из
функции, и значение ее аргумента совпадает с возвращаемым
значением.
(с28) approx_piA2);
err = 2.15b-18
111648328176981713127224670033666469979152
(d28)
35538766634625558164751756191253662109375
(c29) bfloat(X);
(d29) 3.1415926535897932363920156194308607b0
(c30) bfloat(%pi)- % ;
(d30) 2.07062776384864218442817626002126774b-18
(c31) sqrtO.O);
(d31) 1.7320508
(c32) fpprec:45$
(c33) bfloat(sqrtC));
(d33) 1.73205080756887729352744634150587236694280525b0
(c34) logl0_of_2: bf loaUlogB) )/bf loat(logdO) )$
(c35) integerB16091 * logl0_of_2);
(d35) 65049
(c36) bfloat(large_prime);
(d36) 7.46093103064661343687339579400511489540228754 b65049
Закончим рядом примеров с комплексными числами. Причины
использования функции expand будут объяснены позднее.
(С37) zl: 4 + %i*19;
(d37) 19 %i + 4
30 Как пользоваться системой компьютерной алгебры
(С38) z2: 3 + 17 * %i;
(d38) 17 %i + 3
(c39) zl+z2;
(d39) 36 %i + 7
(c40) zl*z2;
(d40) A7 %i + 3) ( 19 %i + 4)
(c41) expand(%);
(d41) 125 %i - 311
(c42) zl/z2;
19 %i + 4
(d42)
17 %i + 3
(c43) rectform(%);
335 11 %i
(d43) +
298 .298
1.5.2. Полиномы и рациональные функции
Здесь нет необходимости разъяснять значение полиномов и
рациональных функций, настолько естественно они встречаются
в алгебраических вычислениях. MACSYMA позволяет производить
некоторые манипуляции с полиномами и рациональными
функциями. Понять имена соответствующих команд не представляет труда.
(cl) р0:2*х**3 + 7*х +9;
3
(dl) 2 х + 7 х + 9
(с2) pi: (a*x**2-y**3*z)*(y+b*z**2)*(x-y-2*zb;
2 3 2
(d2) (- 2 z - у + х) (а х - у z) (b z + у)
Автоматически MACSYMA не разлагает в ряд произведения
сумм. Однако пользователь может применять такие функции,
как expand, ratexpand или rat. Последняя из них позволяет
пользователю, среди прочего, расположить слагаемые в поли-
Компьютерная алгебра 31
номе в нужном порядке. Символ "/R/" перед результатом
указывает на специальную форму машинного представления,
называемую рекурсивной. Разъяснения будут даны в следующей
главе (см. параграф "Полиномы от нескольких переменных").
(сЗ) pi:expand(pi);
34 43 33 23
(d3Jby z + b у z - b x у z - 2 ab x z
42 22 325 4
+ 2 у z-abx yz +abx z +y z - x у z
5 2 2 3
-2axyz-axy+axy
(c4) pll:rat(pl,x,y,z);
3 4 4 3 2 3
(d4)/R/ 2by z + (by -bxy -2abx)z
4 2 3 2 5 4 2
+B у -abx y+abx)z +(y -xy -2ax y)z
2 2 3
-ax у +ах у
(c5) pl2:rat(pl,b,a,z,y,x);
2 3 2 2
(d5)/R/ (ay+baz)x + (-ay +(-baz -2a z) у
3 2 4 3 3 5
-2baz)x +(-zy -bz y)x+zy
3 2 4 4 3
+ (bz +2z)y +2bz у
(сб) p2:factor(pll);
3 2 2
(d6) B z + у - x) (y z - a x ) (b z + y)
(c7) yO: 7*x**3-3*x+a;
3
(d7) 7 x - 3 x + a
(c8) yl: x**2-(a-l)*x +b;
2
(d8) x - (a - 1) x + b
(c9) ql:yO/yl;
32 Как пользоваться системой компьютерной алгебры
3
7 х - 3 х + а
(d9)
2
х - (а - 1) х + b
(clO) quotient(yO,yl);
(dlO) 7 х + 7 а - 7
(ell) remainder(yO,yl);
2
(dll) (- 7 b + 7 a - 14 a + 4) x + G - 7 a) b + a
(cl2) remainder(x**4-a*x**3+(a+l)*x**2-2*x+3*a-2, x**2
-3*x+2);
(dl2) A6 - 4 a) x + 7 a - 18
(cl3) num(ql);
3
(dl3) 7 x - 3 x + a
(cl4) denom(ql);
2
(dl4) x - (a - 1) x + b
(cl5) y2: expand((x-a)**2*(y-b)*(z-c+l)**2);
22 22222 2
(dl5) x у z - 2 axyz +a yz -bx z +2abxz
2 2 2 2
-a bz -2cx yz+2x у z + 4 а с x-y z - 4 a x у z
2 2 2 2
-2a с у z + 2a yz + 2bcx z - 2 b x z
2* 2 2 2
-4abcxz + 4abxz + 2a b с z - 2 a bz + c x у
2 2 2
- 2 с х y + x у - 2 а с xy + 4acxy-2axy
22 2 222 2 2
+ a с y-2 a cy + a y-bc x +2bcx -bx
2 2 2 2
+ 2abc x-4abcx + 2abx-a be +2a be
2
- a b
Компьютерная алгебра 33
(с16) уЗ: expand*(x-a)*(z-c+l));
(dl6) xz-az-cx + x + ac-a
(cl7) gcd(y2,y3);
(dl7) (x - a) z + A - c.) x + а с - a
Мы видим, что функция gcd действительно находит НОД
выписанных полиномов, не делая попыток разложить результат на
множители.
(с18) factor(%);
(dl8) (x - a) (z - с + 1)
Аналогично для рациональных функций, как правило, не
производится сокращение числителя и знаменателя на их НОД.
Чтобы выполнить это упрощение, нам следует, например,
обратиться к команде.ratsiтр.
(с19) q3:y2/y3;
2 2 222 22 2
(dl9)(x yz -2axyz +a yz - b x z + 2 a b x z
2 2 2 2
-a bz -2cx yz + 2x yz + 4acxyz-4axyz
2 2 2 2
-2a cyz+2a yz+2bcx z - 2 b x z
2 2 2 2
-4abcx/+4abxz + 2a b с z - 2 a bz + c x у
2 2 2
- 2 с х y + x y-2ac xy + 4acxy-2axy
22 2 2 22 22
+ а с у- 2a cy + a y-bc x +2bcx -bx
2 2 2 2
+ 2abc x-4abcx + 2abx-a be +2a be
2
- a b)/(x z-az-cx + x + ac-a)
(c20) ratsimp(y2/y3);
(d20) ((x - а) у - b x + a b) z + (A - c) x + а с - а) у
i7fi_o +(bc-b)x-abc + ab
34 Как пользоваться системой компьютерной алгебры
Работая с полиномами, мы должны иметь возможность
получить минимальную и максимальную степени переменной, а также
коэффициенты при членах вида х1.
(с21) hipow(y2,*c);
(d21) 2
(с22) coeff(y2,z,l);
2 2 2
(d22) -2сх у +2 х у + 4 а с х у - 4 а х у - 2 а су
2 2 2
+ 2а у + 2 be х - 2 bx -4abcx + 4abx
2 2
+ 2 а Ь с - 2 а ■ b
Можно также выполнять исключение переменных из двух
уравнений: уО = 0, г/1 = 0, по методу результанта (см.
дополнение).
(с23) resultant(yO,yl,x);
3 2 2
(d23) 49 b + 42 b + а F3 b - 4) - 12 b + a A9 - 42 b)
4 3
+ 7 a - 21 a
Чтобы воспользоваться этими различными возможностями,
выпишем функцию, которая позволит нам выражать
симметрическую функцию (ограниченную здесь тремя переменными) через
основные симметрические функции, обозначаемые pi, р2, рЗ.
Будем пользоваться методом Варинга [Dubreuil 1963].
(с24) waring3(vs):=
block([са,cb,cc,ha,hb,he,vpl,vp2,vp3,sn,vpnl,
vpl:a+b+c,
vp2:a*b+b*c+c*a,
vp3:a*b*c,
vpn: vs, sn:0,
while(not(vpn=0)) do
( ca: cb : cc : ha : hb : he : 0,
ha : hipow (vpn,a),
ca : coeff( vpn, a**ha),
if (not (integerp (ca))) then
(hb:hipow Tca,b),
cb:coeff(ca,b**hb),
Компьютерная алгебра 35
if (not (integerp (cb))) then
(hc:hipow Tcb,c),
ccrcoeff (,cb,c**hc))
else cc:cb )
else cc:ca ,
ha:ha-hb, hb:hb-hc,
vpn: expand(vpn - cc * vpl**ha * vp2**hb * vp3**hc),
sn:sn + cc * pl**ha * p2**hb * p3**hc
return(rat(sn,p3,p2>pl)) ) %
Команда kill позволяет вернуть переменную в "атомное"
состояние. Действительно в данный момент существенно, что
символам р1у р2, рЗ не присвоены никакие значения. Во время
выполнения программы значения этим символам не
присваиваются. Поэтому нам требуется воспользоваться командой kill
только один раз.
(с25) kill(pl,p2,p3);
(d25) done
(с26) waring3(a**3+b**3+c**3);
3
(d26)/R/ pi - 3 p2 pi + 3 рЗ
(c27) sl7: waring3(a**17+b**17+c**17);
17 15 14 2 13
(d27)/R/ pi - 17 p2 pi ■ + 17 p3 pi + 119 p2 pi
12 3 2 11
- 221 p3 p2 pi + (- 442 p2 + 102 p3 ) pi
2 10 4 2 9
+ 1122 p3 p2 pi + (935 p2 - 935 p3 p2) pi
3 3 8
+ (- 2805 p3 p2 + 255 p3 ) pi
5 2 2 7
+ (- 1122 p2 + 3060 p3 p2 ) pi
4 3 6
+ C570 p3 p2 - 1428 p3 p2) pi
R P *} A 4
+ G14 p2 - 4284 p3 p2 + 238 p3 ) pi
5 3 2 4
+ (- 2142 p3 p2 + 2380 p3 p2 ) pi
36 Как пользоваться системой компьютерной алгебры
7 2 4 4 3
■ + (- 204 р2 + 2380 рЗ р2 - 595 рЗ р2) pi
+ D76 рЗ р2 - 1190 рЗ р2 + 51 рЗ ) pi
8 2 5 4 2 7
+ A7 р2 - 357 рЗ р2 + 255 рЗ р2 ) pi - 17 рЗ р2 '
3 4 5
+ 85 рЗ р2 - 17 рЗ р2
(с28) discri3: waring3( expand((a-b)**2 * (a-c)**2
* (b-c)**2));
3 2 2 3
(d28)/R/ - 4 p3 pi + p2 pi + 18 p3 p2 pi - 4 p2
2
- 27 p3
Предыдущий метод носит общий характер, однако он не
самый эффективный, особенно для выражения сумм близких
степеней. В рассматриваемом нами случае - только для трех
переменных - как только мы получили
мы можем вычислить s по следующей рекуррентной формуле:
s .-pAs - pns л + p0s 0.
Это позволяет нам ввести индексированные переменные,
которые в данном простом случае можно использовать в системе
MACSYMA без предварительного объявления. Вычисление s в
строке (с27) занимает несколько минут на компьютере
Honeywell DPS8-70. Вычисление же det[\7] по предлагаемому методу
занимает только несколько секунд.
(с29) dettOl: 3 $
(сЗО) detlll: pi' S
(с31) detI21: pl**2 - 2*р2 S
(с32) for n:3 thru 17 do dettn]: expand (pl*det[n-U
- p2*deUn-21 + p3*det[n-31);
(d32) done \
Компьютерная алгебра 37
(сЗЗ) deU41;
2 2 4
(d33) - 2 pi рЗ + 2 р2 - 4 pi р2 + pi
(с34) expand(s17 -det[171);
(d34) 0
Использование такого типа индексированных переменных
особенно эффективно в следующем рекурсивном механизме
определения массива. Вычисление элемента выполняется всего один
раз, а результат сохраняется в памяти.
(с35) detertnl := if n=0 then 3 else
if n=l then pi else
if n=2 then pl**2 - 2*p2 else
rat(pl*deter[n-l]-p2*deter[n-21
+p3*deter[n-3],p3,p2,pl)$
(c36) deter[33;
3
(d36)/R/ pi - 3 p2 pi + 3 p3
(c37) deter[41;
4 2 2
(d37)/R/ pi - 4 p2 pi ■+ 4 p3 pi + 2 p2
(c38) sav7 : deterШ %
(c39) deter[51;
5 3 2 2
(d39)/R/ pi - 5 p2 pi + 5 p3 pi + 5 p2 pi - 5 p3 p2
Мы закончим примером разложения на множители полинома от
нескольких переменных. Следующий пример потребовал 4 минуты
на компьютере Honeywell DPS8-70. Хотя алгоритмы разложения
на множители будут обсуждаться только в гл. 4, читатель
может уже сейчас убедиться, что разложение на множители
является дорогой процедурой.
(с40) for n:2 thru 10 do print(factor((иЛп+уЛп)Лп
- (uAn-vAn)An));
2 2
4 u v
38 Как пользоваться системой компьютерной алгебры
3 6 6
2 v (v + 3 и )
4 4 8 8
8 u v (v + u )
5 20 10 10 20
2v(v + 10 u v +5u)
6 6 12 12 12 12
4uv(v +3u)Cv +u )
7 42 14 28 28 14 42
2v(v +21u v + 35 u v +7u)
8 8 16 16 32 16 16 32
16uv(v +u)(v +6u v +u)
9 18 18 54 18 36 36 18 54
2v(v +3u)(v +33u v +27u v + 3 u )
10 10 40 20 20 40 40 20 20
4 u v (v + 10 u v + 5 u ) E v + 10 u v
40
+ u )
(d40) done
1.5.3. Матричные вычисления
Векторы и матрицы, постоянно используемые в численных
методах, необходимы, очевидно, и в компьютерной алгебре. В
распоряжении пользователя имеется несколько способов
определения этих объектов.
A) Явное объявление:
(cl) m0: matrixUl, 2, 31, [4, 5, 61, [7,8,91);
[12 3 1
[ 1
(dl) [456]
[ ]
[7891
(с2) vl: [a, b, cl;
(d2) [ a b с 1
(c3) v2:transpose(vl);
Компьютерная алгебра 39
[ а ]
[ ]
(d3) ' [ b ]
[ ]
[ с ]
B) Объявление с интерактивным присваиванием:
(с4) ml:entermatrixC,3);
Is the matrix 1. Diagonal 2. Symmetric 3. Antisymmetric
4. General
Answer 1, 2, 3 or 4
2;
Row 1 Column 1
Row 1 Column 2
Row 1 Column 3
Row 2 Column 2
Row 2 Column 3
Row 3 Column 3.
Matrix entered.
u;
v;
w;
x;
y;
z;
[ U V W ]
[ ]
(d4) [ v x у 1
[ ]
[ w у z ]
C) Определение элементов с помощью порождающей функции:
(с5) h[i,j]:=l/(i+j-l)$
(сб) hilbert4: genmatrix(h,4,4);
[ 111]
[ 1 - - - ]
[ 2 3 4 1
[ ]
[11111
[----]
[2345]
(d6) [ ]
[1111]
[----]
[3456]
[ ]
40 Как пользоваться системой компьютерной алгебры
[1111]
[----]
[4567]
Выбор элементов осуществляется просто:
(с7) sO: m0[l,2];
(d7) 2
(с8) sO: шШ,1] + vlt2] * hilbert4 [3,31 ;
b
(d8) u + -
5
(c9) v3: row(hilbert4, 3);
[1111]
(d9) [----]
13 4 5 6]
(clO) v4: col (hilbert4, 2);
[ 1 ]
[ - ]
[ 2 ]
[ ]
[ 1 ]
[ - ]
[ 3 ]
(dlO) [ ]
[ 1 ]
[ - ]
[ 4 ]
[ ]
[ 1 1
[ - ]
[ 5 ]
Можно изменить один элемент матрицы и таким образо»
дифицировать матрицу.
(ell) т012,2] : х»у;
(dll) х у
(с12) т0;
[1 2 3 ]
[ 1
(dl2) [4 х у 6 ]
[ 1
[7 8 9 ]
Компьютерная алгебра 41
(Cl3)m0[2,2]: Ь$
Оператор матричного умножения - точка ".". Обычные
арифметические операции выполняются поэлементно.
(с14) р: v3 . v4;
1
3
v2;
(dl4)
-(cl5) v6: mO
(dl5)
[ 3 с + 2 b + a ]
[ ]
[6c + 5b + 4al
[ 1
[ 9c + 8b + 7al
(cl6) m2: 2 * mO;
(dl6)
(cl7) m22: mO * mO;
(dl7)
(cl8) msquare: mO . mO;
(dl8)
(cl9) mpl: 1+ mO;
(dl9)
12 4 6 1
[ ]
[8 10 12 ]
[ 1
[ 14 16 18 ]
[14 9 1
[ ]
[ 16 25 36 ]
[ ]
[49 64 81 ]
[ 30 36 42
[
[ 66 81 96
[
[ 102 126 150
[234
[
[567
[
[ 8 9 10
Имеются также оператор возведения в степень ЛЛ и функции
для вычисления определителя и характеристического полинома
матрицы.
42 Как пользоваться системой компьютерной алгебры
(с20) invhilb4: hilbert4/4/N(-l);
16 - 120
(d20>
240 - 140
- 120 1200 - 2700 1680
240 - 2700 6480 - 4200
- 140 1680 - 4200 2800
(с21) pole: rat(charpoly(ml,lambda),lambda);
3 2
(d21)/R/ - lambda + (z + x + u) lambda
2 2 2 2
+ ((- x - u) z + у -ux+w + v ) lambda + (u x - v ) z
2 2
-uy +2vwy-w x
Приведем несколько примеров возможностей системы MACSYMA
при работе с матрицами, получаемыми циклическими
перестановками элементов вектор-строки
(а, Ь,...).
Мы проверим одно из свойств таких матриц. Рассмотрим
биномиальное разложение (и + v)n. Если положить
а-и +v , 0=С и. v , c-L и .v ,...,
п п
то определитель такой матрицы будет равен
(un-(-l)n.vn)n.
Это связано с тем, что определитель матрицы, получающейся
циклической перестановкой элементов вектора (и, vt 0, 0,...),
равен
(«"-ИГА
(с22) рЗ: matrixUa, b, с], (с, а,.Ь], (Ь, с, а]);
(d22)
[ a b с ]
[ 1
[cab]
[ ]
[ b с а ]
(с23) determinant(рЗ);
Компьютерная алгебра 43
2 2 2
(d23) с (с -ab)+a(a-bc)-b(ac-b)
(с24) ratsimp(%);
3 3 3
(d24) a +b +c - 3 a b с
Такой определитель очевидно делится на а + Ь+ с:
(с25) factor(d24);
2 2 2
(d25) (c+b+a)(c -bc-ac + b - a b + a )
Если для случаев 5, 7, 11 мы ограничимся тремя
параметрами в исходном векторе, то получим следующие определители:
а5 + Ьъ + с5 - БаЬс(Ь2 - ас),
а7 + Ь7 + с7 - 7abc(b2 - acfy
а11 + b11 + с11 - \\abc(b2 - ac)(b6 -3ab*c + Aa2b2c2 - а3с3).
Давайте вернемся к исходной C,3)-матрице:
(с26) a:u**3+v**3f
(с27) b: 3*u**2*v$
(с28) с: 3*u*v**2$
(с29) рЗ:. matrix([a,b,c],[c,a,b],[b,c,a]);
3 3 2 2
v+u 3uv 3uv
(d29)
2 3 3 2
3uv v+u 3uv
2 2
3 u v 3 u v
3 3
v+u
(c30) factor(determinant(p3));
(d30)
3 2 2 3
(v+u) (v - u v + u )
Следующие действия просто позволяют получить результат в
нужном виде:
44 Как пользоваться системой компьютерной алгебры
(с31) expand(% ** A/3)) **3 ;
3 3 3
(d31) (v + u )
Рассмотрим поочередно случаи 4 и 5.
(с32) a: u**4+v**4$
(сЗЗ) b: 4*u**3*v$
(с34) c:6*u**2*v**2$
(с35) d:4*u*v**3$
(с36) р4: matrix(ta,b,c,d],
[d,a,b,c],
[c,d,a,b],
[b,c,d,al) $
Вместо приема, примененного в строке с31, лучше
воспользоваться функцией sqfr, которая аналогична функции factor,
но выделяет только множители, общие для полинома и его
производных.
(с37) sqfr(determinant(р4));
4 4 4
(d37) (v - u )
(с38) a:u**5 + v**5$
(c39) b:5*u**4*v$
(c40) c:10*u**3*v**2$
(c41) d:10*u**2*v**3$
(c42) e:5*u*v**4$
(c43) p5: matrix([a,b,c,d,e],
[e,a,b,c,dl,
[d,e,a,b,cl,
[c,d,e,a,bl,
[b,c,d,e,al) $
(c44) sqfr(determinant(p5));
5 5 5
(d44) (v + u )
Компьютерная алгебра 45
Закончим раздел, выписав функцию, которая вычисляет
обратную матрицу по методу Сурио. Результат выдается в форме
матрицы, присоединенной к исходной. Определитель - значение
глобальной переменной det. Мы увидим, что в строках с48 и
с49 значения переменной det различны. Пользователь должен
тщательно контролировать этот так называемый, побочный
эффект.
(с45) souriau (a):=block([al,b,i,j,q,nl,
n:length(a),
al:copymatrix(a),
for j:1 thru n do (
q:0,for i:l thru n do q: q+аШ, il ,q:ratexpand(q/j),
if j<n then (
for i:l thru n do alti,il:ratexpand(al[i,il-q),
if j=(n-l) then b:copymatrix(al),
al: ratexpand( a.al)
),
det: (-ir(n+l)*q,
return(b) ) $
(c46) adjml: 'souriau(ml);
(d46)
(c47) det
(d47)
x z - y*
w у - v z
v у - w x
2
v z
w у - v z v у
W X
u z
V W
2
w
v w - u у
2
u у u x - v
uxz-v z-uy +2vwy-W
(c48) expand( det - determinant (ml.));
(d48) 0
(c49) invhilb4 - souriau(hilbert4) / det;
(d49)
[ 0
[
[ 0
[
[ 0
[
[ 0
0
0
0
0
0
0
0
0
0 ]
]
0 1
]
0 ]
]
0 ]
46 Как пользоваться системой компьютерной алгебры
Для решения линейной системы мы можем воспользоваться
командой solve в виде
solve([eqveq2r...l[xvx2y...]),
где eq. - уравнения (в которых правая часть, предполагаемая
равной 0, может быть опущена), ах - неизвестные. Ниже
приведено несколько примеров численно неустойчивых систем.
Результат функции solve приводится в векторной форме. Позже
мы увидим, как извлекать интересующие нас значения.
Читатель может заметить, как точные вычисления с рациональными
числами могут помогать в случае неустойчивости.
(cl) eqll: 3*х+4*у-7;
(dl) 4 у + 3 х - 7
(с2) eql2: 3*х+400001/100000 ♦у-700001/100000;
400001 у 700001
(d2) + 3 х
100000 100000
(сЗ) solve( [eqll,eql21, tx,yl);
(d3) [fx = 1, у = 1]]
(c4) eql3: 3*x+399999/100000 *y-700004/100000;
399999 у 175001
(d4) + 3 x
100000 25000
(c5) solve([eqll,eql3], tx,y]);
23
(d5) [[x = —, у = - 41]
3
(сб) eql4: 3*x+3999992/1000000 *y - 7000042/1000000;
499999 у 3500021
(d6) + 3 x
125000 500000
(c7) solve([eqll,eql4], lx,yl);
28 21
(d7) [[x = --, у = ]]
3 4
Компьютерная алгебра 47
Разумеется, можно также решать системы с символьными
матрицами. Здесь уравнения выписаны в явном виде.
(с8) el: a*(r+s) +3*b*(r-s) = u+v;
(d8) a(s+r)+3b(r-s)=u+v
(c9) e2: a*(r-s) -b*(r+s) = u-v;
(d9) -b(s+r)+a(r-s)=u-v
(clO) e3: l-3*w = u + v;
(dlO) -3w+l=u+v
(ell) e4:a**2+3*b**2-3*z = r+s;
2 2
(dll) -3z + 3b + a = r + s
(cl2) solve([el,e2,e3,e4],[u,v,r\sl);
2 2 2
(dl2) [fu = - (- 3 a z + b Fa - 9 z) + b (9 w - 3)
4 4
+ aCw-l)+9b + a )/F b),
2 2 2
v = (- 3 a z+b Fa -9z)+aCw-l)+bC-9w)
4 4
+ 9 b + a )/F b),
2 3 2 3
r=C az + bCa -9z)-3w + 9b -3ab -a +1)
/F b),
2 3 2 3
s=(-3az+bCa -9z)+3w+9b +3ab +a
- l)/F b)
]]
1.5.4. Дифференцирование - ряды Тейлора
Любая система компьютерной алгебры содержит более или
менее полный набор команд, связанных с понятием
дифференцирования. Эти операции тесно связаны с командами упрощения.
Без хорошего аппарата упрощения мы рискуем очень быстро
получить формулы, с которыми невозможно работать.
48 Как пользоваться системой компьютерной алгебры
(cl) fl:2*(log(x**2-x+l)/6 + atan(B*x-l)/sqrtC))/sqrtC)
-log(x+l)/3);
2 х - 1
2 atan( )
log(x - x +• 1) sqrtC) log(x + 1)
(dl) 2 ( + )
6 sqrtC) 3
(c2) dfl: diff(fl,x);
2 2 x - 1 1
(d2) 2 ( + )
2 2 3 (x + 1)
B x - 1) 6 (x - x + 1)
3 c + 1}
3
(c3) dfl:ratsimp(dfl);
2 x
(d3)
3
x + 1
В системе MACSYMA есть также функция
taylor(function, variable, initial, order)
Символ VT/" перед результатом указывает на то, что мы
имеем дело с усеченным разложением. Операции с результатом
такого вида принимают во внимание приписываемый ему
порядок. В строке с! мы пользуемся функцией subst(x, у, z),
которая вместо у в выражение z подставляет х. п
(с4) q: A- sqrt(l-e**2))/e;
2
1 - sqrtd - е )
(d4)
е
(с5) taylor(q,e,0,10);
3 5 7 9
ее е 5 е 7 е
(d5)/T/ - + „ + — + + + . . .
2 8 16 128 256
(сб) аЗ:(u-sin(u))/sin(u)**3;
Компьютерная алгебра 49
u - sin(u)
«16)
3
sin (u)
(c7) a3: substB*t/(l+t**2), sin(u),a3)$
(c8) a3:substB*atan(t),u,a3)$
(c9) a3t: taylor(a3,t,0,10);
2 4 6 8 10
1 3 t 4t 4t 4t 4t
(d9)/T/ - + + + + . . .
6 10 35 315 1155 3003
(clO) taylor(sqrt(l- (k*sin(x))**2),x,0,6);
2 2 4 2 4
kx Ck - 4 к ) x
(dlO)/T/ 1
2 24
6 4 2 6
D5 к - 60 к + 16 к ) x
720
(ell) %*%;
2 4 2 6
2 2 к х B к ) x
(dll)/T/ 1 - к х + + . . .
3 45
Можно также работать с оператором дифференцирования. В
первом примере мы показываем, как, исходя из неявной
функции g(x,y)y получать последовательные производные у по х.
Команда depends означает здесь, что g зависит от х и у> ay
зависит от х. Функция part позволяет нам выделять часть
формулы с помощью метода, основанного на представлении этой
формулы в памяти в виде дерева. Мы видим, что MACSYMA
использует один и тот же символ d как для полных, так и для
частных производных.
(с12) depends(g,[х,у],у,[хЗ);
(dl2) [g(x, у), у(х)]
(с13) diff(g,x);
176—4
50 Как пользоваться системой компьютерной алгебры
dg dy dg
(dl3) + —
dy dx dx
(cl4) solve(%,diff(y.x));
dg
dy dx
(dl4) [— = 1
dx dg
dy
(cl5) dydx:part(%,1,2);
dg
dx
(dl5)
dg
dy
(cl6) diff(g,x,2);
2 2 2 2 2
dg d у dy d g dy d g d g dy d g
(dl6) + — ( + ) + + —
dy 2 dx 2 dx dx dy dx dy dx 2
dx dy dx
(cl7) subst(dydx,diff(y,x),%)$
(cl8) solve(%,diff(y,x,2))$
(cl9) d2ydx2:part(%,l,2);
2 2 2
dg 2 d g d g dg 2 dg d g dg
(__) — + — (__) _ 2
dx 2 2 dy dx dx dy dy
dy dx
(dl9)
A3
dy
(c20) diff(g,x,3)J
(c21) subst(dydx,diff(y,x),subst(d2ydx2,diff(y,x,2),%))$
(c22) solve(%,diff(y,x,3))S
(c23) d3ydx3:part(%, 1,2);
Компьютерная алгебра 51
3 2
dg 3 dg d g dg 3 d g 2
(d23) ((--) 3 ( —) ( —)
dx dy 3 dx , 2
dy dy
2 2 2 3
dg 2 d g dg dg d g dg 2 d g d g dg 4
+ (9 (--) 3 ( —) ) (--)
dx dx dy dy dx 2 dy 2 3 dy
dx dy dx
3 2 2
dgdg dgdg dg3
+ о + з ) („)
dx 2 dx dy 2 dy
dx dy dx
3 2
dg 2 d g dg d g 2 dg 2 dg 5
+ (- 3 ( —) 6 — ( ) ) ( —) )/( —)
dx 2 dx dx dy dy dy
dx dy
(c24) remove(tx,у1,dependency)$
Получив эти формулы, можно попытаться применить их к
конкретному примеру. Сначала заменим g функцией ехр()С + у ),
затем передадим весьма общей команде ev системы MACSYMA
задание применить операторы дифференцирования. Очевидно,
нам нужно найти производные, относящиеся к функции
х2 + у2 = constant.
(с25) fctO: subst(%e**(x**2+y**2)-l,g,dydx);
2 2
1 у + х
— (%е - 1)
dx
(d25)
2 2
1 у + х
— (%е - 1)
dy
(с26) ev(fctO,diff);
х
(d26)
У
(с27) fctl:subst(%e**(x**2+y**2)-l,g,d2ydx2)$
52 Как пользоваться системой компьютерной алгебры
(с28) ev(fctl,diff)$
(с29) ratexpand(%);
2
1 х
(d29)
У 3 .
У
(сЗО) removeUg], dependency)$
Следующий пример показывает, как получить производные
"функции от функции", используя обозначение для композиции:
gof. Мы искусственно используем оператор некоммутативного
умножения, т.е. точку. Последовательные производные функции
g будут обозначаться с помощью индексов.
(с31) depends(g,f,f,x);
(d31) [g(f), f(x)l
(c32) dl:diff(g,x);
df dg
(d32)
dx df
(c33) subst(gtll.f ,diff(g,f),dl);
df
(d33) (g . f) —
1 dx
(c34) d2:diff(g,x,2);
2 2
df 2 d g d f dg
(d34) ( —) — +
dx 2 2 df
df dx
(c35) dd2:d2$
(c36) for i:l thru 2 do dd2: substtglil.f,diff(g,f,i),dd2)S
(c37) dd2;
2
d f df 2
(d37) (g . f) — + (g . f) (--)
1 2 2 dx
dx
Компьютерная алгебра 53
(с38) d3:diff(g,x,3)$
(с39) dd3:d3$
(с40) for i:l thru 3 do dd3: subst(gli].f,diff(g,f,i),dd3)J
(c41) dd3;
3 2
d f df d f df 3
(d41) (g . f) — + 3 (g . f) + (g . f) (--)
1 3 2 dx 2 3 • dx
dx dx
(c42) d5:diff(g,x,5)$
(c43) dd5:d5$
(c44) for i:l thru 5 do dd5: subsUgtil.f,diff(g,f,i),dd5)f
(c45) dd5;
5 4 2 3
df dfdf dfdf
(d45)(g . f) — + 5 (g . f) + 10 (g . f)
1 5 2 • dx 4 2 2 3
dx dx dx dx
3 2
df 2 d f df d f 2
+ 10 (g . f) ( —) — + 15 (g . f) — ( —)
3 dx 3 3 dx 2
dx dx
2
df 3 d f df 5
+ 10 (g . f) ( —) — + (g . f) (--)
4 dx 2 5 dx
dx
1.5.5. Упрощение формул
Проблема упрощения является сложной проблемой, как мы
убедимся далее в этой книге. Современные системы, в
особенности MACSYMA, предлагают пользователю набор ключей и
параметров, позволяющих управлять разложением формул и, таким
образом, избегать того, чтобы грубое применение команд
приводило к очень сложным результатам, в которых информация
полностью "тонет". Мы уже встречались с употреблением
функции expand. Наряду с ней имеется целый набор функций, поз-
54 Как пользоваться системой компьютерной алгебры
воляющих выполнять более деликатные преобразования:
разложение на множители, усеченное разложение в ряды, вычисления
с сокращением на НОД или без такого сокращения,
упорядочение переменных, раскрытие скобок в произведениях,
вычисления с коммутативными или некоммутативными величинами и т.д.
Навыки корректного использования этих ключей и команд
приобретаются в результате практики. Ясно, что прямолинейная
атака на настоящие проблемы может привести к
неожиданностям: огромным разложениям, ограничениям по времени,
недостатку памяти, ... . Трудно давать какие-либо общие
рекомендации, кроме семь раз отмерь, один раз отрежь; советуем
также просчитать какие-нибудь простые примеры, чтобы
составить представление о размерах задачи. Несколько следующих
простых примеров демонстрируют некоторые из возможностей
системы. Заинтересованный читатель может обратиться к
пособиям по системам REDUCE и MACSYMA.
Нам уже встречалась функция subst, которая выполняет
чисто синтаксические подстановки. Таким образом, в строке
с2 subst не распознает в третьем аргументе выражение х + у.
С другой стороны, функция rat subst анализирует этот третий
аргумент более подробно. Наконец, на примере определенной
ниже функции fullsub видно, что процесс можно использовать
рекурсивно.
(с2) subst(a,x+y,x+z+y);
(d2) z + у + х
(сЗ) ratsubst(a,x+y,y+z+x);
(d3) z + а
(c4) ratsubst(b*a,a**2,a**4);
2 2
(d4) a b
(c5) fullsuMu, v,w):= if w=(w2:ratsubst(u,v,w))
then w else fullsub(u,v,w2)$
(c6) fullsub(b*a,a**2,a**4);
3
(d6) a b
Компьютерная алгебра 55
С помощью системных переменных maxposex и maxnegex можно
управлять разложением выражений так, чтобы ограничить те из
них, которые рискуют взорваться.
(с7) maxposex:4;
(d7) 4
(с8) p0:(a+b)**2 +(a+b)**3 +(a+b)**5;
5 3 2
(d8) (b + a) + (b + a). + (b + a)
(c9) pO:expand(pO);
5 3 2 2 2 3 2
(d9) (b+a) +b +3ab +b +3a b+2ab+a +a
(clO) maxnegex:3;
(dlO) 3
(ell) p2: l/(x-a)**2 + l/(x-b)**2 +a*b/(x-a-b)**4;
a b 1 1
(dll) + +
4 2 2
(x - b - a) (x - b) (x - a)
(cl2) p3:expand(p2);
1 1 a b
(dl2) + +
2 2 2 2 4
x -2bx+b x -2ax+a (x - b - a)
Ключ булева типа exponent ialize, установленный в
состояние true, позволяет приводить тригонометрические и
гиперболические функции к экспоненциальному виду.
(с13) exponentialize:true;
(dl3) true
(cl4) zl:cosh(x);
X ~ X
%e + %e
(dl4)
2
(cl5) zO:tan(x);
56 Как пользоваться системой компьютерной алгебры
Xi х - Xi х
Xi (%е - Хе )
(dl5)
Xi x - Xi x
Хе + Хе .
Ключ exponent ialize или функция, носящая то же имя,
часто оказываются полезными при упрощении сложных
тригонометрических выражений. Примером тому служит теорема Морли .
Пусть ABC - треугольник. Возьмем трисектрисы трех его
углов. Две трисектрисы углов В и С, ближайшие, к стороне ВС,
пересекаются в точке А . Аналогично получаем точки В и С-.
Треугольник ABC. равносторонний. Достаточно доказать, что
он равнобедренный, т.е. А Вг= АгС . Пользуясь соотношениями
АВ = 2/? sin С, ВС = 2# sin A, CA = 2RsinB
(R - радиус описанного круга) и хорошо известными формулами
для решения треугольников, можно выразить А1В1 и АгСг как
функции от /?, В и С. Следующие команды учитывают
однородность задачи относительно R и очевидных перестановок. Здесь
видно, что функция ev допускает параллельные подстановки.
Равенство двух длин доказывается за два шага. Сначала мы
извлекаем числитель разности, затем применяем функцию
общего упрощения radcan к экспоненциальной форме этого
числителя. Устанавливая значение глобального параметра ratdenomdi-
vide равным false, мы добиваемся того, что получающаяся в
результате рациональная дробь остается в виде дроби, а не
суммы дробей. Такие вычисления с помощью "грубой силы"
достаточно длинны и трудны, и читатель, несомненно,
предпочтет элегантное доказательство Коксетера [Coxeter 1961], но
тем не менее это характерный пример помощи, которую можно
получить от системы компьютерной алгебры.
(сЗ) bal: sin(a) * sin(c/3) / sin((b+c)/3);
с
sin(a) sin(-)
" 3
(d3)
с + b
sin( )
3
Этот пример и его решение предложены Д.Лазаром.
Компьютерная алгебра 57
(с4) bcl: ev(bal,a=c,c=a);
а
sin(-) sin(c)
3
(d4)
b + a
sin( )
3
(c5) bal: subst(%pi-b-c,a,bal);
с
sin(-) sin(c + b)
3
(d5)
с + b
sin( )
3
(c6) bcl: subst(%pi-b-c,a,bcl);
- с - b + %pi
sin( ) sin(c)
3
(d6)
%pi - с
sin( )
3
(c7) alcl2:bal+bcl-2*bal*bcl*cos(b/3)$
(c8) albl2:ev(alcl2,b=c,c=b)$
(c9) ratdenomdivide:falseS
(clO) r:num(ratexpand(albl2-alcl2))S
Time= 922 msec.
(ell) radcan(exponentialize(r));
Time= 68948 msec.
(dll) 0
С помощью функции map произвольный оператор может
применяться к каждому элементу суммы. В следующем примере мы
разлагаем дробь на простейшие дроби (после раскрытия в
знаменателе скобок, чтобы несколько усложнить пример), а затем
разлагаем каждый элемент результата на множители с помощью
функции тар.
58 Как пользоваться системой компьютерной алгебры
(cl) el:(x+2)/((x+3)*(x+b)*(x-c)**2);
х + 2
(dl)
2
(х + 3) (х + b) (x - с)
(c2) el:ratsimp(el);
4 3
(d2) (x + 2)/(x +(-2c+b+3)x
2 2 2
+ (c + (- 2 b - 6) с + 3 b) x + ((b + 3) с - 6 b с) x
2
+ 3 b с )
(c3) e2:partfrac(el,x);
2 4 3
(d3) - (c + 4 с - b + 6)/((c + B b + 6) с
2 2 2 2
+ (b + 12 b + 9) с + F b + 18 b) с + 9 b ) (x - c))
с + 2
+
2 2
(с + (b + 3) с + 3 b) (x - с)
b - 2
+
2 2 3 2
((b - 3) с + B b - 6 b) с + b - 3 b ) (x + b)
1
2
((b - 3) с + F b - 18) с + 9 b - 27) (x + 3)
(c4) e2:map(factor,e2);
2
c+4c-b + 6 c-+2
(d4) +
2 2 2
(c + 3) (c + b) (x - c) (c +3) (c + b) (x - c)
b - 2 1
+
2 2
(b - 3) (c + b) (x + b) (b - 3) (c +3) (x + 3)
Функция polydecomp для данного полинома выдает список
Компьютерная алгебра 59
полиномов, которые после выполнения композиций дают
исходный полином:
(с5) big:1769472*s**8 - 3538944*s**7 +3907584*s**6
-2764800*s**5 +1378560*6**4 -484608*s**3 +119520*s**2
-18768*s +1585$
(c6) polydecomp(big,s);
2
2 s - 13 2
(d6) [3 s - 2, , 6 s + 11, 4 s - 1]
12
Наконец, можно определить правила упрощения с помощью
функции let, а затем применять их с помощью функции let-
simp.
(cl) let(a*:2,%i);
2
(d2) a --> %i
(сЗ) еО: а**2*(а**4-а)- а**3 +1;
2 4 3
(d3) а (а - а) - а +1
(с4) letsimp(eO);
(d4) - 2 %i a - %i + 1
(с5) let(om**3,l);
3
(d5) от —> 1
(сб) let(om**2, -l-om)$
(c7) pxyz: (x+y+z)*(x+om*y+om**2*z)*(x+om**2*y+om*z);
2 2
(d7) (z + у + x) (от z + от у + x) (от z + от у + x)
(c8) pxyz: letsimp(expand(%));
3 3 3
(d8) z - 3 x y, z + у +х
В конце этого раздела об упрощениях следует обратить
внимание на стиль программирования. Использование доступной
пользователю техники, инспирированной Лиспом, позволяет
60 Как пользоваться системой компьютерной алгебры
экономить иногда значительное время. Продемонстрируем это
явление на двух функциях, heightl и height2, которые
(первая в фортрановском стиле, а вторая - в лисповском) находят
наибольший - по абсолютному значению - коэффициент полинома
над Z. Функция construct используется для получения
полинома данной степени с целыми коэффициентами, выбранными
случайно из интервала между -235 и 235-1. Чтобы облегчить
читателю понимание лисповской формы, мы добавили несколько
коротких примеров, непосредственно использующих функции
numf actor, maplist и apply. Для более детального разбора
читатель должен обратиться к пособию по системе MACSYMA.
Время дается в миллисекундах. Вычисления проводились на
компьютере Honeywell DPS8-70M.
(с29) heightl(poly,var):= blockdm, maxi, il,
maxi:0
for i:0 thru hipow(poly,var) do
( m: abs(coeff(poly,var,i)),
if m>maxi then maxi:m),
return(maxi) )$
(c30) height2(poly):= apply(max,maplist(absfact,poly) )$
(c31) absfact(z):= abs(numfactor(z)) S
(c32) construct (n):= block([pol,i]),
pol:0,
for i:l thru n do pol:pol+random() * x^i,
return (pol) );
(c33) pO:constructA0);
10 9 8
(d33) -13379176882 x + 8895517289 x - 9101752241 x
7 R R
- 426691508 x + 17446139911 x + 33598445718 X
4 3 2
+ 33193902370 x + 3493507944 x - 5008989035 x
- 17002352646 x
(c34) numfactor( -34*x**2);
(d34) -34
(c35) maplist(absfact.pO);
(d35) [13379176882, 8895517289, 9101752241, 426691508,
Компьютерная алгебра 61
17446139911, 33598445718, 33193902370, 3493507944,
5008989035, 170023526461
(с36) apply(max,%);
(d36) 33598445718
(с37) plrconstruct B0)$
(с38) heightl(pl,x);
Time= 851 msec.
(d38) 33598445718
(c39) height2(pl);
Time= 272 msec.
(d39) 33598445718
(c40) p2:construct D0)$
(c41) heightl(p2,x);
Time= 2268 msec.
(d41) 32727645108
(c42) height2(p2);
Time= 529 msec.
(d42) 32727645108
(c43) plOO:construct "A00)$
(c44) heightl(pl00,x);
Time= 12030 msec.
(d44) 34073350797
(c45) height2'(pl00);
Time= 1577 msec.
(d45) 34073350797
1.5.6. Интегрирование
Автоматизация нахождения интегралов всегда представляла
собой важную часть компьютерной алгебры из-за престижности
62 Как пользоваться системой компьютерной алгебры
данной задачи. С практической точки зрения эффективность
системы компьютерной алгебры при выполнении преобразований
рациональных выражений более существенна, чем нахождение
первообразных. Но данная задача привела к огромному
продвижению в области использования компьютеров. С ней тесно
связаны имена Слейгла, Мозеса, Риша. MACSYMA была одной из
первых систем, получивших реальную пользу от тщательно
проработанной команды интегрирования. В системе REDUCE
использовались в дальнейшем новейшие достижения, полученные в
работах Кембриджской группы (Великобритания).
Команда интегрирования в системе MACSYMA - integrate.
Видно, что результаты появляются в виде, который может
потребовать переупорядочения (например, результат d2).
(cl) integrate(l/(l-x**4),x);
log(x + 1) atan(x) log(x - 1)
(dl) +
4 2 4
(c2) integrate(sinh(x)**4,x);
4 x - 4 x
%e 2 x - 2 x %e
2 %e +2 %e + 6 x
4 4
(d2>
16
(c3) integrate(x**3*cos(x**2),x);
2 2 2
. x sin(x) + cos(x)
(d3)
2
Иногда окончательная форма результата может выглядеть
неожиданно:
(с4) integrate(sin(a/x)-cos(x**2),x);
(d4) (sqrt(%pi) ((sqrtB) %i - sqrtB))
(sqrtB) %i + sqrtB)) x
erf( )
2
(sqrtB> %i - sqrtB)) x
+ (sqrtB) %i + sqrtB)) erf( ))
Компьютерная алгебра 63
а
/ cos(-)
о Г X
+ 8 sin(-) х + 8 а I dx)/8
х ] х
/
Возможно выполнять также определенное интегрирование.
Система MACSYMA резервирует символ inf для со. Если команде
integrate требуется дополнительная информация, пользователю
задается вопрос.
(с5) integrate(l/sqrt((l+x)**3 * A+ 2*х)),х, 0,inf);
(d5) 2 sqrtB) - 2
(сб) integrate(l/sqrt((l+x)**3 * A + k*x)),x, 0,inf);
Is k positive, negative, or zero?
positive;
Is k - 1 zero or nonzero?
nonzero;
Is k - 1 positive or negative?
positive;
2 sqrt(k) 2
(d6)
k - 1 k - 1
(c7) integrate(l/sqrt(x * (u-x)),x, 0,u);
Is u positive, negative, or zero?
positive
(d7) %pi
Наряду с определенным интегрированием следует упомянуть
преобразование Лапласа, осуществляемое двумя командами lap-
lace и ilt (обратное).
(с12) laplace(%e**(a*t)*(b*t**2+c*t-sin(d*t)),t,s);
3 2
(dl2) - ((d - с) s + (- 3 a d + 3 а с - 2 b) s
64 Как пользоваться системой компьютерной алгебры
2 2 2 2
+ (- с d +3a d- 3 а с + 4 a b) s + (а с - 2 b) d
33 25 42 23
-a d+a с - 2 a b)/(s - 5 as + (d + 10 а ) s
2 32 22 4 325
+ (- 3 a d - 10 a ) s +Ca d + 5 a ) s - a d -a)
(cl3) ilt(%,s,u);
Is d zero or nonzero?
nonzero;
a u 2 a u a u
(dl3) - %e sin(d u) + b u %e + с u %e
Преобразование Лапласа может быть использовано для
решения интегральных уравнений. В строке с\Б отметим
использование символа \ который запрещает вычисление значений.
Здесь налицо аналогия с лисповской командой quote.
Результат в строке dl5 показывает это в явном виде. Аналогично
преобразование Лапласа неизвестной функции остается без
численного значения.
(с15) 'integrate(cosh(a*x)*f(t-x),x,0,t) +b*f(t)=t**3;
t
/
[ . 3
(dl5) I f(t - x) cosh(a x) dx + b f(t) = t
]
/
0
(cl6) laplace(°/.,t,s);
•s laplaceCf(t), t, s) 6
(dl6) b laplace(f(t), t, s) + = —
2 2 4
s - a s
Решаем это линейное уравнение относительно переменной
laplace(f(t)Xs)
(с17) linsolve([%], ['laplacetf(t),t,s)]);
Компьютерная алгебра 65
2 2
6 s - 6 а
(dl7) tlaplace(f(t), t, s) = ]
6 5 2 4
bs +s -a bs
(cl8) formu:% $
Теперь нам нужно выделить интересующую нас часть, т.е.
правую часть соотношения d\7. Для этого воспользуемся
функцией part, аргументы которой связаны со структурой
обрабатываемой формулы. Кроме того, с помощью функции dpart мы
можем заранее проверить, что выделяем требуемую часть
формулы.
(с19) dpart(formu[l],2);
(dl9) laplace(f(t), t, s)
ii и и и и и и и и и и и и и и H и и и H
2 2
6 s - 6 a
524
"bs + s - a b s
и и и и и и и и и и и и и и и и и и и и
(c20) res: part(formull],2)$
(c21) ilt(res,s,t);
- — 2 2 2 2
2b 6 a b + 6 2 A2 a b +6)
(d21) %e (( -)
6 3 6 3
a b a b
2 2
sqrtD a b + 1) t 2 2
sinh( -)/sqrtD a b + 1)
2 b
2 2
2 2 sqrtD a b + 1) t
F a b +6) cosh( ) 3 2
2 b t 3 t
_ )/b + — +
6 3 b 2 2
a b a b
176—5
66 Как пользоваться системой компьютерной .алгебры
2 2
6 t 6 a b + 6
+ + _—
4 3 6 4
a b a b
Закончим простым примером решения интегрального
уравнения Фредгольма второго рода. Мы хотим решить уравнение
f(x,\) = x + \x3 Syf(y,*)dy + \x2 Sy2f(y,*)dy + Л* Sy3f(y,*)dy A)
0 0 0
с помощью следующего метода:
A) Положим
Л(Ю = S yf(y.*)dy
о
W = } y2f(y,*)dy
о
CW = } y3f(y,*)dy
о
Уравнение A) принимает вид
f(x,\) = х+ \х3А(\) + Хх2В(\) + ХхС(\) B)
B) В определениях для Л, В и С заменим функцию /(#,Л)
ее значением, полученным из уравнения B) с заменой х на у.
После интегрирования получим 3 линейных уравнения с 3
неизвестными Л, В и С.
C) Решим эту линейную систему и подставим полученные
значения в B). Таким образом мы получим требуемую функцию.
Решение с помощью системы MACSYMA непосредственно
следует данному алгоритму. Для упрощения входных данных мы
прежде всего определяем полезную функцию f{q\,q2).
(с2) f(ql,q2):= q2*a*ql/43+q2*b*ql/42+q2*c*ql+ql;
3 2
(d2) f(ql, q2) := q2 a ql + q2 b ql + q2 с ql + ql
(c3) eqa: a=integrate(y*f,(y, 1),y,0,1);
Компьютерная алгебра 67
B0 с + 15 b + 12 а) 1 + 20
(d3) a =
60
(с4) eqb: b=integrate(y~2*f(у,1),у,0,1);
A5 с + 12 b + 10 а) 1+15
(d4) b = ■
60
(с5) eqc: c=integrate(y~3*f(у,1),у,0,1);
D2 с + 35 b + 30 а) 1 + 42
(d5) с =
210
(сб) sol: solve([eqa.eqb.eqcl,la.b.c]);
1575 1 - 126000
(d6) Па = ,
3 2
1 - 4140 1 - 226800 1 + 378000
2100 1 + 94500
b = _ 1
3 2
1 - 4140 1 - 226800 1 + 378000
2
1 - 3510 1 - 75600
c = _ ]]
3 2
1 - 4140 1 - 226800 1 + 378000
Теперь выделим полезные значения ee/сгора-результата
после проверки элемента о функцией dpart.
(с7) dpart(sol,l,l,2);
И II II II II II II И II II II II II II II II II II II И II II II II II II II II II М II II И II II И
1575 1 - 126000
(d6) [[а = " . ",
мор и
" 1 - 4140 1 - 226800 1 + 378000"
II II II II II II II II II II II II II II н II II II II II II II II М II II М м II II II II II II и II
2100 1 + 94500
b = _
3 2
1 - 4140 1 - 226800 1 + 378000
2
1 - 3510 1 - 75600
с = ]5
3 2
1 - 4140 1 - 226800 1 + 378000
68 Как пользоваться системой компьютерной алгебры
(с8) a: parUsol, 1,1,2) %
(с9) b: part(sol,1,2,2) $
(сЮ) с: part(sol, 1,3,2) %
(ell) ratdenomdivide:false$
Далее нам нужно вычислить значение функции f(x,X) после
подстановки вместо а, Ь и с их значений. Можно
воспользоваться командой ev или ее разновидностью, как показано в
строке с12.
(с12) f(x,l),eval;
3
1 A575 1 - 126000) х
(dl2)
3 2 -
1 - 4140 1 - 226800 1 + 378000
2
1 B100 1 + 94500) х
+ *
3 2
1 - 4140 1 - 226800 1 + 378000
2 2
1A- 3510 1 - 75600) х
+ х
3 2
1 - 4140 1 - 226800 1 + 378000
Наконец, упорядочим и упростим результат, используя
команды ratvars и ratsimp. В качестве последнего примера
выполним также подстановку / = 1
(с13) ratvars(x, 1);
(d!3) [x, 1]
(с14) ratsimp(dl2);
2 3 2
(dl4) - A A575 х - 2100 х + 630 х)
3 2
+ 1 (- 126000 х - 94500 х + 151200 х) - 37800а х)
3 2
/A - 4140 1 - 226800 1 + 378000)
Компьютерная алгебра 69
(с15) subst(l,l,%);
3 2
124425 х 96600 х 226170 х
(dl5) + +
147061 147061 147061
1.6. ДОСТУПНОСТЬ СИСТЕМЫ MACSYMA
Предыдущие примеры дают только некоторое представление о
возможностях системы MACSYMA. Заинтересованный читатель
должен поупражняться на реальной системе. Он может
рассматривать также аспекты, не затронутые здесь: функции для
изображения кривых и поверхностей и особенно громадные
возможности библиотеки SHARE. Наилучшие версии системы MACSYMA
установлены на компьютерах VAX, на Лисп-машинах фирм
SYMBOLICS и LMI и на рабочих станциях SUN.
1.7. ДРУГИЕ СИСТЕМЫ
Описанные достоинства системы MACSYMA не должны
заставить нас забыть о существовании других систем компьютерной
алгебры. Система REDUCE, описанная ниже (см. приложение),
очень быстро развивается в течение последних нескольких
лет. В научном мире ее можно обнаружить почти на всех
машинах. Препроцессор для Лиспа, RLISP, используемый для ее
реализации, превращает ее в систему, легкую для понимания и
адаптации. Следует также упомянуть систему MAPLE
(написанную на языке Си и работающую под управлением операционной
системы UNIX), достаточно широко распространенную наравне с
SMP и AMP (написанными на языке ассемблера для машин серил
IBM). В качестве системы для первого знакомства нужно
упомянуть muMATH, работающую на микрокомпьютерах. В качестве
примера ее использования вернемся к интегральному
уравнению, которое мы уже рассматривали.
Как и в системе MACSYMA, можно определить
вспомогательную функцию F. Заметим, что для получения FY требуется
дважды обращаться к EVSUB. *
70 Как пользоваться системой компьютерной алгебры
? F:Q2*A»Q1~3+Q2*B*Q1+Q2*C*Q1+Q1 ;
8: Q1 + A Q2 <}1л3 + В Q2 0ЛЛ2 + С Q2 Q1
? FY:EVSUB(EVSUB(F,Q1,Y),Q2,L) ;
8: Y + А Ул3 L + В Ул2 L + С Y L
Определяем 3 уравнения, в которых присутствуют
интегралы.
? EQA:DEFINT(Y»FY,Y,0,1) == А ;
8: 1/3 + A L/5 + В L/4 + С L/3 == А
? EQB:DEFINT(Y~2»FY,Y,0,1) == В ;
8: 1/4 + A L/6 + В L/5 + С L/4 == В
? EQC:DEFINT(Y~3*FY,Y,0,1) == С ;
8: 1/5 + A L/7 + В L/6 + С L/5 == С >
Поскольку в muMATH нет функции, аналогичной команде
solve в системе MACSYMA, мы вручную составляем матрицу МА
линейной системы относительно неизвестных А, В я С.
Подобным образом получив второй член MB, решаем уравнение MA-V =
= MB.
? MA:{[L/5-l,L/4,L/3],[L/6,L/5-l,L/4],[L/7,L/6,L/5-l]};
8: {[(-5+L)/5,L/4,L/3],
[L/6,(-5+L)/5,L/4],
IL/7,L/6,(-5+L)/5]}
? MB:{[-l/3],[-l/41,[-l/5]> ;
8: {[-1/31,
[-1/41,
[-1/5]}
? V:MA \ MB $
Полагая L = 1 в решении V и вычисляя соответствующие
значения, мы вновь находим коэффициенты окончательного
полинома из примера для системы MACSYMA.
? L:l $
? EVAL(V) ;
Компьютерная алгебра 71
@: {[124425/147061],
[96600/147061],
[79109/147061]}
Наконец, мы не можем закончить этот раздел, не упомянув
0 новейшей системе компьютерной алгебры - SCRATCHPAD. Эта
система написана на языке Лисп для IBM-совместимых
компьютеров под управлением системы VM-CMS. Хотя она не достигла
степени развития систем REDUCE или MACSYMA по части команд
и доступных библиотек для решения обычных задач, она
отличается от этих классических систем новым подходом, который,
по-видимому, особенно импонирует математикам. На миг
вернемся к системе MACSYMA. Верно, что эта система может
некоторым образом работать с алгебраическими числами. Однако
результаты получаются за счет внутренних преобразований из
рекурсивной формы в форму в виде дерева и обратно, и позже
мы к этому вернемся. Этим обусловливается применение
'функции simplify в следующих примерах.
(cl) algebraic:true;
(dl) true
(c2) simplify(e):=ratdisrep(rat(e));
(d2) simplify(e) := ratdisrep(raUe))
(c3) E*B-%i))/C"(l/3)+%i);
5 B - %i)
(d3)
1/3
%i + 3
(c4) simplify*0/.);
2/3 1/3 2/3 1/3
C +73 - 1) %i - 7 3 +3 +7
(d4)
2
Если мы присвоим в качестве значения глобальной
переменной modulus простое число р, то будем работать над полем
1 , представление элементов которого симметрично
относительно 0 (включая 1 !). Например,
17 = (-3, -2, -1, 0, 1, 2, 3).
72 Как пользоваться системой компьютерной алгебры
Значение переменной modulus по умолчанию равно false.
Тогда мы работаем в Z, Q или R в зависимости от
обстоятельств, как было во всех примерах данной главы.
(с5) modulus:7;
(d5)
(Сб) рО: хЛ16+4;
(d6)
(с7) factor(рО);
4 2
(d7) (х - 2 х +
3)
.7
16
х +4
4 2 4 2
(х - х + 3) (х + х +3)
4 2
(х + 2 х + 3)
(с8) ratexpand(%);
<d8)
(с9) modulus:2;
(d9)
16
X
2
(clO) factor( (хЛ16-х)/(хЛ4-х));
4 4 3 4 3 2
(dlO) (x + x + 1) (x + x - 1) (x + x + x + x + 1)
(ell) simplify* (x'ne-xJ/tx^-x));
12 9 6 3
(dll) x +x+x+x+l
(cl2) factor(%);
4 4 3 4 3 2
(dl2) (x + x + 1) (x + x - 1) (x + x + x + x + 1)
Мы можем также определить расширение основного поля. Эту
роль выполняет функция tellrat. Проверка неприводимости
определяющих полиномов не производится.
(с13) tellratA+а+аЛ2);
Компьютерная алгебра 73
2
(dl3) [a + а + 1]
(с14) zO: l+a+a^+a^+l/a;
5 3 1
(dl4) a +a +a+-+l
а
(с15) zO: simplify(zO);
(dl5) a
(с16) simplify((x^2+x+a)*(x/42+x+a^2));
4
(dl6) x + х + 1
(с17) tellrat(b+b+a);
2 2
(dl7) [b + b + a, a + a + 1]
(cl8) zl:a+b;
(dl8) b + a
(cl9) izl: simplify(l/zl);
(dl9) a b + 1
(c20) simplify(zl*izl);
(d20) 1
(c21) tellrat(g/42+b*g+a+l);
2 2 2
(d21) [g + b g + a + 1, b + b + a, a +a+l]
(c22) z2: a+b+g+1;
(d22) g + b + a + l
(c23) iz2: simplify(l/z2);
(d23) ((a + 1) b + a) g + a b + 1
Вернемся в поле Q. У константы z2 остается формальное
значение 1 + а + Ъ + g.
(с24) modulus:false;
(d24) false
74 Как пользоваться системой компьютерной алгебры
(с25) simplify(l/z2);
((а + 3) b - 3 а - 2) g + (- 3 а - 2) b + 2 а - 1
(d25)
7
(с26) simplify(l/b);
(d26) (a + 1) b + а + 1
(с27) аО: a+6*b*g;
(d27) 6 b g + а
(c28) al: simplify(l/aO);
(d28) - ((E2422 a + 242820) b + 60084 a + 247536) g
+ A7676 a + 45972) b - 212117 a + 102415)/1244803
(c29) simplify(l/al);
(d29) 6 g b + a
К сожалению, как мы убедимся ниже, в системе MACSYMA
иногда возникают проблемы с разложением на множители
результатов в таких расширениях и даже при упрощении
рациональных функций при помощи НОД.
(сЗО) рО: хЛ2 + 3*b*x +a*g+2;
2
(d30) x +3 bx+ag+2
(с31) pi: (x-a)*(x-g);
(d31) (x - a) (x - g)
(c32) p3: simplify(pO*pl);
4 3
(d32) x +(-g + 3b-a)x + (B a - 3 b') g - 3 a b + 2)
2
x + (D a b + a - 1) g - 2 a - 1) x + ((a + 1) b + 2 a) g
+ a
(c33) simplify(p3/pl);
4 3
(d33) (x + (- g + 3 b - a) x
Компьютерная алгебра 75
2
+ (B а - 3 b) g - 3 a b +2) х
+ (D a b + а - 1) g - 2 а - 1) х + ((а + 1) b + 2 a) g
2
+ а)/(х + (- g - а) х + a g)
(с34) factor(рЗ);
4 3 3 2 2 2
(d34) х - g x + 3 b x -ax - 3 b g x +2agx
2 2
- 3 abx +2x +4abgx + agx-gx-2ax-x
+ abg + bg + 2ag + a
Если такие применения системы MACSYMA и являются
полезными, они не полны и требуют некоторого знакомства с
внутренним устройством системы. Пользователь может осознавать
некоторую ее неестественность, что может привести к хаккер-
ству. Именно этого и хотели избежать авторы SCRATCHPAD,
которые мыслили в терминах математических структур и общих
операций. Полное изучение этой системы выходит за рамки,
поставленные себе авторами данной книги. Читателю следует
обратиться к документации по SCRATCHPAD, которая в
настоящий момент является весьма краткой, но, несомненно, будет
разрастаться одновременно с информацией о SCRATCHPAD,
благодаря лекциям и демонстрациям. Тем не менее ниже
приводятся несколько маленьких примеров, дающих представление о
том, как работает SCRATCHPAD. Мы хотим написать функцию v
quotient, которая позволит нам делить два полинома,
расположенных по возрастанию степеней переменной. Прежде всего
нам нужно определить тип функции, указав, что два первых ее
аргумента принадлежат области полиномов от х над
рациональными числами (UP(x,RN))y третий берется из области
неотрицательных целых чисел (NNI), а результат принадлежит
области UP(x,RN) или является символом "failed". Настоящее
определение функции quotient использует примитивные операции,
которые аналогичны примитивным операциям, используемым в
системе MACSYMA. Важно отметить также описания типов всех
переменных до их использования.
76 Как пользоваться системой компьютерной алгебры
quotient:(UP(x,RN),UP(x,RN),NNI) -> Union("failed",UP(x,RN))
quotient(pl,p2,n) ==
mindeg(pl) < mindeg(p2) => "failed"
reste:UP(x,RN):=pl
degp2:mindeg(p2)
coefp2:coefTp2,degp2)
quot:UP(x,RNT:=0
while degree(quot) < n repeat
deg:mindeg(reste)
mon:=monom(deg-degp2,coef(reste,deg)/coefp2)
reste:=reste-Tmon*p2)
quot:=quot+mon
quot
0 total errors
Эту функцию теперь можно использовать, однако система
SCRATCHPAD компилирует ее при первом обращении.
quotient(l,l+x,8)
compiling quotient with signature
(P[x]RN,p[x]RN,NNI) -> Union(failed,Ptx]RN)
8 7 6 5 4 3 2
C) x -x +x -x +x -x + x - x + 1
Type: Union(failed,Ptx]RN)
quotient(x**2-x+l,x**3-x-6/7,8)
E)
84778967 8 - 18089477 7 2286095 6
( )x + ( )x + ( )x
10077696 1679616 279936
- 166061 5 - 8281 4 4459 3 - 889 2
+ ( )x + ( )x + ( )x + ( )x
46656 7776 1296 216
91 - 7
+ ( )x +
36 6
Type: Union(failed,Pfx]RN)
quot ient(x**2-x+l,x**3-x-6/7,8)
F)
84778967 8 - 18089477 7 2286095 6
( )x + ( )x + ( )x
10077696 1679616 279936
Компьютерная алгебра 77
- 166061 5 - 8281 4 4459 3 - 889 2
+ ( )х + ( )х + ( — )х + ( )х
46656 7776 1296 216
91 - 7
+ ( )х +
,36 6
Возьмем теперь пример алгебраического расширения, в
случае которого работа с системой MACSYMA не давала нам
полного удовлетворения. Мы используем область SimpleAlgebraicEx-
tension, выбрав поле, полиномиальную структуру и полином от
параметра. Это позволит нам определить новый тип: extl.
extl:=SAE(RN,UP(a,RN),a**2+a+l)
loading SAE LISPLIB С for domain SimpleAlgebraicExtension
loading MM LISPLIB С for domain ModMonic
G) SAE(RN,Pta]RN,(a**2)+a+l)
Type: aCategory
e:extl:=C/4)*a**2-a+G/4)
loading DMP LISPLIB С for domain
DistributedMultivariatePolynomial
loading DP LISPLIB С for domain DirectProduct
loading 0V LISPLIB С for domain OrderedVarlist
loading MP LISPLIB С for domain MultivariatePolynomial
loading RF LISPLIB С for domain RationalFunction
loading NRATINT LISPLIB С for package NuRatint
loading IR LISPLIB С for domain IntegrationResult
- 7
(8) ( )a + 1
4
Type: SAE(RN,Pta]RN,(a**2)+a+l)
— inversion of e
recipSextl (e)
28 44
(9) ( )a +
93 93
Type: Union(SAE(RN,P[alRN,(a**2)+a+l),failed)
e**2
78 Как пользоваться системой компьютерной алгебры
- 105 - 33
A0) ( )а +
16 16
Type: SAE(RN,P[a]RN,(a**2)+a+l)
е:=а**2-1
A1) - а - 2
Type: SAE(RN,P[a]RN,(a**2)+a+l)
Возьмем два полинома р\ и р2 с коэффициентами в этом
расширении, равные (х2 - а2)(х2 + Зх + а) и х2 - а2
соответственно, расписанные по степеням х. Отметим, что система
на этот раз правильно упрощает рациональную функцию р\/р2.
pl:UP(x,extl):=x**4+3*x**3+B*a+l)*x**2+C*a+3)*x-l
4 3 2
A2) х +3х + B а + 1) х +(За+3)х-1
Type: P[x]SAE(RN,P[a]RN,(a**2)+a+l)
p2:UP(x,extl):= х**2+а+1
2
A3) х + а + 1
Type: Ptx]SAE(RN,P[a]RN,(a**2)+a+l)
p2/pl
2
A4) х + Зх + а
Type: P[xlSAE(RN,P[a]RN,(a**2)+a+l)
Как новейшая система компьютерной алгебры, предлагаемая
математикам и инженерам, несомненно, SCRATCHPAD будет иметь
значительный спрос. Ее использование, как и использование
других систем, приведет к ее развитию, и остается только
пожелать, чтобы ее авторы сделали ее доступной как можно
более широкому кругу людей повсюду.
Глава 2
ПРОБЛЕМА ПРЕДСТАВЛЕНИЯ ДАННЫХ
Эта глава посвящена фундаментальной задаче компьютерной
алгебры - представлению математических объектов в ЭВМ. В
ней рассматриваются вопросы типа: "Каким образом
представляются данные в компьютере?"; "Я могу представить задачу
несколькими способами - какой из них наиболее эффективен?"
и т.д. Не рассматриваются чисто технические вопросы систем
REDUCE или MACSYMA, но разъясняются основные принципы и
ловушки, в которые пользователь легко может попасть при
выборе представления.
2.1. ПРЕДСТАВЛЕНИЕ ЦЕЛЫХ ЧИСЕЛ
"Бог создал целые числа, все остальное - дело рук
человеческих", - сказал выдающийся алгебраист Кронекер. Тем не
менее, у людей возникают кое-какие проблемы с
представлением целых чисел. Большинство языков программирования рас-
сматривают их как конечное множество, например {-2 , ...
..., 231-1}. Весьма легко сказать "мои данные невелики,
ответ получится маленький, значит, мне не понадобятся
большие целые числа, и этого конечного множества мне вполне
хватит", но такое рассуждение совершенно неверно.
Предположим, что мы хотим вычислить НОД двух следующих
полиномов ([Knuth 1969], [Brown 1971]):
А(х) = xs+ x6- 3jc4- 3*3+ 8х2+ 2х - 5;
В(х) = Зх6+ 5х4- Ах2- 9х + 21.
Начинаем вычисления, пользуясь алгоритмом Евклида (мы
вернемся к этому примеру в разделе "НОД"). Последнее вычисляв-
80 Проблема представления данных
мое целое число содержит 35 десятичных цифр, т.е. 117 бит,
и поскольку результат является целым числом, получаем, что
полиномы взаимно просты. Однако данные в задаче маленькие
(наибольшее из чисел равно 21), результат "взаимно просты"
является ответом типа да/нет и требует для записи всего
один бит. Эта проблема разбухания промежуточных выражений
представляет одну из наиболее серьезных проблем
компьютерной алгебры. Такие проблемы возникают также в задаче
интегрирования [Davenport 1981, с. 155-162] и в других
ситуациях. В главе "Современные алгоритмы" представлен алгоритм
вычисления НОД полиномов, который свободен от этого
недостатка.
Также необходимо бывает рассматривать настоящие
математические целые числа произвольной длины. Почти все системы
компьютерной алгебры допускают работу с ними, и тривиальным
тестом, которому можно подвергнуть систему компьютерной
алгебры, является вычисление такого числа. Представление
таких больших целых чисел (часто называемых по-английски
"bignums") достаточно очевидно: выбирают в качестве
основания некоторое число N таким же образом, как при обычном
десятичном представлении используют в качестве основания
число 10, после чего каждое число представляется своим
знаком (+ или -) и последовательностью "цифр" (т.е. целых
чисел от 0 до N -1) относительно этого основания. Наиболее
часто в качестве основания используются степени 2 или 10:
степени 10 облегчают ввод и вывод чисел (т.е. их
преобразование из десятичной системы или в десятичную систему), в то
время как степени 2 позволяют более эффективно выполнять
некоторые промежуточные вычисления, поскольку умножение на
основание или деление на него могут быть осуществлены путем
простого сдвига. Этот вопрос рассматривается в работе
[Davenport, Padget 1987]. Обычно целесообразно выбирать
основание как можно большим (при условии, что "цифра"
помещается в одном слове). Например, на 32-битовых ЭВМ (таких, как
большие компьютеры IBM типа 43ХХ и ЗОХХ и Motorola 68020)
можно выбрать в качестве десятичного основания 109, а в
качестве двоичного основания 2 или 2 . Как правило, 2
Компьютерная алгебра 81
не используется, поскольку при этом возникают трудности при
сложении двух цифр: знак переноса (если он имеется) не
может храниться в машинном слове, но должен быть получен
способом, полностью зависящим от типа компьютера ("индикатор
переполнения" и т.д.).
После выбора такого представления сложение, вычитание и
умножение целых чисел становятся, по крайней мере в
принципе, довольно простыми, - достаточно воспользоваться теми
алгоритмами, которые изучают в начальной школе для
десятичных целых чисел. Умножение цифр приводит тем не менее к
некоторой проблеме. Для записи в память произведения двух
чисел, каждое из которых содержится в одном слове,
требуется два слова. У большинства компьютеров имеется для этого
соответствующая команда, но языки "высокого уровня" не дают
к ней доступа (единственное исключение - BCPL [Richards,
Whitby- Strevens 1979] с операцией MULDIV). Следовательно,
почти все системы, работающие с большими целыми числами,
содержат написанную на машинном языке функцию для этого
вычисления.
Деление представляет значительно более сложную задачу,
поскольку метод, изучаемый в школе, не является алгоритмом,
так как он требует угадывания цифры частного. Кнут (см.
[Knuth 1981]) детально описал эту проблему и предложил
алгоритм такого угадывания, который почти всегда является
правильным, никогда не дает слишком маленького ответа и
никогда не дает ответа, большего истинного более чем на
единицу (в таком случае нужно для исправления ошибки
вычесть делитель из делимого или же прибавить его). Для
вычисления НОД имеется алгоритм Евклида, а также несколько
других методов, которые могут оказаться более эффективными.
Эта задача также рассматривалась Кнутом в работе [Knuth
1981].
Но из того, что системы позволяют работать с большими
числами, не следует, что можно не обращать внимания на рост
чисел. Если у нас есть два числа по п цифр, то для их
сложения требуется время счета, пропорциональное /г, или, более
формально, время 0(п). Для их умножения требуется время
176—6
82 Проблема представления данных
1J
счета 0(п ). Для вычисления НОД, основной операции при
работе с рациональными числами, требуется время 0(/г3), или
0(п2)у если проявить немного изобретательности . Из этого
следует, что если целые числа становятся в 10 раз длиннее,
то время счета возрастает в 10, или в 100, или в 1000 раз.
Значит, всегда выгодно уменьшать размер чисел. Например,
более эффективно интегрировать выражение \/х + 2/х , чем
выражение 12371265/B49912457*) + 24742530/B49912457*2 ).
Что касается разложения чисел на множители, то здесь
ситуация гораздо менее ясная. Известный наивный алгоритм,
состоящий в том, чтобы испытать все простые числа, меньшие
N1/2y требует времени счета 0(N log N), где множитель
log N представляет размер рассматриваемых целых чисел. Если
N - целое число, состоящее из п цифр, получаем OA0n n ),
т.е. экспоненциальное по п время. Существуют (хотя и не
встроены ни в одну достаточно распространенную систему ком-
3)
пьютерной алгебры) лучшие алгоритмы, время счета которых
растет медленнее, чем экспоненциально, но быстрее, чем
полиномиально, т.е. равно 0(ехр((/г log /гI/2). Для целых
чисел реального размера получено [Wunderlicht 1979] время
0(iV0156), т.е. чуть меньше, . чем ОA0п/6). Краткий обзор
того, что понимается под "реальным" размером, дан в работе
[Macmillan, Davenport. 1984]. Эта проблема активно
исследуется, в первую очередь в связи с интересом, который она
представляет для криптографии. В общем можно заметить, что
подход "я вычислил целое число; теперь я собираюсь
разложить его на множители" является очень опасным.
В принципе достаточно 0(п log я log log n) [Aho et
al. 1974, гл. 8], но ни одна система компьютерной алгебры
этим в действительности не пользуется, так как реально это
20п log n log log n.
В принципе 0(п \og2n log log n) [Aho et a/. 1974, гл.
8], но этим также не пользуется ни одна система
компьютерной алгебры.
Это было верно во время написания данной книги. К
моменту, когда был завершен ее перевод на английский язык,
вышла в свет версия 3.3 системы REDUCE, в которой
реализован современный алгоритм разложения на множители.
Компьютерная алгебра 83
2.2. ПРЕДСТАВЛЕНИЕ ДРОБЕЙ
Дроби (т.е. рациональные числа) всегда можно представить
довольно очевидным способом в виде отношения числителя и
знаменателя. В общем случае их не следует заменять числами
с плавающей точкой, так как это приводит не только к потере
точности, но и к совершенно неверным результатам .
Например, НОД полиномов х3 - 8 и A/3)*2 - D/3) равен
A/3)* - B/3), в то время как НОД полиномов х3 - 8 и
0.333333 х2 - 1.33333 равен 0.000001 из-за усечения..
Все вычисления с рациональными числами требуют
вычислений НОД, что приводит к большим затратам времени.
Следовательно, если удается обходиться без них, то вычисления в
общем случае выполняются значительно быстрее. Например,
вместо приведенных выше вычислений можно вычислить НОД по-
линомов jc — 8 и х - 4, не вычисляя НОД никаких целых
чисел. То же самое можно сказать об отношениях полиномов -
рациональных функциях, а в дальнейшем мы увидим алгоритм
(алгоритм Барейса), который не требует обращения к дробям
для процесса исключения в матрицах.
Алгоритмы сложения, умножения и т.д. дробей достаточно
просты, но тем не менее в них имеется возможность
оптимизации. Рассмотрим, например, умножение
Наиболее очевидный способ заключается в вычислении р-ас,
q-bd, а затем сокращении их на НОД этих .чисел. Однако,
если предположить, что дроби а/Ь и c/d являются
приведенными, то можно заключить, что
НОД(/>,?) = НОД(а,4) НОД(М.
Тогда более эффективно вычислить два НОД в правой части
равенства, чем один НОД в левой, поскольку аргументы у них
меньше.
Например, в системе SMP возникли некоторые проблемы
из-за использования такого представления рациональных
чисел.
84 Проблема представления данных
То же самое относится к сложению:
а с _р
Здесь можно вычислить р= ad+ be и q = bd, но более
эффективно вычислить q = bd/\\OJ\(byd) и
d b
Р аНОД(^,^)" CHOJ\(b,d) '
После этого необходимо добиться взаимной простоты чисел р и
qy но таким методом получаются меньшие значения р и q, чем
при использовании прямого метода.
2.3. ПРЕДСТАВЛЕНИЕ ПОЛИНОМОВ
Сейчас мы рассмотрим основные вычисления любой системы
компьютерной алгебры, которые отличают ее от других систем,
- полиномиальные вычисления. Следует подчеркнуть, что
прилагательное "полиномиальные" применяется к программным
вычислениям, а не просто к типам данных, над которыми
производятся вычисления. Например, вычисление
(* " У)(х + у) = х2-у2
является полиномиальным вычислением, но им также является и
(cos а - sin b)(cos a + sin b) = cos a - sin b,
в действительности речь идет об одних и тех же вычислениях,
в которых переменная х заменена на cos a, a переменная у
заменена на sin b.
Все системы компьютерной алгебры могут работать с
полиномами от нескольких переменных (обычно от произвольного их
числа1 ). Их можно складывать, вычитать, перемножать и
делить (по крайней мере, как мы увидим ниже, если деление
выполняется без остатка), но в действительности интересной
операцией является упрощение. Запись произведения полиномов
Система CAMAL требует, чтобы их число было объявлено,
но на этом ограничении основана высокая скорость системы
CAMAL.
Компьютерная алгебра 85
дс+1 и х-\ в виде (х+\)(х-1) не слишком интерес-
на: ^запись вида х - 1 гораздо более полезна.
Слово "упрощение" допускает множество интерпретаций.
Очевидно, что запись х-\ более "простая", чем (х2 - 1)/(х+ 1),
QQQ QQ8 QQ7 * -
но является ли выражение х - х + х - ... -1 более
"простым", чем (х -1)/(х+1)? Для того чтобы
разобраться с этим туманным понятием, уточним два связанных с
ним термина, которые понадобятся нам в дальнейшем.
2.3.1. Канонические и нормальные представления.
Представление математических объектов (в рассматриваемом
случае это полиномы, но определение носит более общий
характер) называется каноническим, если две различные записи
соответствуют всегда двум различным объектам. Более
формально, говорят, что соответствие / между классом объектов
О и классом представителей R является представлением О в /?,
если каждый элемент, принадлежащий О, соответствует одному
или нескольким элементам из R (иначе для него нет
представления) и каждый элемент из R соответствует одному и только
одному элементу из О (иначе неизвестно, какой элемент
класса О он представляет). Представление называется
каноническим, если отображение / взаимно однозначно. Таким, образом,
можно заключить, что два элемента совокупности О равны,
проверив, что равны их представления.
Если совокупность О обладает структурой моноида (а почти
любая совокупность в компьютерной алгебре является по
меньшей мере моноидом), то можно ввести другое определение.
Представление называется нормальным, если нуль
представляется единственным образом. (Можно задать вопрос: "Почему
именно нуль?" Причина заключается в том, что нуль
недопустим в качестве второго параметра в операции деления, и,
следовательно, перед делением необходимо выполнить
проверку. Если существуют другие исключительные значения,
определение "нормальности" становится более сложным.) Любое
каноническое представление является нормальным, но обратное не
имеет места (как мы убедимся в дальнейшем). Нормальное
представление группы дает алгоритм для проверки того, явля-
86 Проблема представления данных
ются ли два элемента а и Ь группы О равными: достаточно
посмотреть, равна ли нулю разность а - Ь. Этот алгоритм,
естественно, менее эффективен, чем алгоритм, основанный на
каноническом представлении, где достаточно просто сравнить
представления элементов а и Ъ.
Таким образом, можно сказать, что упрощение должно
давать представление, являющееся по крайней мере нормальным,
а если * возможно, то и каноническим. Но хочется большего, и
именно здесь включается в игру субъективность. Хочется,
чтобы упрощающее представление было "регулярным", что
исключает представления, подобные следующему (где полагается
А - х + х и далее рассматриваются некоторые модификации
объекта А):
объект представление
А х(х+1)
А-х х2
А + х+\ (х+1J
Вопрос о регулярности возникает в связи с методом
хранения, предложенным Брауном [Brown 1969]. Располагая
нормальным представлением, попытаемся построить каноническое
представление. Запоминаем все вычисленные к данному времени
выражения: ау...,а . Когда вычисляется новое выражение Ь,
проверяем, равно ли Ъ какому-либо а. для некоторого /
(проверяя для всех / на равенство нулю разность а.- Ь). Если
6= а., заменяем Ь на а., иначе запоминаем новое выражение
а +л = Ь. Этот метод хранения дает каноническое
представление, которое, однако, совсем не регулярно, поскольку оно
полностью зависит от порядка, в котором встречаются
выражения. Кроме того, оно неэффективно, так как нужно хранить
все эти выражения и сравнивать с ними каждый вычисляемый
результат.
Хочется также, чтобы представление было "естественным"
(то, чему по крайней мере сегодня противоречит римское
представление целых чисел) и, по крайней мере в общем
случае, "компактным" (что не позволяет нам изображать целые
Компьютерная алгебра 87
числа цепочками из единиц, когда 7 принимает вид 1111111).
К счастью, существует много представлений, отвечающих этим
требованиям, и всякая система компьютерной алгебры
располагает одним из них (по меньшей мере!). Большинство систем (в
частности, REDUCE) всегда упрощают выражения (т.е. приводят
их к каноническому виду); MACSYMA составляет исключение -
она упрощает по запросу.
Для полиномов от одной переменной такие представления с
математической точки зрения достаточно очевидны: каждая
степень переменной х присутствует только один раз (не
более), и, стало быть, равенство полиномов сводится к
равенству коэффициентов.
2.3.2. Плотные и разреженные представления
Теперь нужно различать два типа представлений: плотные и
разреженные. Всякая система компьютерной алгебры имеет свое
собственное представление (представления) полиномов, детали
которого интересуют пользователя только тогда, когда нужно
"расщепить" внутреннее представление, но различие плотное-
разреженное является существенным. Представление называется
разреженным, если нулевые члены явно в нем не
представляются. Соответственно представление называется плотным, если
все члены (по крайней мере заключенные между мономом
наиболее высокой степени и мономом наиболее низкой степени) явно
в нем представлены, как ненулевые, так и нулевые. Обычное
математическое представление является разреженным: мы пишем
Ъх2 + 1 вместо Ъх2 + Ох + 1.
Наиболее очевидным компьютерным представлением полинома
aQ + а.х+ ... + а хп является его представление таблицей
коэффициентов [aQ, ay ..., а ]. В ней записаны все а., как
ненулевые, так и нулевые, следовательно, такое
представление является плотным. При таком представлении сложение двух
полиномов степени п требует п + \ (т.е. О(п)) сложений
коэффициентов, в то время как умножение с помощью наивного
метода требует 0(п2) умножений коэффициентов (можно
ограничиться 0(п log n) [Aho et ai 1974, гл. 8], но ни одна
система этим в действительности не пользуется, - приложения и
обсуждение сложности см. в статье [Probst, Alagar 1982]):
88 Проблема представления данных
Менее очевидным с точки зрения информатики, но более
близким к математическому представлению является
разреженное представление, когда для каждого ненулевого члена а .х1
запоминают показатель степени и коэффициент, т.е. пару
(/,а.). Таким образом, полином Зх +1 может быть
представлен в виде (B,3), @,1)). Конечно, такое представление
довольно трудно .реализовать на Фортране, но оно является
более естественным для языков типа Лисп (языка реализации для
большинства разработчиков систем компьютерной алгебры). Мы
настаиваем на том, чтобы показатели степеней были
упорядочены (обычно в порядке убывания), так как иначе (B,3),
@,1)) и (@,1),B,3)) были бы двумя различными
представлениями одного и того же полинома. Для того чтобы показать,
что по крайней мере на Лиспе такое представление не
является слишком сложным, приведем программы сложения и умножения
полиномов, использующие это представление. Читатель,
незнакомый с Лиспом, может пропустить этот кусок, не т^ряя нити
рассуждений.
Воспользуемся представлением, в котором CAR от
некоторого полинома является его членом, a CDR - новым полиномом,
равным исходному полиному без члена, определяемого функцией
CAR. Одночлен имеет тип CONS, его CAR равняется показателю
степени, a CDR - коэффициенту. Таким образом, лисповская
структура полинома Зх2 +1 имеет вид (B.3) @. 1)), а
список NIL представляет полином 0. Следует отметить, что в
таком представлении представление числа 1 отличается от
представления полинома 1 (т.е. (@. 1))) и что способ
представления полинома 0 отличается от способа
представления всех других полиномов.
(DE ADD-P0LY (А В)
(C0ND ((NULL А) В)
((NULL В) А)
((GREATERP (CAAR A) (CAAR В))
(CONS (CAR A) (ADD-P0LY (CDR А) В)))
((GREATERP (CAAR В) (CAAR A))
(CONS (CAR В) (ADD-P0LY A (CDR В))))
((ZER0P (PLUS (CDAR A) (CDAR B)))
; He нужно создавать нулевой терм
(ADD-P0LY (CDR A) (CDR В)))
(T (CONS (CONS (CAAR A) (PLUS (CDAR A) (CDAR B)))
(ADD-P0LY (CDR A) (CDR B))))))
Компьютерная алгебра 89
(DE MULTIPLY-POLY (А В)
(COND ((OR (HULL A) (NULL В)) NIL)
; Если а = aO+al и b = ЬО+bl, то ab =
; аОЬО + aObl + alb
(T (CONS (CONS (PLUS (CAAR A) (CAAR B>)
(TIMES (CDAR A) (CDAR B)))
(ADD-POLY (MULTIPLY-POLY (LIST (CAR A))
(CDR B))
(MULTIPLY-POLY (CDR A) B))))))
Если полином А содержит m членов, а полином В содержит п
членов, то время счета (т.е. число лисповских операций)
алгоритма ADD-POLY имеет порядок 0(т + п)у а время счета
алгоритма MULTIPLY-POLY имеет порядок 0(т2п) (более точно,
(т(т + 3)/2 - \)п). Существуют алгоритмы умножения
полиномов, более эффективные, чем приведенный выше: грубо говоря,
нам нужно отсортировать члены произведения так, чтобы они
появлялись в порядке убывания, и использование алгоритма
ADD-POLY соответствует алгоритму сортировки вставкой
("insertion sort"). Естественно, что применение более
эффективного метода сортировки (например, быстрой сортировки
"quicksort") дает нам более эффективный алгоритм умножения
сложности 0(mn log m) [Johnson 1974]. Однако большинство
систем пользуется алгоритмом, аналогичным описанной выше
процедуре.
При использовании этой процедуры возникает техническая
трудность, обнаруженная недавно Абботом и др. ([Abbott et
al. 1986]). Рассмотрим эту трудность, чтобы
проиллюстрировать проблемы, которые могут возникнуть при преобразованиях
математических формул в системах компьютерной алгебры. В
алгоритме MULTIPLY-POLY нужно прибавить aQb^ к а^Ь. Имеет
значение порядок, в котором вычисляются эти два объекта.
Очевидно, что от него не зависят ни результат, ни время
счета. Но от него может зависеть размер памяти,
используемой при вычислениях. Если и а, и b - плотные полиномы
степени пу то при таком порядке вычислений, когда сначала
вычисляется aQby мы должны до самого окончания рекурсии
хранить все промежуточные результаты. Таким образом, область
памяти, которая может потребоваться, должна содержать 0(п )
слов, так как существует п результатов, длина которых
меняется от 1 до п. Другой порядок, при котором а Л) вычисляется
90 Проблема представления данных
до впЬу является значительно более эффективным, поскольку
в любой момент иапользуемое пространство не превосходит
О(п). Это замечание не является чисто теоретическим: Абботу
1 1 RR л
и др. удалось разложить на множители полином jc -1,
используя REDUCE с 2 мегабайтами памяти, но они не. смогли
перемножить полученные сомножители.
На первый взгляд может сложиться впечатление, что
алгоритмы, основанные на разреженном представлении, являются
менее эффективными, чем те, которые используют плотное
представление: пг2п операций вместо пгп для наивного
умножения или mn log m вместо max(m,n) log max (m,n) при
использовании более хитрых методов умножения. Кажется, что
имеется также большое различие в используемой памяти, так как
при плотном представлении для хранения полинома степени п
требуется п + 2 слов (п +1 коэффициентов и само число л),
тогда как при разреженном представлении их необходимо как
минимум 2л и даже 4л, если использовать естественный для
Лиспа метод. Действительно, для полностью плотных полиномов
эти сравнения справедливы. Однако большинство встречающихся
полиномов не являются плотными. Например, плотный метод
потребует миллион умножений для проверки равенства
(*1000 + 1)(*1000-1) = х2000-1,
в то время как при разреженном методе можно обойтись всего
четырьмя, поскольку это те же самые вычисления, что и в
равенстве
(х+1)(х-1) = х2 -1.
Когда же речь идет о полиномах от нескольких переменных,
то всякий реальный полином должен быть разреженным, напри-
с с с с с
мер плотное представление полинома a b с d e содержит 7776
членов.
Таким образом, время счета, по крайней мере для сложения
и умножения, является скорее функцией количества членов,
чем степени. Хорошо известны соотношения, ограничивающие
степень результата, рассматриваемую как функцию от степеней
аргументов, но соотношения для количества членов отличаются
от них. Предположим, что А и В - два полинома степеней пА и
Компьютерная алгебра 91
пв, содержащие m. и пгв членов. Тогда примитивные операции
сложения, вычитания, умножения, деления, вычисления НОД и
подстановки полинома вместо переменной в другой полином
удовлетворяют следующим ограничениям:
Операция
А + В
А-В
А*В
А/ В
НОД(Д В)
subst(x = Л, В)
Степень
результата
тах(лд, пв)
тах(лд, пв)
пА+пВ
пА~пВ
min(nA, nB)
пАпВ
Количество членов
в результате
mA + mB
mA + mB
mAmB
пА~пв+1
*min(nA, nB) + l
nAnB+X
Ограничение, данное для числа членов, получаемых в
результате деления, является функцией степени и не зависит от
числа членов в аргументах. Это может показаться странным,
но, учитывая равенство (хп - \)/(х- 1) = хп~ + хп~ + ...+1, мы
видим, что полиномы, состоящие всего из двух слагаемых,
могут дать в результате полином с как угодно большим
количеством членов.
Проблема ограничения (нетривиальным образом) количества
членов для НОД остается открытой . Что касается
подстановки, то может случиться, что при разреженных аргументах
результат оказывается полностью плотным. Из этого замечания
вытекает очень важное наблюдение: время счета задачи, по-
Во время подготовки английского перевода авторам
стало известно, что Трейгер и Шинцель показали, что полином
р = A + 2**-2* х2 + 4* х3 + 4* х4)
* A + 2 * х4- 2 * А 4 * х12- 10 * *16+ 28 * х20- 84 * х24)
р
обладает следующим замечательным свойством: у полинома р
слагаемых меньше, чем у р. Поскольку полином р свободен от
квадратов, это означает, что НОД полиномов р и (р )'
содержит больше слагаемых, чем каждый из этих полиномов.
92 Проблема представления данных
ставленной в терминах переменной ху может весьма
значительно отличаться от времени счета той же задачи, если она
сформулирована в терминах х -1 (или какой-либо другой
подстановки).
Чтобы сделать это замечание более конкретным, рассмотрим
матрицу
Г 1 + 2лг х + х х + х
А = \ х + х4 1 + 2х4 jc4+ х9
[ х + х9 jc4+ х9 1 + 2х9\
Можно вычислить А за 0.42 сек. (REDUCE на микроЭВМ
Motorola 68000), но если переписать ее в терминах у=х-1, то
время счета станет 5.26 сек. - увеличится более чем в 10
раз. Эта проблема возникает также и при разложении на
множители, как показано в главе "Современные алгоритмы".
2.3.3. НОД
Как мы увидим в дальнейшем, при вычислениях с
рациональными дробями требуется вычислять НОД числителя и
знаменателя дроби. Эти вычисления менее очевидны, чем кажется с
первого взгляда, и чтобы проиллюстрировать это замечание,
рассмотрим НОД следующих двух полиномов (этот анализ в
значительной степени заимствован у Брауна [Brown 1971]):
А(х) = х8 + х6 - З*4 - Зх3 + 8х2 + 2х - 5,
В(х) = Зх6 + 5*4 - Ах2 - 9* + 21.
Первый шаг исключения состоит в вычислении
Л-#-§)*. т.е.
последующие этапы исключения приводят к выражениям
2117*2 441
25* VX + ^Z5 '
233150 „ 102500
6591 х~ 2197
и, наконец,
1288744821
5435Ш25 •
Компьютерная алгебра 93
Очевидно, что такие действия над полиномами с рациональными
коэффициентами требуют неоднократного вычисления НОД целых
чисел и что целые числа, фигурирующие в этих вычислениях,
не всегда являются маленькими.
Эти вычисления НОД можно исключить, если всегда работать
с полиномами с целыми коэффициентами, что приводит к
последовательностям полиномиальных остатков. Вместо того чтобы
делить А на В в Q, можно домножить А на некоторую степень
(а именно на разность степеней полиномов, увеличенную на 1)
старшего коэффициента полинома В таким образом, чтобы это
кратное полинома А можно было разделить на В в I. Значит,
получается такая последовательность:
-15*4+ Зх2- 9,
15795*2 + 30375* - 59535,
1254542875143750* - 1654608338437500
и
12593338795500743100931151992187500.
Эта последовательность называется последовательностью
Евклида (хотя Евклид не знал ни полиномов, ни алгебраических
объектов). В общем случае длина коэффициентов такой
последовательности имеет экспоненциальный рост (как функция от
степеней исходных полиномов).
Очевидно, что можно упростить эту последовательность за
счет общих множителей (такой алгоритм известен как алгоритм
примитивных последовательностей), но для этого потребуется
вычисление НОД, что снова заведет нас в дебри, из которых
мы только что выбрались. К счастью, можно выбирать
коэффициенты, на которые нужно домножать полином А, перед его
делением на полином В и т.д. таким образом, чтобы рост
коэффициентов был только линейным. Такая последовательность,
полученная независимо Брауном и Коллинзом, называется
последовательностью полиномиальных субрезультантов.
Соответствующий алгоритм описан Брауном [Brown 1971] и Лоосом
[Loos 1982], однако он является достаточно важным для того,
чтобы привести его здесь, хотя доказательство будет опущено.
94 Проблема представления данных
Предположим, что даны два полинома F и F с целыми
коэффициентами. Вычислим их НОД с помощью последовательности
полиномов f , ... . Пусть д - разность степеней полиномов
F. и F. Л, а /. - старший коэффициент полинома F.. Тогда
i i+i i д t i
остаток от деления полинома /.' F._, на F. всегда
является полиномом с целыми коэффициентами. Запишем его в виде
P/+1F/+1, где требуется определить коэффициент Э/+г
Алгоритм, носящий имя Евклида, соответствует выбору Э+1= 1.
Если положить
V1
Э3 = И) •
di 2
где ф определяется формулами
ф3 = -1.
5. , 1-5. ,
тогда (по теореме о субрезультантах [Loos 1982]) все F.
являются полиномами с целыми коэффициентами, и длина
коэффициентов возрастает не более чем линейным образом. Для той
же самой задачи получаем последовательность
F3 = 15л:4 - Зх2 + 9,
F4 = 65л:2 + 125* - 245,
Fs = 9326л: - 12300,
F = 260708,
ь
которая возрастает значительно медленнее, чем предыдущие
последовательности.
Приведенный алгоритм является лучшим из известных
методов вычисления НОД среди методов, основанных на применении
к полиномам с целыми коэффициентами алгоритма Евклида. В
главе "Современные алгоритмы" мы увидим, что если
отказаться от этого условия, то можно получить лучшие алгоритмы для
вычисления НОД.
Компьютерная алгебра 95
2.4. ПОЛИНОМЫ ОТ НЕСКОЛЬКИХ ПЕРЕМЕННЫХ
Как только мы начинаем вычисления с полиномами от
нескольких переменных, возникает новая трудность: следует
писать х + у или у + х? Математически мы имеем дело с одним
и тем же объектом; поэтому если мы хотим, чтобы
представление было каноническим, то должны пользоваться только одним
из этих выражений. Но каким? Чтобы иметь возможность их
различать, нам потребуется ввести новое понятие - порядка
на множестве переменных. Мы уже пользовались неявно
понятием порядка на множестве степеней переменных, поскольку
вместо х2+ х°+ х3+ х1 мы пишем х3+ х2+ хх+ х , но этот
порядок кажется "естественным" (Норман [Norman 1982] создал
систему, которая не упорядочивает мономы в соответствии с
этим соглашением, но при этом возникло много нерешенных
проблем). Понятие порядка на множестве переменных может
показаться искусственным, но оно так же необходимо, как и
многие другие понятия. Когда мы выбрали такой порядок, при
котором "х более важен, чем у'\ мы знаем; что х + у
является каноническим представлением, а у + х - нет.
Когда речь идет о более сложных мономах (напомним, что
о 2 3
моном. - это произведение степеней переменных, например х у
или x1y2z3), то имеются различные способы расширения этого
порядка. Наиболее употребительными являются следующие:
(a) Мы можем считать, что главная переменная (стоящая
ранее всех остальных в нашем порядке) должна определять
порядок настолько, насколько это возможно, и что нам следует
рассматривать степени других переменных только в том
случае, когда степени первой переменной равны. Эта система
называется лексикографической, поскольку это та самая
система, которая используется в словарях, где сначала смотрят" на
первые буквы двух слов, и только если они совпадают, смот-
рят на вторые и т.д. В этой системе полином (х+у) +х + у+1
записывается как х2 + 2ху +х + у2 + у+\ (х "старше", чем у).
(b) Мы можем считать, что самым важным является
суммарная степень монома (т.е. сумма степеней переменных) и что
члены суммарной степени 2 должны появляться раньше всех
членов суммарной степени 1 и т.д. Для различения членов од-
96 Проблема представления данных
ной и той же степени мы пользуемся предыдущим методом. Эта
система называется порядком общей степени, или, более
точно, общей степени, затем лексикографическим. В этой системе
полином (х + у) + х + у + \ записывается как х + 2ху + у2 + х+у+1
(х "старше", чем у).
(с) Вместо лексикографического метода мы можем
воспользоваться противоположным. Для полиномов от одной переменной
это соответствует порядку возрастания степеней, что
приводит к некоторым трудностям (по крайней мере с наивной точки
зрения) при делении и вычислении НОД. Однако эта система
вместе с методом общей степени, так называемый порядок
общей степени, затем обратный лексикографический, имеет опре-
деленные преимущества. В этой системе полином (х + у) + х + у+ I
записывается как у + 2ху + х + у + х+ 1 (х "старше", чем у).
Читателю может показаться, что системы (Ь) и (с)
эквивалентны и отличаются только обратным порядком переменных.
Это верно для случая двух переменных, но не так, когда их
больше двух. Чтобы подчеркнуть различие, посмотрим на
разложение полинома (х + у + г) . Прежде всего, используя порядок
общей степени, затем лексикографический (х раньше у раньше
г), получим
х3+ Зх2у + 3x2z + Зху2+ 6xyz + 3xz2+ у3+ 3y2z + 3yz2+ z3.
При порядке общей степени, затем обратном
лексикографическом (х раньше у раньше z)y получим
х3+ Зх2у + Зху2+ у3+ 3x2z + 6xyz + 3y2z + 3xz2+ 3yz2+ z3.
При таком порядке мы выбираем все члены, не включающие г,
до того, как приступать к остальным, в; то время как первый
порядок выбирает все члены содержащие х (даже х г), прежде
чем переходить к остальным.
В действительности выбор того, какая из этих систем
является лучшей для конкретных вычислений, не в'сегда
очевиден, и у нас нет какого-либо приличного критерия для этого
выбора (см., однако, [Buchberger 1981]). Большинство
существующих систем использует лексикографический порядок,"~ но
каждая система имеет свои собственные методы.
Лексикографическое представление имеет интересное следствие: если все
Компьютерная алгебра 97
члены с хп сгруппировать вместе (предполагаем, что х -
главная переменная), то мы можем рассматривать этот полином
как полином от х, коэффициенты которого являются полиномами
от остальных переменных. Таким образом, полином в случае
(а) можно переписать в виде х + хBу+\) + (у +у+\). Эта форма
называется рекурсивной в отличие от распределенной формы
р р
х + 2ху + х + у + у+ 1. Рекурсивная форма используется в
большинстве систем.
Эти рассуждения дают нам некоторое представление о
поведении систем. Например, в системе MACSYMA функция INPART
позволяет выбирать часть выражения, но она имеет дело с
внутренним представлением, которое более или менее
совпадает с обратным лексикографическим рекурсивным. Аналогично
REDUCE имеет функцию. C0EFF, которая выдает коэффициенты
выражения, рассматриваемого как полином от названной далее
переменной. Так как внутреннее представление в системе
REDUCE лексикографическое рекурсивное, то очевидно, что эта
функция работает намного быстрее, когда названная
переменная является старшей. Например, если мы возьмем (ад + х+ у+ гN,
то время работы функции C0EFF меняется от 0.50 сек (названа
w) до 0.84 сек (названа г). В общем случае время счета (и
рабочая память) могут весьма сильно меняться в зависимости
от порядка переменных ([Реагсе, Hicks 1981], [Pearce, Hicks
1982], [Реагсе, Hicks 1983]), но причины этого не всегда
очевидны. Нам не известны какие-либо хорошие общие правила
выбора порядка, поскольку он в значительной степени
определяется желаемой формой выдачи результатов. Следует также
отметить, что изменение порядка весьма накладно, поскольку
все результаты, вычисленные к этому моменту, должны быть
выражены в соответствии с новым порядком.
Эти вопросы порядка не являются просто внутренними
деталями, касающимися только программистов: они могут влиять на
полученный результат. Например, предположим, что мы хотим
разделить 2х- у на х + у. Если х - главная переменная, то
частное равно 2, а остаток равен -Зу. Но если главной
переменной является уу то частное равно -1, а остаток равен Зх.
176—7
98 Проблема представления данных
2.5. ПРЕДСТАВЛЕНИЯ РАЦИОНАЛЬНЫХ ФУНКЦИЙ
Большинство вычислений используют не только полиномы, но
и их отношения, т.е. рациональные функции. Те же замечания,
которые применялись к полиномиальному случаю, применяются и
здесь: вычисление
1 1 _ cos х + si n x
sin x cos x cos x sin x
является рациональным вычислением - фактически это то же
самое вычисление, что и
1 + I = а +.Ь
Ъ а аЬ '
Если представлять рациональную функцию как полином
(числитель), деленный на другой полином (знаменатель), то,
конечно, получится нормальное представление, поскольку
функция представляет нуль тогда и только тогда, когда ее
числитель представляет нуль. В системе REDUCE имеется
возможность не пользоваться этим представлением (OFF MCD), но
мы не советуем этого делать, поскольку мы более не знаем,
представляет формула нуль или нет, и это является причиной
значительных трудностей с гауссовым исключением, например
для матрицы
1 \/(х - 1) 1
1/(х+1) 1/(*2-1) J
Если мы хотим получить каноническое представление, то
нам потребуется больше, чем просто выразить функцию в виде
отношения двух полиномов. Например, формулы (х-\)/(х+\) и
(х2 -2х+ \)/(х2 - 1) представляют один и тот же элемент поля
Щх), но это разные формулы.
Здесь нам следует сказать несколько слов о различии
между элементами поля Q(*) и функциями из О в себя, которые
они представляют. Рассматриваемые как функции поля Q в себя
f(x) = (х- \)/(х +1) и g(x) = (х2 -2х+ 1)/(х2 - 1) являются двумя
различными функциями, так как первая определена при х = 1
(где она принимает значение 0), в то время как g(x) не
определена, так как она имеет вид 0/0. Но эта особенность
Компьютерная алгебра 99
не является "внутренней", поскольку функция, определенная
правилом
Г х2 -2х + 1 {х Ф 1)f
g (х) = \ х2 - 1
[О (х = 1),
является непрерывной, дифференцируемой и т.д. при х=1. В
общем случае не слишком трудно проверить, что если
/ = рУя1 ~ упрощение частного / = p/q (где р, q, рг и qx
- полиномы), то при каждом значении х переменной х, где
функция / определена, значение /1(^0) определено и равно
/(*0), и, кроме того, если /(л^) не определено, но !г(хг)
определено, то функция
g(x) =
I !г(х) (х = хг)
непрерывна и т.д при х = х . Таким образом, этот вид
упрощения формул только изменяет функцию путем устранения таких
особенностей .
С алгебраической точки зрения, т.е. как элементы поля
Q(jc), выражения (х- \)/{х + 1) и (х2 -2х+ \)/{х2 - 1) равны,
поскольку разность между ними равна 0/(* - 1) = 0. Таким
образом имеется некоторое различие между элементами поля Q(jc) и
функциями поля Q в себя, но с привычной неточностью мы
называем элементы поля Щх) рациональными функциями. (Бурба-
ки: "... неточности языка, без которых любой математический
текст угрожает стать педантичным и даже нечитаемым".)
После этого короткого отступления мы возвращаемся к
задаче канонического представления рациональных функций, т.е.
элементов поля Щх). Мы установили, что (х- \)/{х +1) и
(х2 -2х+ \)/(х2 -1) - два различных представления одной
1 Читатель, знакомый с теорией денотациональной
семантики, может выразить это по-другому, заметив, что / выше
(в решетке частичных функций поля Q в себя), чем функция /.
100 Проблема представления данных
и той же функции. Из определения канонического
представления вытекает, что по крайней мере одно из них каноническим
не является. Естественно считать, что не должно
существовать какого-либо общего делителя числителя и знаменателя.
Отсюда следует, что (х2 -2х+ \)/(х2 -1) не является
каноническим представлением, поскольку НОД равен х -1 .
Если мы удалим этот НОД, то вернемся к (х- \)/{х +1). В
общем случае мы находим представление с минимальной возможной
степенью числителя (то же верно и для знаменателя). Если бы
существовало единственное такое представление, то это был
бы хороший выбор канонического представления. К сожалению,
условие, что степени числителя и знаменателя должны быть
минимизированы, не дает нам единственности, как следует из
таких примеров:
-2х + 1 _ 2х - 1 _ 4х - 2 _ -х + 1/2 _ х г- 1/2
2х + 1 " -2х - 1 " -4* - 2 ~ х + 1/2 " -х - 1/2 *
Чтобы устранить эту неоднозначность, большинство
существующих систем принимают во внимание следующие правила (для
рациональных функций с коэффициентами из С):
A) в выражении нет рациональных коэффициентов (что
отбрасывает последние два выражения);
B) никакое целое число не может делить как числитель,
так и знаменатель выражения (что отбрасывает (Ах- 2)/(-4jc- 2));
C) старший коэффициент знаменателя выражения должен
быть положительным (что отбрасывает второе выражение).
Имеется несколько других возможностей, но эти правила
наиболее распространены и достаточны для получения
канонической формы. Как мы уже видели на примере рациональных
чисел, из факта, что можно производить вычисления с
рациональными дробями, не вытекает, что следует производить с
ними вычисления. Когда удается найти алгоритм, избегающий
таких вычислений, обычно оказывается, что этот алгоритм
более эффективный. Ниже мы увидим, что алгоритм Барейса
является вариацией гауссовского исключения, не требующей
использования дробей.
Компьютерная алгебра 101
2.6. ПРЕДСТАВЛЕНИЕ АЛГЕБРАИЧЕСКИХ ФУНКЦИИ
Под алгебраическими объектами (числами и функциями)
понимают решения полиномиальных уравнений. Например, i/2" -
алгебраическое число, поскольку это одновременно число и
решение алгебраического уравнения а2 - 2 = 0. Это уравнение
имеет два корня, но в данном параграфе мы не будем их
различать. В следующей главе мы увидим, как различать разные
вещественные значения, которые удовлетворяют одному и тому
же уравнению, но для многих приложений это различие
несущественно. vx2-l - алгебраическая функция, поскольку это
одновременно функция и решение уравнения /3 - х +1 = 0.
Большая часть этого параграфа применима как к функциям, так
и к числам: в общем случае мы будем говорить об
алгебраических функциях, хотя большую часть примеров будут
составлять алгебраические числа. Каждый радикал является
алгебраическим выражением, но обратное утверждение неверно, как
доказал великий математик Абель. Более точно,
алгебраическое число у» являющееся решением уравнения у + У +1 = 0»
не может быть выражено в радикалах.
Поэтому можно различать три класса алгебраических
выражений:
A) простые радикалы, такие, как V5" или vx2-\\
B) простые или вложенные радикалы, которые включают
также выражения вида Л +у/2 или /i/2+3j;
C) общие алгебраические выражения, которые включают
также такие выражения, как алгебраическое число у» опреде-
ленное уравнением у + у + 1 = 0.
Каждый из перечисленных классов содержится в следующем.
2.6.1. Простые радикалы
Представление элементов для первого класса достаточно
очевидно: каждый радикал мы рассматриваем как переменную,
появляющуюся в полиномиальных или рациональных выражениях.
Очевидно, если а - корень степени л, то используются только
степени а от 0 до дг-1, а более высокие степени заменяются
более низкими степенями.
102 Проблема представления данных
Это представление не является каноническим по двум
различным причинам. Во-первых, возникают проблемы с
рациональными дробями, содержащими алгебраические выражения. В
качестве примера рассмотрим выражения \/(у/2-\) и л/?+1.
Эти два выражения не равны тождественно, но они
представляют одно и то же число, поскольку их разность равна нулю:
1 _ (vff +1) = 1 _ 0*+ l)(Vg-l) =
уП- 1 V?- 1 уП - 1
= 1- (У2J + 1 = 0 = 0
V2- 1 у/2- 1
В качестве решения можно наложить требование, чтобы
корни появлялись только в числителе: этим запрещается
выражение \/(у/2-\). Для любого корня а можно добиться этого
умножением числителя п и знаменателя d данного выражения на
полином dv такой, что алгебраическая величина а не
появляется в произведении dd . В этом случае
п ndi
и а исключается из знаменателя. Полином d может быть
вычислен применением расширенного алгоритма Евклида (см.
дополнение "Основные сведения из алгебры") к паре d и р, где
р - определяющий а полином. Применение его позволяет
получить два полинома d и d2, такие, что dd^ + pd2 - с, где с
не зависит от а, и тогда dd = с.
С этим ограничением можно быть уверенным, что мы получим
каноническую систему, если радикалы образуют независимую
систему. Однако это • представление не всегда достаточно
эффективно: например, выражение принимает
л/2 + VJ + VS + v7
вид
22VJv^V7 - ?>Ау/2у/Бу/Т - БОл/ВДуТ + 135л/7 +
+ 62v?vffv5 - 133У5~ - 145V5" + 185V?
2ТБ •
Из-за такого разбухания часто ограничиваются нормальным
представлением, задаваемым рациональными дробями, степени
величины а в котором меньше п.
Компьютерная алгебра 103
Но даже с таким ограничением на полиномы существует
другая проблема: проблема взаимной зависимости радикалов.
Очень простой пример проблем такого рода - мы не должны
конструировать vT, который равен 1. Аналогично, мы можем
производить вычисления с V2" или с ч/£, но не с обоими
корнями одновременно, поскольку V5=2V2" и получающееся
представление не является не только каноническим, но даже
нормальным. Аналогично, среди радикалов V2", у/5 и v^ для работы
выбираются только два: если все три из них присутствуют, то
имеет место соотношение \/%\/5=V6. Все эти примеры
достаточно "очевидны", и можно предположить, что достаточно
обеспечить, чтобы все числа (или полиномы, или рациональные
функции), появляющиеся под радикалами, были взаимно просты
и чтобы радикалы нельзя было упростить. К сожалению,
ситуация несколько сложнее. Рассмотрим Vе?. Можно предположить,
что упрощение невозможно, но в действительности а = 2а - 2.
Это следует из разложения на множители х + 4 = (х - 2х +
+ 2)(х +2*+ 2). Следуя Капелли [СареШ 1901], можно
доказать, что нетривиальное упрощение допускает только этот
пример (и его вариации вида v-4*3 ). Этот вопрос изучался
в работах [Najid-Zeili 1984], [Najid-Zeili 1985], где дан
алгоритм для определения, имеется ли соотношение между
невложенными радикалами.
2.6.2. Вложенные радикалы
Для второго класса, т.е. для вложенных радикалов,
проблемы более сложные. Первая проблема - эквивалентность
рациональных дробей, содержащих радикалы - имеет то >ке самое
решение с теми же дефектами. Вторая проблема - соотношения
между радикалами - к настоящему времени еще не решена
(удовлетворительным образом). Существует некоторое общее
решение, но это то же самое решение, что и для алгебраических
выражений общего вида, и мы его будем рассматривать ниже.
Мы не можем доказать, что это трудная проблема, но имеется
много удивительных примеров. Приведем тождества
У9 + 4V2"=1 + 2V2", A)
104 Проблема представления данных
/Б + 2V6+S5 - 2v^=2V3", B)
^ + ^TT=/Zp + /^T, (з)
л/16 - 2V25 + 2V&5 - 10v^g» = v^2 + 2V5"-v4l + 2V2S + VS, D)
= ^§(l + ^-UJ2), E)
/A12 + 70V?) + D6 + 34V2)VS = E + 4V2) + C + rt)V5. F)
Мы позаимствовали A) у Дэвенпорта [Davenport 1981], B) и
C) - у Зиппеля [Zippel 1985]. D) - у Шанкса [Shanks
1974], E) - у Рамануджана [Ramanujan 1927] и F) - у
Бородина и др. [Borodin et ai. 1985]. Недавно Бородин и др.
[Borodin et a/. 1985] и Зиппель [Zippel 1985], изучая эту
проблему, нашли алгоритмы, которые могут разрешать некото-,
рые вложенные радикалы, либо представляя их в невложенном
виде, либо доказав, что такого представления нет. Но эти
алгоритмы действуют только в некоторых частных случаях,
таких, как квадратные корни с двумя уровнями вложения.
Общий случай, как выше упоминалось, остается нерешенным
(удовлетворительным образом).
2.6.3. Алгебраические функции общего вида
Рассмотрим теперь алгебраические функции, определенные
как корни некоторого полинома. Возможно, что для такой
функции существует представление в радикалах, но, как
говорилось выше, может случиться, что такого представления не
существует. Итак, пусть а - алгебраическая функция (или
число), определенная как корень полинома р(ос). Если полином
р не является неприводимым, даже при простых вычислениях мы
сталкиваемся со многими проблемами. Например, возьмем
р(ос) = а2 - За + 2. Тогда а - алгебраическое число степени
2. Числа а-1 и а - 2 a priori ненулевые. Но их
произведение равно числу р(ос), т.е. сводится к нулю. Фактически
это является обобщением проблемы, с которой мы уже сталки-
Компьютерная алгебра 105
вались при рассмотрении простых радикалов, когда VT не
являлся допустимым радикалом. В данном случае,
рассматриваемом с этой новой точки зрения, проблема заключается в том,
что полином, определяющий /Г, т.е. а -1, не является
неприводимым, у него есть множитель а-1. Подобным же
образом у нашего нового полинома есть множители а-1 и а - 2,
поэтому одно из выражений а-1 и а - 2 обращается в нуль.
Даже если множители не являются линейными, любые
вычисления с корнями приводимого полинома могут завести в тупик,
когда два выражения, кажущиеся ненулевыми, после
перемножения дают нуль. Другая сложность, которая может возникнуть,
- невозможность деления на ненулевое выражение, так как оно
может иметь нетривиальный НОД с полиномом, определяющим а.
Поэтому, вообще говоря, мы требуем, чтобы полиномы,
определяющие алгебраические числа и функции, были неприводимыми,
или же мы допускаем, что не можем гарантировать результаты,
если полиномы не являются неприводимыми. (Однако заметим,
что каждая "трудность", о которой мы упоминали ранее,
приводит к разложению этих полиномов на множители, так что
можно для реализации алгебраических расширений использовать
приводимые полиномы. Детали см. в [Delia Dora et al. 1985]
и [Dicrescenzo, Duval 1985].)
Все примеры предыдущего раздела, в которых радикалы
оказывались более простыми, чем предполагалось, имели то общее
свойство, что рассматриваемые полиномы не были
неприводимыми. В частности, VT - просто целое число, поскольку поли-
ном, который как будто бы определяет его, т.е. а-1,
разлагается на (а-1)(а+1). Аналогично, Vе? недопустим, так
как его полином, а4 + 4, разлагается на множители (а -
-2а + 2)(а2 + 2а + 2).
То же справедливо для вложенных радикалов. Рассмотрим
тождество A) предыдущего раздела, в котором полином,
определяющий V9+4v^!, равен а2 - (9 + 4у/Т). Этот полином
разлагается на множители (а - A + 2V2))(a + A + 2VZ)), поэтому
вложенные радикалы имеют более простой вид. Если мы хотим
рассматривать только полиномы с целыми коэффициентами, то
можем сказать, что a - корень полинома а4 - 18а2 + 49 (ко-
106 Проблема представления данных
торый является нормой1' приведенного выше полинома). Этот
полином разлагается на множители (а2 - 2а - 7)(а2 + 2а - 7),
и корни первого множителя суть 1 ± 2V?.
Таким образом, определение вида "а - корень полинома
р(ос)" допустимо тогда и только тогда, когда полином р не- ~
приводим. Здесь "допустимость" означает, что использование
полиномов от а (степени которых меньше степени р) дает нам
каноническое представление и что использование таких
рациональных функций (которые не содержат этого корня в
знаменателе) также дает каноническое представление.
Когда появляются несколько корней, очевидно, что все
определяющие их полиномы должны быть неприводимыми. Но нам
требуется большее, в том смысле, что они должны быть
неприводимыми не только раздельно, но и вместе. Пусть, например,
а - корень полинома а -а-1, a |3 - корень полинома
Р5 + 5|34 + 10Э3 + 10/32 + 4/3- 1. Эти два полинома неприво-
димы, если рассматривать их как полиномы с целыми
коэффициентами. Но если мы рассмотрим полином, определяющий /3, как
полином, коэффициенты которого зависят от а, ситуация резко
изменится. В действительности этот полином разлагается на
множители
•(/34+ Э3(а + 4) + /32(а2+ За + 6) + /3(а3+ 2а2+ За + 4) + а4+ а3+ а2+ а).
Это разложение не должно нас удивлять, поскольку /3 - просто
а-1, как видно из линейного множителя. (Другой множитель
соответствует тому, что у полинома а - а -1 пять корней
и Э может быть выражено в терминах корня, отличного от
корня, выбранного в качестве а.)
Таким образом, чтобы проверить, что система корней аг
полиномов р. допустима, нам нужно разложить на множители р
как полином с целыми коэффициентами, затем р2 как полином с
коэффициентами в Z[a ], затем р3 как полином с
коэффициентами в Z[ara2], затем ... . Если все коэффициенты всех р.
Эта норма может быть вычислена с использованием
результантов - см. дополнение "Основные сведения из алгебры".
Компьютерная алгебра 107
целые, то порядок, р. не влияет на результат. Если некоторый
полином р. зависит от а., то полином р. должен быть
разложен на множители раньше, чем р.. Заметим, что в
действительности этот процесс может оказаться очень дорогим,
поскольку выполнять разложение на множители над
алгебраическими полями весьма сложно.
2.6.4. Примитивные элементы
Вместо того чтобы рассматривать несколько алгебраических
чисел (или функций), таких, как V2" и V3", мы всегда можем
вернуться к случаю единственного алгебраического числа (или
единственной алгебраической функции), в терминах которого
(которой) могут быть выражены все остальные. Эта величина
называется примитивным элементом поля, порожденного данными
величинами, или, проще, примитивным элементом для самих
этих величин.
Например, число а, определенное как корень полинома
а4- 10а2+ 1, равно л/2 + i/З", и числа V? = (а3 - 9)/2 и V3" =
= A1а-а3)/2 можно выразить через а. Таким образом а -
примитивный элемент поля Q[a/2",V5]. Такие примитивные
элементы можно вычислять по полиномам, определяющим данные
величины, пользуясь результантами (см. дополнение "Основные
сведения из алгебры"). Например, а определяется
результантом полиномов х2 - 3 и (х-уJ-2. Мы уже могли
убедиться, что соотношения между а и V? и VJ не совсем очевидны.
Примитивные элементы часто бывают весьма сложными. В
работе [Najid-Zejli 1985] замечено, что примитивный
элемент, соответствующий двум корням ос и Э полинома х + 2х +
+ 5, равен (по крайней мере если вычислять его хорошо
известными алгоритмами [Trager 1976]) корню полинома
3Д2 + 18зД1 + 132зДО + 504ГЭ +
+ 991?8 + 372^7 - 3028/ - 6720?5 +
+ 11435а-4 + 91650а-3 + 185400у2 + 194400? + 164525.
} Напомним, что мы работаем в поле нулевой
характеристики, т.е. в расширении кольца целых чисел. Данная теорема
неверна, если работать в расширении кольца целых чисел по
модулю р, но в данный момент нас это не интересует.
108 Проблема представления данных
Сам этот полином выглядит довольно обескураживающе, но в
дополнение к этому выражение а и |3 в терминах у использует
четырнадцатизначные числа. Если мы имеем дело с примитивным
элементом для трех корней исходного полинома (который
одновременно является примитивным элементом для всех его
корней), то коэффициенты соответствующего полинома содержат
более чем по 200 цифр.
Закончим замечанием, что хотя примитивные элементы
широко используются в теории, вычислять их и использовать на
практике весьма сложно.
2.7. ПРЕДСТАВЛЕНИЕ ТРАНСЦЕНДЕНТНЫХ ФУНКЦИЙ
Трансцендентные функции группируются в несколько классов
функций, каждый из которых имеет свои собственные правила.
Вообще функции вида sin x представляются в Лиспе
структурами вида (SIN X) или "записями" в Паскале. Подобным образом
могут также представляться числа вида sin 1 или sin я.
Следовательно, такая структура рассматривается как переменная
и может появляться в полиномах или рациональных функциях. В
системе REDUCE, например, такая структура называется ядром.
Мы уже видели, что над переменными такого вида могут
производиться полиномиальные и рациональные вычисления.
Серьезной проблемой при этом становится упрощение этих переменных
и их зависимость друг от друга. Нам известно множество
правил упрощения, таких как
sin(* + у) = sin х cos у + cos x sin yt A)
sinxcosy^si^x+^r2si^x-^ , B)
log (xy) = log х + log у, C)
log exp x - jc, D)
exp(x + y) = exp x exp y, E)
sinrc = 0. F)
Большинство систем компьютерной алгебры позволяет
пользователю определять правила такого сорта, которые система
Компьютерная алгебра 109
принимает во внимание. Например, в системе REDUCE правила
[1)-F) можно выразить следующим образом:
FOR ALL X,Y LET SINCX+Y) = SIN(X)*COS(Y)+COS(X)*SIN(Y);
FOR ALL X,Y LET SIN(X)*C0S(Y) = (SIN(X+Y)+SIN(X-Y))/2;
FOR ALL X,Y LET L0G(X*Y) = LOG(X) + LOG(Y);
FOR ALL X LET L0G(EXP(X)) = X;
FOR ALL X,Y LET EXP(X*Y) = EXP(X)*EXP(Y);.
LET SIN(PI)=0;
Между последним правилом и всеми остальными имеется
различие: последнее применяется к некоторому числу, в то
время как остальные применяются к любым возможным значениям X
и Y, что выражается конструкцией FOR ALL.
Тем не менее в этой области правил (точнее, правил
перезаписи) остаются еще некоторые ловушки. Во-первых, мы
видим, что из правила A) следует sin 2jc = 2 sin *cos x, в
то время как для выражений на REDUCE это не действует,
поскольку REDUCE не видит, что 2х = х + х. Поэтому лучшим
переводом первого правила было бы
FOR ALL X,Y LET SIN(X+Y) = SIN(X)*C0S(Y)+C0S(X)*SIN(Y);
FOR ALL X LET SINB*X) = 2*SIN(X)*C0S(Y);
но и этого оказывается недостаточно (из-за sin3* и т.д.),
и нам нужно добавить правило вида
FOR ALL X,N SUCH THAT NUMBERP N AND N>1 LET
SIN(N*X) = SIN((N-1)*X)*C0S(X)+C0S((N-1)*X)*SIN(X);
и соответствующее правило для cos.
Во-вторых, правила A) и B) взаимно обратны. Если мы
попросим REDUCE применять их оба, то произойдет
зацикливание , когда нам встретится sin(a + 6), поскольку правило
A) перепишет его в виде sin a cos Ъ + cos a sin b> а
первое слагаемое отсюда перепишется по правилу B) в виде
В принципе. В действительности современная версия
системы REDUCE замечает, что она применила больше правил,
чем позволяют пределы системы, останавливается и выдает
сообщение об ошибке.
НО Проблема представления данных
2*(sin (а + Ь) + sin (а - Ь))у что содержит исходный член, к
которому снова применяется правило A).
В-третьих, такое упрощение с помощью правил перезаписи
может быть очень дорогим. Каждая перезапись требует нового
упрощения (с полиномиальной точки зрения) выражения,
которое мы пытаемся упростить. Белее того, только что
выполненное нами упрощение пожет повлечь за собой другие упрощения.
В-четвертых, мы не можем быть уверены, что дали все
необходимые правила. Из-за интерактивной природы систем
компьютерной алгебры это не всегда представляет серьезную
проблему, но зачастую мы хотим, чтобы все тригонометрические
функции были линеаризованы или же все логарифмы были
независимы и т.д.
Все эти проблемы могут быть связаны с тем фактом, что мы
пользуемся общим методом, т.е. методом правил перезаписи,
для решения гораздо менее общей задачи, такой, как
упрощение логарифмических или тригонометрических функций. Если же
мы имеем функцию, про которую мы не знаем ничего, кроме
некоторых правил, то единственный возможный подход основан
на правилах перезаписи.
Имеется различие между знанием некоторых возможных
упрощений (которые могут быть правилами перезаписи) и знанием
не только этих упрощений, но и того, что они являются
единственно возможными. Например, нам знакомы правила:
log(fe) = log / + log g; exp(/ + g) = exp f * exp g;
exp log / = log exp / = /;
но являются ли они единственно возможными упрощениями?
Имеются теоремы, которые точно описывают возможные
упрощения. Первая из них, покрывающая наиболее важный случай, -
структурная теорема Риша ([Risch 1979], [Rosenlicht 1976])
- утверждает в действительности, что правила A) суть
единственно возможные упрощения для функций, порожденных
операторами ехр и log. Хотя мы ссылаемся на довольно свежую
литературу, теорема (или, вернее, лежащие в ее основе
принципы) известна с времен Лиувилля, но только компьютерной
алгебре потребовались точные формулировки таких теорем.
Компьютерная алгебра 111
Структурная теорема. Пусть К - поле констант и в., ...
..., 0 - алгебраические, экспоненциальные (что мы
записываем в виде Q. = u.=expv.) или логарифмические (что мы
записываем в виде 9 . = v . = log и .) функции, где каждая
функция 9. определена над К(х, в., ..., Q. .) и подполе
констант поля К(х, ВЛ, ..., 9 ) совпадает с К.
(a) При этих условиях функция 9 ., являющаяся экспонентой
(Q'. = v'.Q.), трансцендентна над К(х, в., ..., в._.) тогда и
только тогда, когда v. не может быть выражена в виде
с+ J] n.v., где с принадлежит К, а п. - рациональные числа.
(b) Аналогично функция 9., являющаяся логарифмом (в'. =
= и'./и.), трансцендентна над К(х, Q.,..., Q .*) тогда и
только тогда, когда никакая степень ип элемента и. не может
/-1 п.
быть выражена в виде с П и J, где с принадлежит /С, а п и
/-1 У
п. - целые числа (причем п * 0).
Эта теорема может показаться весьма сложной, но ей можно
неформально придать гораздо более простой вид:
(a) Экспоненциальная функция не зависит от экспонент и
логарифмов, которые уже введены, тогда и только тогда,
когда ее аргумент не может быть представлен в виде линейной
комбинации (с рациональными коэффициентами) логарифмов и
аргументов экспонент, введенных ранее. Наличие такой
комбинации означает, что новая экспонента является произведением
степеней введенных ранее экспонент и аргументов логарифмов.
(b) Логарифмическая функция не зависит от экспонент и
логарифмов, которые уже введены, тогда и только тогда,
когда ее аргумент не может быть представлен в виде
произведения (с рациональными показателями) экспонент и аргументов
логарифмов, введенных ранее. Наличие такого произведения
означает, что новый логарифм - линейная комбинация (с
рациональными коэффициентами) логарифмов и аргументов
экспонент, введенных ранее.
Эта теорема применима только к функциям. Ситуация с
числами, определенными экспонентами и логарифмами, гораздо
менее ясна. Есть предположение, что данная теорема остается
112 Проблема представления данных
верной, но мы не имеем понятия, как ее доказывать. Мы даже
не знаем, являются ли независимыми числа е (=ехрA)) и п
(=A/0 log (-1)).
2.8. ПРЕДСТАВЛЕНИЯ МАТРИЦ
Имеется два стиля матричных вычислений, которые можно
назвать неявными и явными. Пример неявного вычисления дает
математическое выражение "Пусть А и В - две квадратные
матрицы одинакового размера". Здесь мы не задаем явно размер
матриц и ничего не говорим об их элементах. С другой
стороны, в явных вычислениях мы точно определяем все элементы
матрицы, которые могут быть не только числами, но также
полиномами, рациональными функциями или любыми символьными
объектами.
Фактически в неявных вычислениях А и В - переменные. Но
мы уже видели, что полиномиальные и рациональные вычисления
нельзя применять к таким переменным, поскольку это - неком-
мутирующие переменные. Например, АВ может отличаться от ВА.
Некоторые системы компьютерной алгебры позволяют
пользователю работать с такими переменными. Например, в системе
MACSYMA, как мы видели в примере гл. 1, имеются два
различных оператора для умножения: А*В для коммутативного
умножения и А. В для некоммутативного умножения. Таким образом,
А*В - В*А приводится к нулю, но А. В - В. А остается без
изменения. В системе REDUCE (см. также описание операторов
системы REDUCE в дополнении) возможности аналогичные, но
способ их выражения иной. С того момента, как мы объявили
N0NC0M М, ядра, начинающиеся с М (такие, как МA) или
М<А,В)), будут некоммутативными ядрами и не будут
коммутировать с другими некоммутативными ядрами, но будут
коммутировать с обычными (коммутативными) ядрами. Можно
воспользоваться правилами перезаписи, чтобы указать, что некоторые
некоммутативные объекты удовлетворяют ряду ограничений.
В оставшейся части этого параграфа мы будем иметь дело с
явными матричными вычислениями. Здесь, как и в случае
полиномов, имеется различие плотный/разреженный.
Компьютерная алгебра 113
2.8.1. Плотные матрицы
Очевидный спосвб представления явной матрицы - массив
элементов матрицы (если в языке реализации нет массивов,
что имеет место в некоторых диалектах Лиспа, можно
воспользоваться вектором векторов или даже списком списков, но
представление с помощью списков менее эффективно). Если
знак <...> обозначает вектор, то матрица
Г а Ь с Л
\ d e f \
[ g h i J
будет представлена как <<abc><def><ghi >>.
Для плотных матриц этот метод работает весьма хорошо, и он
используется большинством систем компьютерной алгебры.
Алгоритмы для сложения и умножения таких матриц - те же
самые, что и для числовых матриц, следовательно, сложить две
матрицы порядка п можно за 0(п ) операций, а умножить - за
0(п ) операций. Так же как и для числовых матриц,
существуют "неочевидные" алгоритмы умножения, которые
асимптотически эффективнее обычных алгоритмов, например, алгоритм
Штрассена [Strassen 1969] (дающий алгоритм сложности
log 7
0(п )), Винограда [Winograd 1968], Копперсмита и
Винограда [Coppersmith, Winograd 1982]. Для числовых матриц эти
алгоритмы работают быстрее только при п > 20 и дают выигрыш
не более 18% при п = 100 [Brent 1970]. Весьма вероятно, что
те же выводы остаются в значительной степени справедливыми
для матриц в компьютерной алгебре. Нам не известно, чтобы
какая-либо система использовала эти "быстрые" методы.
Когда речь идет об обращении матриц и связанных с ним
задачах, таких, как решение систем линейных уравнений и
вычисление определителей, алгоритмы численного анализа
применять непосредственно не удается, поскольку трудности,
возникающие в компьютерной алгебре и в численном анализе,
весьма различны. Прежде всего, в компьютерной алгебре нет
проблемы численной устойчивости, поэтому любой ненулевой
элемент является хорошим ведущим элементом для гауссова
176—8
114 Проблема представления данных
исключения. В этом отношении компьютерная алгебра проще
численного анализа.
С другой стороныf имеется серьезная проблема разбухания
данных, как промежуточных, так и окончательных. Например,
если рассмотреть матрицу общего вида порядка три, т.е.
a b с
d e f
g h i _
то ее определитель равен
aei - afh - bdi + bfg + cdh - ceg,
а обратная к ней матрица равна
ei-fh -bi+ch
1
aei - afh - bdi + bfg + cdh - ceg
Для общей матрицы четвертого порядка определитель равен
-di+fg ai-cg
[ dh-eg -ah+bg
bf-ce
af+cd
ae-bd
afkp - aflo - agjp + agin + ahjo - ahkn - bekp + belo +
+ bgip - bglm - bhio + bhkm + cejp - celn - cfip + cflm +
+ chin - chjm - dejo + dekn + dfio - dfkm - dgin + dgjm,
а обратная матрица слишком большая, чтобы распечатать ее
здесь. Поэтому в общем случае данные разбухают в огромной
степени, если приходится обращать матрицу общего вида, и то
же самое относится к определителям таких матриц или к
решениям соответствующих линейных систем. Такие результаты
могут появляться в качестве промежуточных данных в
вычислениях, окончательный результат которых невелик, например при
Г М М
вычислении определителя, равного 0, матрицы вида
[ММ
где М - матрица общего вида.
Другая серьезная проблема, особенно при вычислении
определителей, - проблема деления. Согласно правилу Крамера,
определитель матрицы - это сумма (возможно, со знаками
минус) произведений элементов матрицы. Таким образом, если
эти элементы принадлежат кольцу (например, кольцу целых
чисел или полиномов), то определитель также принадлежит
Компьютерная алгебра 115
корректно опреде-
этому кольцу. Но метод исключения требует выполнения
делений. Эти деления могут оказаться невыполнимыми (например,
нельзя делить на 5 или 2 в кольце вычетов по модулю 10, но
Г 5 2 -
тем не менее определитель матрицы
лен, а именно равен 1). Даже если деление возможно, могут
потребоваться вычисления с дробями-, которые весьма
трудоемки ввиду необходимости вычисления НОД (что часто
нетривиально).
Барейс [Bareiss 1968] описал хитрую модификацию гауссова
исключения, в которой каждое деление в кольце должно давать
результат из того же кольца, а не дробь. Этот метод
(описанный в следующем разделе) очень частб используется в
компьютерной алгебре, если кольцо элементов допускает
деление (точнее, если кольцо - область целостности). С другой
стороны, имеется метод, предложенный Сасаки и Мюрао
([Sasaki, Murao 1981], [Sasaki, Murao 1982]), в котором к кольцу
добавляют несколько переменных и сохраняют только несколько
членов, от этих переменных.
Метод Крамера, который записывает определитель матрицы
порядка п в виде суммы п\ произведений по п элементов
матрицы, численно очень неэффективен: число операций равно
0(п(п\)) вместо 0(п3) в алгоритме гауссова исключения. Но в
компьютерной алгебре цена операции зависит от размера
используемых данных. В этом разложении каждое промежуточное
вычисление выполняется с данными, которые (по крайней ме^ре,
если нет сокращений) меньше, чем результат. Кажется, что
для матриц полиномов от нескольких переменных, (эти полиномы
должны быть разреженными, иначе сложность будет огромной)
этот метод гораздо более быстрый, чем любой метод,
основанный на гауссовом исключении. Для случая матриц целых чисел
или полиномов от одной переменной наиболее эффективным
представляется алгоритм Барейса.
2.8.2. Алгоритм Барейса
Фактически Барейс предложил целое семейство методов
исключения без использования дробей, т.е. таких, где все
необходимые деления выполняются точно. Эти методы решают
116 Проблема представления данных
проблему, поставленную в разделе "Представление дробей", -
проблему нахождения алгоритма, который не требовал бы
вычислений с дробями. Простейший метод, называемый одношаго-
вым и в действительности известный еще Жордану, основан на
обобщении тождества Сильвестра
Лк)
*1.1
22,1
*1,2
*2,2
*kt\ г,2
aiA
а1Л
Пусть а. . - определитель
a\.k a\,i
а2,к a2,i
k,k ktj
а . . а . .
В частности, определитель матрицы порядка п (элементы
которой суть а. .) равен а '. Основное равенство имеет вид
а<*>.
(k-2)
а
k-1, k-\
kt k kt /
а<*71) aW
l,k I, J
Другими словами, после исключения мы можем быть уверены,
что сможем выполнить деление на ведущий элемент предыдущего
исключения.
Для демонстрации метода Барейса рассмотрим матрицу
третьего порядка общего вида, т.е.
6i,i 61.2 *1.з
*2.1 *2,2 ^2,3
ЬЗА ^3,2 *3,3
После исключения с помощью первой строки (без деления)
получаем матрицу
1,1
О
О
1,2
*2,2*1.Г *2.1*1,2.
1,3
*2.3*1.1 " *2.1*1.3
*3.2*1.Г *3.1*1.2 *3.3*1.1 " *3.1*1.3
Второе исключение дает нам матрицу
Компьютерная алгебра 117
1,1
О Ь,
2.2*1.1"
1,2
■*2.А.2
*2.3*1.1
■А. пЬ.
1.3
- 6.
2.1*1.3
l.l' 3,3,2,1
~ *3,3*2,1*1,2
- *3.2*2.3*1.1 + *3,2*2(А,3 +
+ »-.*--*.- -*з. Л. 2*1.3)
3,1 2,3 1,2
и очевидно, что b делит все элементы "третьей строки.
Общее соотношение имеет вид
(•!?]
fe-f
"fe,/+l
а<.'> ,
,«>
,@
Ч+1,/г **/+!./
а<.<> а<'>.
из которого ранее цитированное равенство получается в
качестве частного случая при / = k-l.
2.8.3. Разреженные матрицы
При работе с разреженными матрицами компьютерная алгебра
приближается к методам численного анализа. Мы часто
пользуемся представлениями, в которых каждая строка матрицы
задается списком ненулевых элементов строки, каждый из которых
хранится в памяти вместе с указанием номера его столбца.
Можно использовать также метод запоминания по столбцам, а
кроме того, существует несколько более сложных методов. . В
этом случае сложение выполняется достаточно просто, но
умножение становится более сложным, поскольку нам нужно
пересечь левую матрицу строка за строкой, а правую -
столбец за столбцом.
Для определителей основная идея - это разложение
Крамера, но имеется несколько хитрых приемов выбора лучшего
направления разложения и использования уже вычисленных
значений вместо их повторного вычисления. Частично эта техника
показана в работе Смита [Smit 1981].
Обратная матрица для разреженной обычно является
плотной, поэтому ее вычислять не следует. Таким образом, имеет-
118 Проблема представления данных
ся три общих метода решения системы Ах = Ь линейных
уравнений. Прежде всего, существует формула (принадлежащая, по-
видимому, Лапласу), выражающая компоненты х. решения через
Ь. и А. ., миноры матрицы Л, т.е. определители матрицы,
получающейся вычеркиванием /-го столбца и /-й строки
матрицы А. Действительно,
Эти миноры можно вычислить по правилу Крамера, при этом
достаточно хороши шансы повторного использования
промежуточных результатов вычисления в последующих вычислениях.
Смит [Smit 1981] описал несколько приемов, улучшающих этот
алгоритм. Однако следует отметить их дефект, состоящий в
том, что для хранения повторно используемых результатов
нужна память.
Второй путь - воспользоваться гауссовым исключением (или
его вариацией, описанной для случая плотных матриц). Можно
выбирать исключаемые строки (или столбцы) в соответствии с
числом содержащихся в них ненулевых элементов (а для тех,
которые содержат их одинаковое количество, можно попытаться
минимизировать создание новых элементов и максимизировать
пересечения положений ненулевых элементов при сложении
строк или столбцов). Такое "интеллигентное исключение"
написать довольно легко , но в общем случае по мере
выполнения этих операций матрица становится все менее и менее раз-
реженной, и время вычислений остается порядка 0(п ). Этот
метод использовался Копперсмитом и Дэвенпортом
[Coppersmith, Davenport 1985] для решения системы 1061 уравнения
от 739 переменных, и разбухание информации действительно
произошло.
Совсем недавно несколько авторов применили итерационные
методы численного анализа, такие, как метод Ланцоша и метод
сопряженных градиентов, в компьютерной алгебре.
По-видимому, эти методы для крупных задач заслуживают большего
внимания, чем гауссово исключение, хотя для маленьких задач и
Для этого потребовалось менее ста строк на языке
SCRATCHPAD-II [Jenks 1984].
Компьютерная алгебра 119
даже для задачи Копперсмита и Дэвенпорта их скорость ниже.
Эти методы обсуждаются в работе [Coppersmith et al. 1986].
2.9. ПРЕДСТАВЛЕНИЯ РЯДОВ
Компьютерная алгебра не ограничивается конечными
объектами типа полиномов. Она позволяет работать с некоторыми
типами бесконечных рядов. Разумеется, компьютер может иметь
дело только с конечным числом объектов, т.е. первых членов
ряда.
2.9.1. Ряды Тейлора: простой метод
Эти ряды весьма полезны для разных приложений, особенно
когда речь идет о нелинейных задачах, которые становятся
линейными при пренебрежении некоторыми малыми величинами.
Здесь можно надеяться, что решение можно представить в виде
ряда Тейлора и что для приложений (например, получения
численного значения) достаточно небольшого числа членов.
Очень часто эти ряды можно вычислять по методу,
называемому методом последовательных приближений. Например, возь-
мем уравнение у = 1 + е, где у - неизвестная, а е - малая
величина, и найдем представление у в виде ряда Тейлора
относительно е. Будем обозначать через у ряд, вычисленный с
точностью до члена с ent где у0 = 1 (или -1, но мы будем
разлагать первое решение). Исходя из у , можно вычислить
у + по следующему методу:
1 + е = «/2+1 + 0(е"+2) =
= ^2^„+/+1 + °(*П+2>-
Если d +1 - коэффициент при еп+' в \ + е-у , то из этой
формулы следует, что с +.=d +./2yQ. Таким образом,
получаем довольно простую REDUCE-программу для вычисления у,
например до степени е10:
120 Проблема представления данных
ARRAY TEMPB0);
Y:=l;
FOR N:=l:10 DO «
C0EFFA+E-Y**2,E,TEMP);
Y:=Y+TEMP(N)*(E**N)/2 »;
Недостаток этой программы заключается в том, что она
явно вычисляет все члены у , даже те, которые не дают
вклада в результат. REDUCE обладает механизмом, позволяющим
избежать таких вычислений: это - использование WEIGHT и
WTLEVEL. Подробности будут даны в приложении по системе
REDUCE, а здесь приведем алгоритм, переписанный с
использованием этой техники.
WEIGHT E=l;
Y:=l;
FOR N:=l:10 DO «
WTLEVEL N;
Y:=Y+(l+E-Y**2)/2 »;
В данном случае существуют более простые методы, напри-
. мер биномиальная формула или непосредственное программиро-
п 2
вание, вычисляющее только члены от е в выражении для у ,
но эти методы довольно специфичны. Описанный метод
последовательных приближений может применяться ко многим другим
задачам - некоторые примеры приведены в работе [Fitch
1985].
С рядами можно обращаться так же, как и с полиномами, -
фактически большинство систем компьютерной алгебры не
проводят между ними различия. Вообще точность (т.е. наивысшая
степень е в только что рассмотренном случае) результата -
это минимум точности данных. Например, в сумме
п . m min(m,n)
ЕаеЧ EftV = Е (a.+ b)el
/=0 1 /=0 ' /=0 1 1
члены результата при />min(m,Az) нельзя определить чисто
как функцию данных - нам нужно знать больше членов а. или
Ь.у чем нам дано. В частности, если все начальные данные
имеют одну и ту же точность, то результат имеет ту же самую
Компьютерная алгебра 121
точность - у нас не происходит накопления ошибки, что
типично для численного анализа.
Тем не менее в некоторых случаях возможна потеря
точности. Например, если мы будем делить один ряд на другой,
начинающийся не с члена нулевой степени, в частности для
следующих рядов:
п m . min(m-l,n)
обнаруживается потеря точности. (Заметим, что cQ = а./Ь'
более сложно вычислить другие е., но в таких вычислениях
часто используется метод последовательных приближений.)
Это может произойти и при извлечении квадратного корня:
4 /-о /-0 у
если aQ * 0 (в этом случае bQ = л/оГ, а остальные Ь. могут
быть определены на основе этого значения методом
последовательных приближений). С другой стороны, если aQ - 0, то ряд
имеет совсем другой вид. Если а.гО, то ряд не может быть
записан в виде ряда по е, ему - потребуются члены от Ve;
получается ряд Пюизо. Если aQ = a1=0, но Д2*0, то ряд
остается рядом Тейлора:
I п " л-1
Е V1 = Е V-
J i-2 ' / = 1 '
Здесь в действительности происходит потеря точности,
поскольку коэффициент Ъ не определяется по коэффициентам а.,
но требует для своего определения знания коэффициента а «.
Чтобы избежать этой потери точности, нам следует
принимать меры предосторожности, поскольку простое использование
полиномиальных вычислений не предупредит нас о такой
опасности. Однако ситуация значительно менее сложная, чем в
численном анализе. Нет постепенной потери точности, такой,
которая порождается численным округлением. Обстоятельства,
приводящие к такой потере, хорошо известны, и можно писать
программы так, чтобы выдавались соответствующие сообщения.
122 Проблема представления данных
При необходимости можно работать с более высокой точностью
и проверять, что получаются те же результаты, но это - на
крайний случай.
2.9.2. Ряды Тейлора: метод Нормана
Имеются приложения, в которых потеря точности, описанная
в предыдущем разделе, встречается очень часто. Более того,
простой метод требует, чтобы все члены промежуточных
результатов были вычислены до того, как появляется первый
член окончательного результата. Норман [Norman 1975]
поэтому предложил следующий метод: вместо вычисления всех членов
cQ, ..., с ряда до их использования мы формулируем общее
правило, которое выражает с. через эти данные, и даем
системе задание вычислять каждый член с. в тот момент, когда
он требуется.
Для нормальных операций эти общие правила не слишком
сложны, как показывает следующая таблица (прописная буква
обозначает ряд, а соответствующая строчная буква обозначает
коэффициенты этого ряда):
С = А + В с- а . + Ь.
i i i
С = Л-В с.= а.-Ь.
i i t
С = Лх В с.= У а.Ь. .
1 /-0 ' *"'
С = Л/В с.= l L4* I '-I {D)
(Последнее равенство выполняется только при b * 0 -
равенство в общем случае чуть посложнее.) Норман показал также,
что любая функция, определенная линейным дифференциальным
уравнением, приводит к аналогичным уравнениям для
коэффициентов ряда Тейлора.
Эти правила были реализованы Норманом [Norman 1975] в
системе SCRATCHPAD-I [Griesmer et al. 1975], системе,
автоматически вычисляющей значения, задаваемые данными
правилами. Например, достаточно запросить значение с , чтобы были
выполнены все необходимые вычисления. Более того, система
запоминает уже вычисленные значения, вместо того чтобы вы-
Компьютерная алгебра 123
числять их снова. Последний штрих весьма существен для
эффективности метода. Возьмем, например, случай деления
(соотношение (D) выше). Вычисление каждого с. требует /
сложений (или вычитаний), / умножений и одного деления, что со-
ставляет (п + 1) операций для вычисления cQ, ..., с .
Однако, если предположить, что с. не запоминаются,
сложность вычислений сильно изменяется. Для вычисления с нужно
деление. Для вычисления с требуется умножение, вычитание и
деление, но требуется также вычисление с ; в результате
получаем одно сложение (или вычитание), одно умножение и
два деления, что мы обозначаем [А = 1, M = ly D = 2]. Для
вычисления с требуются два сложения/вычитания, два
умножения и одно деление плюс вычисление с и с , что оценивается
в [А = 3, М = 3, D = 4]; цена получается уже выше, чем при
методе с запоминанием, поскольку с вычисляется дважды.
Вычисление с требует [А = 3, М = 3, D = 1] плюс вычисление
с , с , с , что оценивается 'в [А = 7, М = 7, D = 8].
Аналогично вычисление £ стоит [А = 15, Af = 15, Z) = 16], а общая
формула для с имеет вид [Л = М = 2п-1, D = 2n]. Ситуация
была бы намного хуже, если бы данные а. и Ъ. требовали
подобных вычислений до своего использования.
Такая система рекурсивных вычислений может быть
реализована в других системах компьютерной алгебры: Дэвенпорт
[Davenport 1981] построил в системе REDUCE подсистему, которая
вычисляет ряды Пюизо (т.е. ряды с дробными показателями
степеней) алгебраических функций. Внутреннее представление
ряда - это список уже вычисленных коэффициентов, к которому
добавлено общее правило вычисления остальных коэффициентов.
Например, если Т1 и Т2 - два таких представления, то
представление, соответствующее Т1*Т2, в котором уже вычислены
два коэффициента с и с , принимает вид :
(((О . с0) A . сх)) TIMES Tl T2)
а команда для вычисления с превратит эту структуру в
По техническим причинам Дэвенпорт вместо TIMES
использовал специальные символы, такие, как TAYLORTIMES.
124 Проблема представления данных
(((О . с0) A . сг) B . с2)) TIMES Tl Т2)
с возможным дополнительным разложением Т1 и Т2, если
требуются дополнительные члены этих рядов.
Эта идея работы с бесконечным объектом, для которого
вычислена только конечная часть, очень близка идее ленивых
вычислений, которая используется в информатике. Достаточно
просто (может быть, хватит сотни строк [Ehrhard 1986])
реализовать подобным образом ряды Тейлора в языке ленивых
вычислений, таком, как "Lazy ML" [Mauny 1985].
2.9.3. Другие ряды
Кроме рядов Тейлора (и их вариаций типа рядов Лорана и
Пюизо) существует несколько других типов рядов. Семейство
рядов, весьма полезных в некоторых областях, - это ряды
Фурье, т.е.
п
f = an+ Y a .cos it + b .sin it.
о .^ i
Простая функция sin / (или cos t) представляет решение
уравнения у" + у = О, и некоторые возмущения этого
уравнения могут быть представлены рядами Фурье, которые часто
вычисляются с использованием метода последовательных
приближений. Некоторые примеры приводятся в работе [Fitch
1985].
Для систем компьютерной алгебры, основанных на
полиномиальных вычислениях, рассмотрение таких рядов представляет
большую трудность, чем рассмотрение рядов Тейлора. Причина
заключается в том, что произведение двух базовых членов не
является более базовым членом: е'хе7=е' + /, но cos it x
х cos jt * cos (i+j)t. Можно, коаечно, переписать это
произведение в терминах базовых функций по правилам
перезаписи, приведенным в параграфе "Представление трансцендентных
функций", но (по причинам, приведенным в данном параграфе)
это может оказаться весьма накладно. Если мы хотим
рассматривать большие ряды такого типа, то более эффективным
выглядит использование представления этих рядов, в котором
умножение может выполняться непосредственно, например
вектором коэффициентов ряда. Имеются системы, в которых для
Компьютерная алгебра 125
рядов Фурье автоматически используется представление такого
вида, - примером их служит система CAMAL [Fitch 1974].
Читатель может заметить, что соотношение между усечением
и умножением таких рядов не такое простое, как для рядов
Тейлора. Если мы пользуемся обозначением [...J , чтобы
показать, что выражение обрезано после члена с индексом п
(например, еп или cos nt)y то увидим, что
"оо
Е *?
00
Е У
п
оо
Е а.е1
п
оо
Е Ь.е1
л-"
НО
"оо
Е a .cos it
J=0 l
"оо
J] 6.COS tf
n
00
J] a .cos it
_/=0 *
n
00
J] 6.COS #
n-*
По этой причине коэффициенты наших рядов Фурье должны
стремиться к нулю контролируемым образом, например а. = 0(е1),
где £ - предполагаемая малой величина. В этом случае
соотношение (F) становится верным равенством.
Читатель легко может найти другие ряды типа рядов
Пуассона, которые можно обрабатывать подобным образом. Параграф
о решениях линейных дифференциальных уравнений в форме
рядов иллюстрирует некоторые из этих вопросов более подробно.
Глава 3
ПОЛИНОМИАЛЬНОЕ УПРОЩЕНИЕ
3.1. УПРОЩЕНИЕ ПОЛИНОМИАЛЬНЫХ УРАВНЕНИЙ
Очень часто при изучении некоторой ситуации мы
обнаруживаем, что она определена системой полиномиальных уравнений.
Например, положение механической структуры, образованной
двумя сегментами длин 1 и 2 соответственно, соединенными в
одной точке, определяется девятью переменными (три точки по
три координаты каждая), подчиненными соотношениям
<*1-*2>2 + (У1-*2>2 + (г1-г2J = 1'
2 2 2 W
или, может быть, соотношениям
(*! - х2)г + {уг - у2)г + (Zj - z2f = 1,
B*1 " *2 " *з Н*з - *г> + <2»i - Н - УзКУз ' У J + A')
+ B21-22-2з)B3-г2) = -3
(где второе уравнение мы заменили разностью этих двух
уравнений), или, аналогичным образом, соотношениям
B*1 - Х2 ~ *3К*3 " *2> + B^1 " ^2 " «З^З - *2> +
+ B^-22-e3)(z3-z2) = -3, (Г)
(^-^3J + ^1-^зJ + (г1-гзJ = 4»
или многим другим вариантам. Основной вопрос данного
параграфа может быть выражен следующим образом: каким конечным
списком соотношений мы должны пользоваться?
Любое вычисление движения этого объекта должно принимать
во внимание эти соотношения или, более формально,
происходить в идеале, порожденном этими образующими.
Компьютерная алгебра 127
Определение. Идеал, порожденный семейством образующих,
состоит из множества линейных комбинаций этих образующих с
полиномиальными коэффициентами.
Определение. Два полинома fug эквивалентны
относительно некоторого идеала, если их разность принадлежит этому
идеалу.
Если мы рассматриваем образующие идеала как полиномы,
которые мы приравниваем нулю, это определение утверждает,
что рассматриваемые полиномы не различаются.
Поэтому в данном параграфе мы исследуем такие вопросы:
A) Как мы определяем идеал?
B) Как мы выясняем, эквивалентны ли два полинома
относительно данного идеала?
3.1.1. Редукция полиномов
Очевидно, у одного и того же идеала существует несколько
систем образующих. Всегда можно добавить любую линейную
комбинацию образующих или удалить одну из них, если она
является линейной комбинацией остальных. Имеется ли простая
система образующих? Разумеется, такой вопрос требует
уточнить понятие "простоты". Оно зависит от порядка на мономах
в наших полиномах (см. параграф "Полиномы от нескольких
переменных").
Рассмотрим полиномы от переменных х.у х~, ..., х ,
коэффициенты которых принадлежат полю k (т.е. можно их
складывать, перемножать, делить и т.д.). Пусть < - порядок на
мономах, удовлетворяющий следующим двум условиям:
(a) Если а < Ьу то для любого монома с имеем ас < be.
(b) Для любых мономов а и Ъ, если 6*1, то а < аЬ.
Три , порядка - лексикографический', общей степени, затем
лексикографический и общей степени, затем обратный
лексикографический, - удовлетворяют этому критерию. Предположим,
что любой (ненулевой) полином записывается в порядке убыва-
Это определение является общим определением из
абстрактной алгебры, специализированным для случая полиномов.
128 Полиномиальное упрощение
ния (относительно < ) своих мономов: £" а .X., где а *0
и Х.>Х.+ . для любого /. Назовем X* старшим мономом, а
о-лХу - старшим членом полинома.
Пусть G - конечное множество полиномов и > -
фиксированный порядок, удовлетворяющий сфррмулированным выше
условиям.
Определение. Полином / редуцирован относительно G, если
ни один старший моном элемента множества G не делит
старшего монома полинома /.
Другими словами, старший моном никакой из комбинаций / -
- hg. полинома / и элемента множества G не меньше
(относительно порядка <) старшего монома полинома /. Если /
нередуцирован, то из него можно вычесть кратное некоторого
элемента множества G, чтобы исключить его старший моном (и
получить новый старший моном, меньший, чем старший моном
полинома /); этот новый полином эквивалентен / относительно
идеала, порожденного множеством G. Этот процесс называется
редукцией полинома f относительно G. Следует отметить, что
полином может иметь несколько редукций относительно G (по
одной для каждого элемента множества G, старший моном
которого делит старший моном полинома /). Например, пусть
G = {g.= х-1, g2 = y-2} и f = xy. Тогда имеются две
возможные редукции полинома /: с помощью gv которая дает
f - yg1 = -у, и с помощью g , которая дает / - xg2 = -2х.
Полином / не может иметь бесконечной цепочки редукций: она
должна заканчиваться редуцированным полиномом.
Определение редуцированного полинома включает в себя
старший моном полинома / и требует, чтобы ни у какой
линейной комбинации / - hgi старший моном не был меньше, чем у
/. Возможно, что в / существуют другие мономы, которые
могут быть исключены, чтобы сделать линейную комбинацию
"меньшей". Предположим, что переменные суть х и у,
подчиненные лексикографическому порядку у < х, и что G = {у - 1}.
Полином х + у +у редуцирован, поскольку его старший моном
- это х. Тем не менее можно исключить относительно G мономы
у и у. Этот факт приводит к следующему определению, более
сильному, чем определение редуцированности.
Компьютерная алгебра 129
Определение. Полином f вполне редуцирован относительно
G, если ни один моном полинома / не делится ни на один
старший моном элемента множества G.
3.1.2. Стандартные базисы (базисы Грёбнера)
Определение. Система образующих (или базис) G идеала /
называется стандартным базисом, или базисом Грёбнера
(относительно порядка < ), если в результате любой редукции
элемента / идеала / к редуцированному полиному относительно G
всегда получается нуль.
Эквивалентное определение состоит в том, что любой
полином / обладает единственной редуцированной относительно G
формой. Другое, более эффективное определение будет
приведено в разделе "Алгоритм Бухбергера". На языке информатики
мы обычно говорим в этом случае, что редукция относительно
G обладает свойством Черна - Россера. В общем случае
стандартные базисы идеала дают нам гораздо больше информации об
этом идеале, чем любые другие базисы.
Например, рассмотрим идеал, порожденный тремя полиномами
gx = x3yz-xz2y
. £2 = хУ2г ~ ХУ2>
g3 = *У - г.
Очевидно, что при х = у = z = 0 все три полинома обращаются
в нуль, - не очевидно, что есть другие решения. Стандартный
базис этого идеала (относительно лексикографического
порядка x>y>z) образуют полиномы g , g и три следующих
полинома:
g^^yz-z2,
= yz2 - г2,
= х222-23.
^5
g = г2^ - ~3
(Стандартный базис вполне может содержать больше полиномов,
чем исходный базис, - к этому эффекту мы вернемся в конце
раздела "Алгоритм Бухбергера".) Теперь очевидно, что
имеется две возможности: либо 2 = 0, либо 2*0. Если 2 = 0, то
эти полиномы редуцируются к х2у2\ поэтому х = 0 или у = 0.
Если 2*0, то эти полиномы редуцируются к у = 1 и х2 = 2.
176—9
130 Полиномиальное упрощение
Значит, множество общих нулей множества G состоит из двух
прямых (х = z = 0 и у = z = 0) и параболы (у=1, х = z).
Сформулируем сейчас несколько теорем о стандартных
базисах. Мы не будем их доказывать: читатель, интересующийся
доказательствами, может найти их в работах Бухбергера
[Buchberger 1970, 1976а, Ь, 1979, 1981, 1985].
Теорема 1. Любой идеал обладает стандартным базисом
относительно любого порядка (удовлетворяющего
сформулированным выше условиям (а) и (Ь)).
Теорема 2. Два идеала равны тогда и только тогда, когда
они имеют один и тот же редуцированный стандартный базис
(односительно одного и того же порядка).
Под редуцированным базисом подразумевается базис, каждый
полином которого вполне редуцирован относительно всех
остальных. Это ограничение необходимо, чтобы исключить
тривиальности типа {х-1, (х-\J}: этот базис, отличается от
{х-\}> но только потому, что он нередуцирован. Фактически
эта теорема дает каноническое представление идеалов (как
только мы фиксируем порядок).
Теорема 3. Система полиномиальных уравнений несовместна
(не может быть удовлетворена, даже если допустить
алгебраические расширения, - например, над полем комплексных чисел
С) тогда и только тогда, когда соответствующий стандартный
базис (относительно любого порядка, который удовлетворяет
сформулированным выше условиям (а) и (Ь)) содержит
константу.
3.1.3. Решение системы полиномов
Теорема 4. Система полиномиальных уравнений имеет
конечное число1^ решений над С тогда и. только тогда, когда
каждая переменная появляется изолированно (например, как zn) в
одном из старших членов соответствующего стандартного
базиса относительно лексикографического порядка.
В геометрии соответствующий идеал называется нульмерным.
Компьютерная алгебра 131
В этом случае мы можем определить все решения при помощи
следующего метода. Предположим, что переменные суть
хЛУ х0, ..., х , где хЛ > хп > ... > х . Переменная х по-
1 2 п 1 1 п Г п
является одна в старшем члене некоторой образующей
стандартного базиса. Но все остальные члены этой образующей
меньше (в смысле <), чем этот член, и поэтому могут
содержать только х , так как мы пользуемся лексикографическим
порядком. Таким образом, у нас есть полином от х (причем
только один, потому что при наличии двух полиномов мы
всегда можем редуцировать один из них относительно другого),
который имеет только конечное число корней. Переменная х .
появляется сама по себе (в степени к> например) в старшем
члене некоторой образующей стандартного базиса. Но все
остальные члены этой образующей меньше (в смысле <), чем этот
член, и поэтому могут содержать только х _. (в степени
меньшей, чем k) и, может быть, х , так как мы пользуемся
лексикографическим порядком. Для каждого возможного
значения переменной х мы имеем к возможных значений
переменной х • корни этого полинома от х .. Возможно, что име-
п-\ г п-\
ются другие полиномы от х _1 и х и что некоторые
комбинации значений х _. и х не удовлетворяют этим полиномам и
потому должны быть отброшены, но наверняка у нас имеется
только конечное число возможностей для х л и х . Перемен-
п-1 п г
ные х _2, ..., х. определяются аналогично.
Следует заметить, что мы предполагали, что каждая
переменная появляется изолированно. Это предположение нельзя
заменить более слабым предположением о том, что каждая
переменная появляется в качестве старшей переменной, как
можно убедиться на следующем примере. Рассмотрим две
переменные х и уу где х > у. Наш идеал порожден полиномами
(у - \)х + (у - 1) и у2 - 1, образующими (по причинам,
которые будут объяснены позже) стандартный базис, но базис,
не удовлетворяющий предположениям теоремы 4, поскольку х не
появляется изолированно. Для у имеется два возможных реше-
В общем случае. Возможно, что имеются кратные корни,
поэтому число различных корней может быть и меньше, чем к.
132 Полиномиальное упрощение
ния, т.е. 1 и -1. Если у = -\> то вторая образующая
принимает вид -2х-2 и обращается в нуль при х=-\. Но если
у=\У то вторая образующая обращается в нуль тождественно,
и значение х не определено.
Для теоремы 4 имеется очевидное обратное утверждение:
идеал имеет размерность, отличную от нуля, тогда и только
тогда, когда имеется переменная, которая не появляется как
единственная переменная ни в одном из старших членов
стандартного базиса (относительно лексикографического порядка).
В этом случае теория существенно сложнее (в работе [Giusti
1984] даются некоторые наброски, но алгоритмы в этой
области находятся в стадии развития). Естественно предположить,
что число таких переменных определяет размерность идеала
(единица, если существует кривая, на которой обращаются в
нуль все полиномы; два, если речь идет о поверхностях и
т.д.), но эта гипотеза не верна. Возьмем, например, два
следующих идеала:
11={х2-\, (х-\)у, (дг+1)*},
/2 = {*2-i, (х-\)У, (х-т.
Их стандартные базисы относительно лексикографического
порядка х > у > z суть
/х = {JC2 - 1. (х-\)у, (х + 1)г, yz),
/2={*2-i, (х-1)У, (х-т.
В действительности размерность идеала не превосходит
1, если для любой пары переменных найдется элемент базиса
Грёбнера, старший моном которого содержит только эти
переменные, и в общем случае размерность идеала не превосходит
ky если для любых k +1 переменных найдется элемент базиса
Грёбнера, старший моном которого зависит только от этих
переменных (см., например, [2о]). Более тонкой
характеристикой размерности алгебраического многообразия является его
функция (или полином) Гильберта, степень которого совпадает
с размерностью многообразия. В работах [51], [25]
излагаются различные "алгоритмы вычисления полинома Гильберта по
известному базису Грёбнера для упорядочения мономов с
учетом их степени. Кроме того, в работе [25] предложен
алгоритм вычисления степени полинома Гильберта (размерности
многообразия), не требующий вычисления всех коэффициентов
этого полинома. Вопросы практического вычисления
размерности обсуждаются в [44]. - Прим. перев.
Компьютерная алгебра 133
В обоих переменная х появляется изолированно, но ни */, ни z
изолированно не появляются. Однако размерность идеала /
равна 1, поскольку его решения суть две прямые *=1, 2 = 0
и х=-1, t/ = 0, в то время как размерность идеала / равна
2, поскольку его решения - это плоскость х = 1 и
изолированная точка х = -1, y=z = 0.
3.1.4. Алгоритм Бухбергера
Теорема 1 предпоследнего раздела утверждает, что любой
идеал обладает стандартным базисом - но как его вычислить?
И обратно, как проверить, является базис стандартным или
нет? В данном разделе мы разъясним алгоритм Бухбергера
[Buchberger 1970], с помощью которого мы можем решить эти
задачи. Предположим, что раз и навсегда мы выбрали порядок
мономов, удовлетворяющий условиям (а) и (Ь) раздела
"Редукция полиномов".
Определение. Пусть fug- два ненулевых полинома со
старшими членами / и g , a h - их НОК- S-полином полиномов
fug, S(f,g), определяется следующей формулой:
Ip Zp
Под НОК двух членов или мономов понимается произведение
всех переменных, каждая в степени, равной максимуму ее
степеней в этих мономах . h/g и h/\ суть мономы, поэтому
$(\>й) ~ линейная комбинация полиномов / и g с
полиномиальными коэффициентами и принадлежит идеалу, порожденному / и
g. Более того, старшие члены двух компонент полинома S(f,g)
равны (= Л), поэтому они взаимно сокращаются. Заметим, что
S(f,f) = 0 и что S(g,f) = -S(f,g).
Теорема 5. Базис G является стандартным тогда и только
тогда, когда для любой пары полиномов f и g из множества G
их S-полином S(f,g) редуцируется к нулю относительно G.
|
1 При вычислении НОК старших членов нужно перемножать
не только степени переменных, но и коэффициенты.
Определение S-полинома выбирается таким образом, чтобы старшие
члены уменьшаемого и вычитаемого взаимно уничтожились.-Прим.
перев.
134 Полиномиальное упрощение
Эта теорема дает нам критерий проверки, является ли
некоторый базис стандартным, - достаточно вычислить все S-no-
линомы и проверить, что все они редуцируются к нулю. Но
если наш базис не стандартный, то это в точности потому,
что один из этих S-полиномов (например, S(f,g)) не
редуцируется к нулю. Поскольку его редукция является линейной
комбинацией элементов множества G, можно добавить ее к G,
не изменив при этом порождаемый идеал. После этого
добавления S(fyg) редуцируется к нулю, но появляются новые 5-поли-
номы, которые также нужно рассматривать. Замечательный факт
(также доказанный Бухбергером [Buchberger 1970]): этот
процесс всегда оканчивается (и поэтому дает стандартный базис
идеала).
Применим этот алгоритм к примеру {g , g , g } раздела
"Стандартные базисы". Нужно рассмотреть S-полиномы
S(gvg2)> s(gyg3) и 5(£2'£з)- СтаРшие члены полиномов
g2 = xy2z- xyz и g3 = x2y2-z суть xy2z и х2у2у их НОК
р р
равен xyz. Поэтому
S(g2>g3) = -*g2 ~ z83 = (х2Уг* ~ х2у^ " (*2У2г ~ *2>= -*2Уг + *2-
Этот полином ненулевой и редуцирован относительно G,
поэтому базис G нестандартный. Значит, можно добавить к G этот
полином (или, чтобы сделать вычисления более читаемыми,
противоположный ему), обозначим его g . Теперь G состоит из
gx = x3yz-xz2,
g2 = xy2z - xyz,
g3 = x?y2-*>
gA = ^yz-z21
и нужно рассмотреть S-полиномы S(gvg2), S(gvg3),
5(grg4), S(grg^) и S(g3,g4). К счастью, можно выполнить
упрощение, заметив, что g = xg ; поэтому идеал,
порождаемый множеством G, не изменится, если удалить g . После
такого упрощения остается для рассмотрения только два
S-полинома: S(g2,g4) и S(g3,g4). Далее,
5(g2,g4) = xg2 - ygA = -x2yz + (/г2,
Компьютерная алгебра 135
и получившийся полином можно упростить (добавив g ), что
приводит к yz - z . Так как это не нуль, то базис
нестандартный, и нам нужно расширить G, добавив новую образующую,
которую обозначим g Теперь G состоит из
g2 = xy2z - xyzy
g3 = *V " 2.
. g5 = y# - Д
и нужно рассматривать S-полиномы S(g ,g ), S(g ,g ),
s(g3>g5) и S(g4,^5). Далее,
S(g3>g4) = ^3 " №4 = -*2 + J/*2>
и этот полином можно редуцировать к нулю (прибавив g ) (в
действительности эта редукция следует из третьего критерия
Бухбергера, который мы опишем позже).
S(g2,g5) = *£2 ~ хУ&ь = ~ХУ^ + xyz2 = °-
S(gA,g5) = *g4 - x2g5 = -z3 + x2z2 = *2z2 - г3,
где при последнем переписывании мономы упорядочиваются по
убыванию (относительно <). Этот полином уже редуцирован
относительно G, поэтому G не является стандартным базисом,
и нам нужно добавить к множеству G этот новый полином -
обозначим его g . Теперь множество G состоит из
g2 = xy2z - xyz,
g3 = x2y2 - z,
g^x2yz-z2,
g5=y2?-zZ,
gs = x22? - г3,
и нужно рассматривать S-полиномы S(g 3>g5)> *%2,g6),
S(grgs)> S(grg6) и S(g5,gG). Читатель может проверить,
что G редуцирует все эти S-полиномы к нулю, и, таким
образом, G является стандартным базисом данного идеала.
136 Полиномиальное упрощение
Нужно отметить, что этот алгоритм может выиграть от
использования некоторых методов оптимизации. Бухбергер [Buch-
berger 1979] дал критерий (третий критерий Бухберге^ра),
исключающий некоторые S-полиномы из рассмотрения. Он
доказал, что если имеется элемент h этого базиса, такой, что
его старший моном делит НОК старших мономов полиномов / и
g, и если мы уже рассмотрели S-полиномы S(f,h) и S(h,g)> то
не обязательно рассматривать 5-полином S(f,g)> поскольку он
будет редуцироваться к нулю.
Мы не подчеркнули, что нужно принимать во внимание выбор
S-полиномов. В общем случае существует несколько S-полино-
мов, которые нужно рассмотреть даже после применения
критерия Бухбергера. При любом выборе алгоритм даст один и тот
же результат, но время счета может быть различным.
Бухбергер [Buchberger 1979] утверждает, что выбор S-полинома, НОК
старших мономов которого имеет минимальную суммарную
степень (среди всех S-полиномов, которые нужно рассмотреть),
хорош и успешно согласуется с его критерием. Однако при
этом все еще может оставаться несколько возможностей. Су-,
ществует много эвристических методов, про которые
утверждается, что они выбирают "хорошие" S-полиномы из списка
S-полиномов, но это остается областью активных исследований.
Тем не менее наличие алгоритма не означает, что легко
решить любую задачу. Хотя Бухбергер доказал, что его
алгоритм конечен, он не дал каких-нибудь границ времени счета
или числа полиномов в стандартном базисе. Действительно,
эта проблема весьма сложна и активно изучается. Майр и Май-
ер [Мауг, Mayer 1982] показали, что вычисление стандартного
базиса требует в общем случае объема памяти,
экспоненциально зависящего от числа переменных п. На практике
встречались задачи, которые весьма легко были решены с
использованием этого алгоритма [Gebauer, Kredel 1984], а также
задачи, которые не удалось решить с использованием нескольких
мегабайт памяти.
Замечание, добавленное при корректуре: М.Жусти
сообщил, что им совместно с Мора недавно получено общее
ограничение.
Компьютерная алгебра 137
Случай одной переменной тривиален. Для случая двух
переменных Бухбергеру [Buchberger 1983] и Лазару [Lazard 1983]
удалось показать, что если все данные имеют общую степень,
ограниченную числом d, то общая степень элементов
стандартного базиса ограничена числом 2^-1, если используется
порядок "общей степени", и всегда ограничена числом d2.
Более того, число элементов в стандартном базисе ограничено
числом £ + 1, где к - минимум общих степеней старших
мономов всех данных. Все эти границы являются лучшими из
возможных.
Случай, когда переменных больше двух, сложнее. Мора
привел [Lazard 1983] пример кажущейся маленькой задачи
{хкЛ - yk~Xzt, xzk~x-yky xky-zkt)
с порядком общей степени, затем обратным лексикографическим
х> z> y> ty такой, что стандартный базис содержит поли-
k +1 k
ном у - z ty степень которого почти равна квадрату
степени исходных данных.
3.1.5. Сравнения с другими методами
Алгоритм Бухбергера в действительности представляет
собой комбинацию нескольких хорошо известных идей. Для случая
одной переменной и двух полиномов он эквивалентен алгоритму
Евклида нахождения НОД этих полиномов. Любой 5-полином -
это полином наивысшей степени минус (с некоторым
множителем) второй полином, и после расширения базиса с помощью
этого S-полинома полином более высокой степени можно
отбросить, поскольку он редуцируется к нулю относительно
остальных. Обобщение на случай нескольких полиномов тесно связано
с соответствующим обобщением алгоритма Евклида.
Для случая нескольких переменных и линейных полиномов
алгоритм Бухбергера соответствует исключению Гаусса,
поскольку S(f ,/ ) (в предположении, что / и /2 содержат
одну и ту же старшую переменную, - иначе S(f ,/; ) = 0) -
это линейная комбинация (с постоянными коэффициентами)
полиномов / и / , исключающая старшую переменную. Полином /
редуцируется к нулю относительно / и S(fvf'); поэтому он
138 Полиномиальное упрощение
может быть отброшен. Таким образом мы исключаем старшую
переменную из всех полиномов, кроме / , а затем продолжаем
вычисления со следующей переменной. Заканчиваем (если
система невырожденна) треугольной системой, т.е. такой,
которая удовлетворяет предположениям теоремы 4, а алгоритм,
указанный в ее доказательстве, эквивалентен использованию
обратной подстановки для определения решения треугольной
линейной системы.
Для общих систем имеется другой метод нахождения
решения - метод повторного исключения [Moses 1966]. Например,
для полиномов g , g и g , которые мы использовали в
качестве примера, можно исключить х из этих полиномов
(пользуясь результантом относительно х). Это приводит к
полиномам вида
(У - 1)аЛс
(а, Ь и с - целые числа). По этим полиномам можно
предположить, что существует три семейства решений: у = 1 с
некоторой зависимостью между z и х (в действительности, как мы
уже знаем, х = z)> y = 0 с некоторой зависимостью между z
и х (в действительности эта зависимость имеет весьма
специальный вид г = 0) и z = 0 с некоторой зависимостью между
у и х (здесь соотношение имеет вид х = 0).
В этом случае исключение дает те же самые результаты,
что и алгоритм Бухбергера, но в общем случае исключение
может дать не только истинные решения, но и некоторые
паразитические решения, т.е. решения редуцированной системы, не
являющиеся решениями исходной системы. Возьмем достаточно
простой пример: пример уравнений
(у-1)* + @-1) = О и (*/+1)*=0.
Исключив х из второго уравнения, получим систему
(у-1)х + (у-1) = 0 и у2 - 1 = 0,
про которую мы уже знаем, что ее решения суть точка у=х =
=-1 и прямая у-\ с произвольным х. С другой стороны,
исключив х из первого уравнения, получим систему
(у+\)х = 0> и i/2 - 1 = 0,
Компьютерная алгебра 139
решения которой суть прямая у = -1 с произвольным х и точка
у = 1 при х = 0. Таким образом, мы видим, что исключение
может дать даже несовместные результаты, зависящие от
порядка исключения. Чтобы сделать исключение корректным, нам
нужно проверить, что все решения удовлетворяют всем данным
уравнениям. Если уравнения не удовлетворяются, то еще
остается возможность, что истинно некоторое подмножество
решения, например подмножество у - х = -1 "решения" у = -1 и х
произвольно, которое мы получили ранее.
Соответствующий стандартный базис - это
2х - у + 1 и у2 - 1
с конечным множеством решений (теорема 4), которое явно
задается значениями у = ±1 с соответствующими значениями х:
х = 0 (когда у-\) и jc = —1 (когда у--\).
3.2. УПРОЩЕНИЕ СИСТЕМ ВЕЩЕСТВЕННЫХ ПОЛИНОМОВ
В этом параграфе мы будем рассматривать задачу, которая
кажется очень похожей на задачу, рассматривавшуюся в
предыдущем параграфе. Там мы имели дело с упрощением системы
полиномиальных уравнений над произвольным полем и указали
алгоритм приведения уравнений к каноническому виду, чтобы
определить, являются ли две системы эквивалентными и т.д.
Теперь мы будем рассматривать те же самые вопросы, но
ограничиваться вещественными значениями. В действительности
именно в такой постановке возникает большинство задач в
робототехнике, САПР (системах автоматизации проектирования)
и т.д. Мы увидим, что эти две ситуации весьма различны.
Вещественные системы отличаются от остальных систем в
двух отношениях:
A) можно добавлять неравенства, нечто, не имеющее
смысла для комплексных чисел;
B) размерность пространства решений не так очевидно,
как прежде, задается некоторыми уравнениями (или даже
единственным уравнением).
Рассмотрим последний пункт более подробно. Предположим,
что у нас есть две переменные, хну. Добавив нетривиальное
140 Полиномиальное упрощение
уравнение, в случае комплексных чисел получаем одномерное
пространство решений. В случае вещественных чисел положение
более сложное.
р р
• Уравнение х + у = 1 задает одномерное пространство,
т.е. окружность.
р р
Уравнение х + у = 0 задает нульмерное пространство,
т.е. точку х = у = 0.
р р
♦ Уравнение х + у = -1 задает пустое пространство,
поскольку у этого уравнения нет вещественных решений.
Как мы уже отмечали, исследования проблем, перечисленных
в предыдущем параграфе, продолжаются, и все еще остается
масса нерешенных важных вопросов. Это тем более верно для
данной проблемы; мы дадим только краткий обзор известных
методов и алгоритмов.
3.2.1. Случай R1
Этот случай сравнительно прост. Мы рассматриваем
несколько полиномиальных равенств и неравенств от одной
переменной и спрашиваем, чему равно число вещественных решений.
Мы будем всегда рассматривать случай, когда все
коэффициенты суть рациональные числа. Достаточно, по крайней мере в
принципе, рассмотреть случай системы вида
р^х) = ...=pk(x) = 0; qx(x)•> 0; ...; qk(x) > 0,
поскольку решение системы, содержащей неравенство вида
q \x) ^ 0, является объединением решений системы с
q .(х) = 0 и решений системы с q .(*) > 0. Более того,
достаточно заменить р. на их НОД (обозначаемый р), поскольку
общий корень непременно является корнем НОД.
Для решения этой системы достаточно знать все корни
полиномов р и q., где слово "знать" имеет некоторое
специальное значение.
Определение. Корень а полинома р называется
изолированным, если даны два рациональных числа а и Ъ, такие, что
а^а^Ь и на отрезке [а, Ь] имеется только один корень
полинома р. Этот отрезок называется изолирующим интервалом
элемента а.
Компьютерная алгебра 141
Вырожденный случай этого определения - случай
рационального корня, для которого достаточно выбрать а = а = Ь (но
такой выбор не обязателен).
Предложение. Для изолированного корня полинома
существует сколь угодно малый изолирующий интервал.
Доказательство. Для простого корня процедура очевидна. В
случае а = а (т.е. р(а) = 0) или а-Ь интервал может быть
редуцирован к точке. В остальных случаях вычисляем с =
= |{а + Ь) и определяем знаки чисел р(а)> р(с) и р(Ь).
Знаки чисел р(а) и р(Ь) обязательно различны, а знак числа
р(с) равен одному из них. Отбрасываем интервал [а, с) (или
(ct b])y на котором знак не меняется, и сохраняем
оставшийся [с, Ь] (или [а, с]), которому принадлежит корень. Таким
образом, мы уменьшили размер интервала в два раза и можем
продолжать подобным образом, пока интервал не станет
достаточно малым.
Если мы рассматриваем полином с кратными корнями, то
должны воспользоваться знаком свободной от квадратов части
полинома р, т.е. р/НОД(р,р').
С помощью этих идей можно построить следующий алгоритм
решения нашей задачи.
[1] Изолировать все корни полиномов р и q..
[2] Отбросить те корни полинома р, которые являются
также корнями q., поскольку они не удовлетворяют неравенству
q .(ос) > 0. Другими словами:
р1 := р/НОД(р,р');
для всех / выполнять р := р /НОД(р ,</.);
и сохранить только те корни полинома р, где р меняет знак
на изолирующем интервале.
[3] Редуцировать интервалы так, чтобы каждый определяю-
1
щии интервал для корня полинома р не содержал корня ни
одного из полиномов q., т.е. так, чтобы изолирующие
интервалы полиномов р и q. не пересекались.
[4] Для любого корня а полинома р , заключенного между а
и Ьу проверить, что все значения q. положительны.
Достаточно проверить, что q .(а) > 0, поскольку мы обеспечили уело-
142 Полиномиальное упрощение
вие, что полиномы q. не имеют корней между а и а и потому
не могут менять знак.
Алгоритм чисто рациональный и не требует каких-либо вы-
числений над числами с плавающей точкой. Он основан на
алгоритме изоляции корней, к описанию которого мы приступаем.
3.2.1.1. Изоляция корней
В этом разделе мы рассматриваем полином р(х) = 2^ «я .*'' .;
с целыми коэффициентами. Последнее предположение в действи- I
тельности не является ограничением, поскольку корни полино- *
ма не изменятся, если мы избавимся от знаменателей. Без \
потери общности можно предполагать, что р не имеет кратных I
множителей (т.е. что р и р* взаимно просты), поскольку эти \
множители меняют не корни, а только их кратности. Этой I
проблемой занимались многие выдающиеся математики, например }
Декарт в семнадцатом веке, Фурье, Штурм и Эрмит в девятнад- \
цатом веке и специалисты по компьютерной алгебре - с момен- \
та зарождения этой науки. Среди недавно вышедших статей j
отметим работы Коллинза и Лооса [Collins, Loos 1982] и Дэ- ]
венпорта [Davenport 1985b]; здесь приводится изложение ре- i
зультатов последней работы (без доказательств). _'\
1
Определение. Последовательностью Штурма, ассоциированной I
с полиномом р, называется последовательность полиномов с 1
рациональными коэффициентами р0(х), р^(х), ..., Р^(х) (где 1
k ^ п и р. - константа), определенная следующими равенства- 1
ми: ]
Р0(х) = Р(х) |
Р^(х) = Р'{х) A)
р.(х) = -остаток (р._2(х), р._^{х)) 1
где "остаток" означает остаток от деления одного полинома I
из кольца Q[jc] на другой. I
Фактически нам нужны только знаки значений элементов |
последовательности Штурма, так что имеет смысл избавиться 1
от их знаменателей и рассматривать эту последовательность I
как последовательность элементов кольца Z[x]. Это очень |
напоминает вычисление НОД, и элементы последовательности 1
Компьютерная алгебра 143
Штурма суть (с точностью до знака - подробность, которую
легко просмотреть) последовательные члены применения
алгоритма Евклида к р и р'\ именно поэтому мы всегда выходим на
константу, так как р и р' предполагаются взаимно простыми.
Последовательность Штурма может быть вычислена с помощью
любого метода вычисления НОД:
• наивного (но мы настоятельно рекомендуем им не
пользоваться - см. примеры роста встречающихся при этом целых
чисел в разделе "НОД" предыдущей главы);
• с помощью метода субрезультантов (см. тот же раздел),
но нам нужно убедиться, что отбрасываемые в этом методе
множители не меняют знака полинома;
• с помощью модулярного метода (описанного в следующей
главе), но здесь возникает серьезная проблема с
определением знака, и ее решить очень непросто.
Последовательность Штурма представляет интерес из-за ее
связи с вещественными корнями полинома р\ эта зависимость
разъясняется следующими определением и теоремой.
Определение. Пусть у - вещественное число, не являющееся
корнем полинома р. Вариация V(y) в точке у
последовательности Штурма, ассоциированной с р, - это число перемен
знака в последовательности р0(у), рЛу), ..., рЛу)-
Например, если значения элементов последовательности
суть -1, 2, 1,0 и -2, то вариация равна 2, так как знак
меняется между -1 и 2 и между 1 и -2 (нули игнорируются).
Теорема Штурма. Если а и b - две точки, не являющиеся
вещественными корнями полинома р, такие, что а < Ь, то
число вещественных корней полинома р в интервале (а, Ь) равно
V(a) - V(b).
Для а и Ь можно рассматривать и значения со и -со,
принимая за К(со) число перемен знаков среди старших
коэффициентов элементов последовательности Штурма, а за К(-оо) - такое
же число после изменения знаков старших коэффициентов
элементов нечетной степени. В частности, число вещественных
корней является функцией знаков старших коэффициентов.
144 Полиномиальное упрощение
Чтобы эта теорема дала нам алгоритм нахождения
вещественных корней полинома, нам нужно найти границу корней
этого полинома, чтобы мы могли начать поиск с конечного
интервала. Ниже приводятся три такие границы.
Предложение 1 [Cauchy 1829]. Пусть а - корень полинома
р. Тогда
' '. .'. I Д-
| ос | ^ 1 + тах|
[I Я J I # ol I Ал И
п-\ п-2 О
а N а у'"Ла -Г
Эта граница инвариантна относительно умножения полинома
на константу, но она плохо ведет себя при преобразовании
х—»*/2, которое меняет корни, умножая их на 2, но может
изменить границу на множитель 2п. Две следующие границы
избавлены от этого дефекта.
Предложение 2 [Cauchy 1829]. Пусть а - корень полинома
р. Тогда
\а\ ^ max
№.
»
па 0
п-2
а
п
1/2
Пап-3
а
п
1/3
а }'
Предложение 3 [Knuth 1981]. Пусть а - корень полинома р.
Тогда
|ос| £2max
°п-1
а
п
»
ап-2
а
п
1/2
Qn-3
а
п
1/3 |
,. . . ,
^0 1
Каждое из этих предложений дает также границу и для
минимального абсолютного значения корня полинома (в
предположении, что свободный член полинома ненулевой) - заменяем в
полиноме х на 1/ху другими словами, ищем наибольший корень
п п — 1
полинома апх +а*х + ... + а лх+а , обратный к кото-
0 1 п-1 л' v _.
рому будет наименьшим корнем полинома а хп + ап_^хп +...
... + а лх + аЛ.
1 0
Эти границы дают нам излагаемый ниже алгоритм изоляции.
Результат - это список интервалов (т.е. пар рациональных
чисел), каждый из которых содержит ровно один корень.
Работа - это список структур, содержащих два рациональных
числа, определяющих интервал с несколькими корнями, и значение
вариации последовательности Штурма в этих двух точках.
Компьютерная алгебра 145
Алгоритм изоляции вещественных корней
5 := {р0, .... pk} := Sturm(p)\
N := Вариации^,-со) - Вариации^, со);
если N = 0 то выход 0;
если N = \ то выход [-со, со];
М := Максимальная грань (р)\
Результат := 0;
Работа := {[-М,М,Ва/?иа*{«ыE,-оо), £ар«а^*шE,со)]};
цикл пока Работа * 0 выполнять;
[a,b,V ,V A := элемент списка(Работа);
Работа := />a6ora\{[aAVa,V6]};
с := |{а+6);
если р(£)=0 то Результат := Результат U {[с,с]};
Af := Минимальная_2paHb(subst(x=x-c,p)/x)\
V := Вариация (с+М);
УС+ := 1/ + 1;
с-
снесли У = К + 1 то
а с-
Результат := Результат U {[a,c-Af]};
если V > У + 1 то
а с-
Работа := Работа U {[а,с-М,Уа,Ус_]};
если К. = V - 1 то
6 с +
Результат := Результат U {[£+М,6]};
если У, < V - 1 то
6 с +
Работа := Работа U {[с+Л!,й,У ,У6]};
иначе К := Вариация E, с);
если У = К + 1 то
а с
выход Результат,
Результат := Результат U {[а, с]};
У > V + 1 то
а с
Работа := Работа U {[а, с, 7 ,V ]};
I/ = V - 1 то
о с
Результат := Результат U {[с, 6]};
К. < К - 1 то
b с
Работа := Работа U {[с, 6, К ,У6]};
Предполагаем, что Минимальная грань и Максимальная грань
выдают в качестве значений рациональные числа. В этом слу-
176—10
146 Полиномиальное упрощение
чае все используемые в данном алгоритме числа являются
рациональными, и вычисления могут быть выполнены без потери
точности.
Подчеркнем надежность этого алгоритма, поскольку корни
полинома, особенно его вещественные корни, являются очень
неустойчивыми функциями коэффициентов. Прекрасный пример
неустойчивости приведен Уилкинсоном [Wilkinson 1959],
который рассмотрел полином
W(x) = (х + \){х + 2) ... (х + 20) = х20 + 210л:19 + ... + 20!
Этот полином выглядит совсем обычно, корни его хорошо
отделены друг от друга. Все старшие коэффициенты элементов его
последовательности Штурма положительны, откуда мы выводим,
что У(со) = 0, У(-оо) = 20, так что у этого полинома 20
вещественных корней. Рассмотрим, как это предлагает Уилкин-
сон, очень малое возмущение этого полинома, т.е.
Щх) = Щх) + 2~2 V9 = х20 + B10 + 23)*19 + ... + 20!
(число 272 выбрано так, чтобы изменить последний из 32
битов в коэффициенте при х19). Кажется "очевидным", что W и
W настолько' близки, что у W также должно быть 20 веществен-
ных корней, но это совершенно неверно. В действительности W
имеет только десять вещественных корней, а мнимая часть
остальных корней достаточно велика - между 0.8 и 3. Старшие
коэффициенты последовательности Штурма полинома W, начиная
с восьмого полинома, становятся отрицательными, и У(оо) =
= 15, а У(-оо) = 5.
Эта устойчивость тем более важна в связи с тем, что
многие интересные вопросы в механике, САПР и робототехнике
часто связаны с наличием вещественных корней или со
значениями параметра, при которых появляются интересующие нас
корни. Похоже, что компьютерная алгебра - единственное
возможное средство для получения ответа на такие вопросы.
Однако мы должны сознавать, что подобные вычисления
могут быть достаточно дорогими. Например, мы уже видели, что
результанты и коэффициенты, появляющиеся в
последовательностях Штурма, могут быть большими. Из того, что корни
полинома могут быть расположены очень близко друг к другу,
Компьютерная алгебра 147
следует, что для разделения двух кррней может потребоваться
много делений отрезка пополам и что числители и
знаменатели, появляющиеся в рациональных числах, могут стать совсем
большими. Все это может значительно увеличить время работы
рассматриваемого алгоритма.
Теорема [Davenport 1985b]. Время работы этого алгоритма
ограничено величиной 0(п (log n + logSa .2K).
Эта граница наводит на пессимистические размышления, и
кажется, что среднее вр?мя ближе к 0(я4) [Heindel 1971].
Другие методы, которые могут оказаться более эффективными,
описаны в [Collins, Loos 1982].
3.2.1.2. Вещественные алгебраические числа
В предыдущей главе вопросы представления алгебраических
чисел рассматривались с чисто алгебраической точки зрения,
и разные корни одного и того же неприводимого полинома мы
не различали. Эта точка зрения годится для многих
приложений, например для интегрирования. Но сейчас мы получили
средство для работы с алгебраическими числами в более
вычислительном аспекте.
Определение. Представление вещественного алгебраического
числа состоит из: свободного от квадратов полинома р с
целыми коэффициентами и изолирующего интервала [а,Ь] одного
из его корней.
Мы не настаиваем на том, чтобы полином был
неприводимым, поскольку мы располагаем всей необходимой информацией
для ответа на такие вопросы, как: "Является ли это
алгебраическое число корнем другого данного нам полинома q>". В
действительности ответ на этот вопрос довольно прост: ''да"
тогда и только тогда, когда НОД этих двух полиномов имеет
корень на интервале [а, 6], что можно проверить, выяснив,
меняет ли НОД между а и Ь знак (НОД не может иметь кратных
корней).
Как уже было сказано, отправляясь от такого
представления, можно получить рациональное приближение (а значит, и
приближение в виде числа с плавающей точкой) произвольной
точности.
148 Полиномиальное упрощение
3.2.2. Общий случай (некоторые определения)
Прежде чем рассматривать общий случай, нам понадобятся
несколько определений, являющихся в некотором смысле
обобщением понятий корня и интервала.
Определение. Полу алгебраическая компонента пространства
Rn - это множество точек, удовлетворяющих семейству
полиномиальных уравнений и неравенств:
{(ху...,хп): p^xv...1xn) = ...=pk(xr...yxn) = 0'y
ii(xv->xn)>o> •••; <7Л(*Г....*Л)>0}.
Очевидно, что это естественное обобщение только что
рассмотренной нами ситуации в R . В действительности более
естественно рассматривать не только компоненты, но и
объекты, получающиеся исходя из этих компонент с помощью
теоретико-множественных операций.
Определение. Полу алгебраическое многообразие - это либо
полуалгебраическая компонента, либо одно из множеств AUB,
АПВ и А \ В, где А и В - два полуалгебраических многообразия.
Это определение характеризует подмножества
пространства IRn, которые можно описать в терминах полиномиальных
уравнений и неравенств, например подмножество
{{xfy,z)\ x2 + y2 + z2>0 или (**0 и y2-z±Q)}
может быть переписано как полуалгебраическое многообразие в
виде
A U ((В U С) П (D U £)),
где
C = {(x,y,z): *<0},
A = {(x,y,z): x2+y2+z2 > 0},
D = {(x,y,z): y2-z<0}1
B = {(x,y,z): x>0},
Е = {(х,у,г): y2-z = 0}.
Можно проверить, принадлежит ли точка (с рациональными
или алгебраическими коэффициентами в смысле, определенном в
предыдущем разделе) такому многообразию, проверяя,
принадлежит ли точка каждой компоненте, и применяя затем булевы
Компьютерная алгебра 149
правила, соответствующие построению многообразия. Можно
делать это более экономно: если многообразие имеет вид
AU В, то не нужно проверять компоненту Б, если точка
принадлежит А.
Однако если мы будем исходить из такого определения, то
весьма сложно понять структуру полуалгебраического
многообразия, даже если мы умеем определять, принадлежат ли
некоторые точки многообразию. Ниже приводятся несколько
естественных вопросов о многообразии:
A) Пусто ли оно?
B) Какова его размерность?
C) Является ли оно связным?
3.2.2.1. Разбиение пространства Rn
В этом разделе мы будем искать метод разбиения
пространства Rn, который позволит нам проанализировать структуру
полуалгебраического многообразия.
Определение. Разбиение пространства Rn - это
представление Rn в виде объединения конечного числа непересекающихся
связных полуалгебраических компонент.
Требование, чтобы компоненты были непересекающимися и
связными, делает разбиение более удобным для работы, чем
произвольное полуалгебраическое многообразие. Часто бывает
полезно знать по точке в каждой компоненте разбиения.
Определение. Разбиение называется отмененным, если с
каждой компонентой ассоциируется принадлежащая этой
компоненте точка с рациональными или алгебраическими
коэффициентами.
Точки, отмеченные в компонентах, образуют систему
представителей пространства К", по точке в каждой компоненте.
Прежде чем пользоваться такой системой, нужно знать, что
это действительно представители.
Определение. Разбиение пространства Rn называется
инвариантным относительно знаков семейства полиномов
г.(*,...,* ), если для каждой компоненты разбиения каждый
полином
150 Полиномиальное упрощение
• всегда положителен или
• всегда отрицателен или
• всегда нулевой.
Например, разбиение пространства IR1 в виде
(-оо,-2) U{-2} U(-2,l) U{1} U(l,со)
(которое более формально может быть записано в виде
{*: -х - 2 > 0} U {х: х + 2 = 0} U {х: х + 2 > 0 и 1 - х > 0} U
U{x: x-l = 0}U{x: jc-l > 0}
в соответствии с формальным определением разбиения)
инвариантно относительно знаков полинома (х + 2)(х-1).
Предложение. Пусть V - полуалгебраическое многообразие и
D - разбиение пространства IR? инвариантное относительно
знаков полиномов, встречающихся в определении V (будем
сокращать это выражение до "инвариантное относительно знаков
V"). Тогда для каждой компоненты С разбиения D либо
Cf)V = 0y либо CcV.
Фактически отмеченное разбиение, инвариантное
относительно знаков V, дает нам массу информации о многообразии
V. Отправляясь от такого разбиения, можно проверить,
является многообразие пустым или нет, проверяя принадлежность
каждой из отмеченных точек разбиения этому многообразию.
Если многообразие содержит некоторую точку пространства Rn,
то из предложения следует, что оно содержит целую его
компоненту, а поэтому и ее отмеченную точку.
3.2.3. Цилиндрические разбиения
Хотя понятие разбиения является полезным, оно
недостаточно конструктивно, чтобы дать нам возможность производить
вычисления с произвольными разбиениями. Фактически
предыдущий раздел не является частью компьютерной алгебры,
поскольку в нем используются не совсем алгоритмические
понятия. В данном разделе мы определим гораздо более
конструктивный тип разбиения и дадим набросок алгоритма его
вычисления. Предположим, что мы выбрали в IRn систему координат
хЛ,...,х .
Г п
Компьютерная алгебра 151
Определение. Разбиение D пространства Rn, т.е.
представление IR7l=£'1U...U£^, называется цилиндрическим, если я = 0
(тривиальный случай) или если
п — 1
(a) для IR существует цилиндрическое разбиение /)',
которое можно записать в виде IRn~ = F.U... UF ;
(b) для каждой компоненты Е. разбиения D существует
компонента F. разбиения D', такая, что Е. записывается в
одной из следующих форм
«*1 \У- <*1 Vl>€F/ И Хп^к(ХГ-'Хп-0}' ■ A)
{(*,,...,*„): (xv...,xn^)€F. и *„ = /,(*, *„_!»• <2>
^ {<*,,....*„): (*, Vl>€F/ и fk(xV>xn-r»<xn
н xn<fk,(xv...,xn_x)}, C)
«*i хпУ- <*| Vi)€f/ и x»>^i Vi»' <4>
где fk - решения полиномиальных уравнений с рациональными
коэффициентами, например "fk(xy *xn_\) ~ третий
вещественный корень полинома p(xy-ixn_yZ)* рассматриваемого
как полином от г".
Понятие, стоящее за этим определением, введенным Коллин-
п — 1
зом [Collins 1975], совсем простое: пространство R
делится на компоненты в соответствии с разбиением D', а над
каждой компонентой F. рассматривается цилиндр1 всех точек
(Ху...,х ), для которых (Ху-,хп__х) принадлежит F .
Требуется, чтобы этот цилиндр пересекался конечным числом N
поверхностей, однозначных относительно (х^ ...,*п1), т.е.
таких, что их можно записать в виде хп = f^xV'"tXn-\^'
Более того, накладывается условие, что эти поверхности не
касаются друг друга и a fortiori что они не пересекаются.
Таким образом, возможно упорядочить эти поверхности в
порядке возрастания координаты хп для некоторой точки
(Ху...,х J данной компоненты F., и этот порядок остается
одним и тем же для каждой точки чз F.. Значит, цилиндр
делится на N поверхностей типа B) той же размерности, что и
J Более точно, обобщенный цилиндр. Настоящий цилиндр
получается, если F. - диск.
152 Полиномиальное упрощение
F., ЛМ "пластов" между двумя поверхностями, задаваемых
уравнениями типа C), размерность которых на единицу больше
размерности F., и два полубесконечных "пласта", задаваемых
уравнениями типа A) и D), размерность которых также на
единицу больше размерности F..
Цилиндрическое разбиение пространства IR , инвариантное
относительно знаков семейства полиномов, вычислить весьма
просто - нужна только информация (в том, что касается их
изоляции) обо всех корнях полинома, и разбиение строится по
этим корням и интервалам между ними.
Теорема [Collins 1975]. Существует алгоритм, вычисляющий
цилиндрическое разбиение пространства Rny инвариантное
относительно знаков семейства Р полиномов с целыми
коэффициентами. Если семейство Р содержит пг полиномов, степени
которых меньше или равны df а коэффициенты ограничены величи-
ум
ной 2 (длина ограничена величиной Я), то время завершения
алгоритма ограничено величиной
Bdf m2 Я3. E)
Принцип, стоящий за этим алгоритмом, весьма прост: мы
уже видели, как решать эту задачу в случае /г = 1, а при
п > 1 реализуется следующий план.
[1] Вычислить семейство Q полиномов от переменных *-,...
..., х ,, таких, что разбиение пространства Rn~ , инвариантное
относительно их знаков, может служить базисом для разбиения
пространства IRn, инвариантного относительно знаков Р.
[2] По рекурсии вычислить разбиение D' пространства
IRn~ , инвариантное относительно знаков Q.
[3] Для каждой компоненты F разбиения D' вычислить
разбиение цилиндра, расположенного над Fy определенное
полиномами из Р.
Наиболее труден этап [1]: к его реализации мы вернемся
позже. Этап [2] - это рекурсия, а этап [3] не очень труден.
Если семейство Q выбрано хорошо, то каждый элемент из Р
(рассматриваемый как полином от х ) имеет постоянное число
вещественных корней над каждой компонентой разбиения D', а
поверхности, определяемые этими корнями, не пересекаются.
Компьютерная алгебра 153
Разбиение каждого цилиндра, индуцируемое этими полиномами,
является поэтому цилиндрическим, и мы нашли искомое
цилиндрическое разбиение.
Ясно, что все концептуальные сложности этого алгоритма
зависят от выбора Q. Этот выбор требует хорошего знания
анализа и вещественной геометрии, но изложить здесь
соответствующий материал в общем случае мы не можем.
3.2.3.1. Случай пространства R2
Ради простоты изложения мы ограничимся в настоящее время
случаем п = 2 и будем писать х и у вместо х и х Начиная
с семейства Я, мы должны определить семейство Q полиномов
от переменной *, таких, что разбиение пространства R1,
инвариантное относительно знаков Q, может служить нам
основанием для цилиндрического разбиения пространства R2. Можно
предполагать, что элементы семейства Р свободны от
квадратов и взаимно просты. Каким ограничениям должны
удовлетворять компоненты F. этого разбиения пространства R1?
A) Каждый полином семейства Р имеет постоянное число
вещественных корней над каждой компонентой.
. B) Над каждой компонентой поверхности (в действитель-
ности в R это просто кривые), задаваемые корнями элементов
из Р, не пересекаются.
Что касается первого ограничения, то существуют две
ситуации, в которых число вещественных (и конечных) корней
полинома р .(*, у) (рассматриваемого как полином от у) может
измениться: вещественный конечный корень полинома может
стать бесконечным или комплексным. Во второй ситуации нужно
заметить, что комплексные корни полинома с вещественными
коэффициентами всегда появляются попарно и поэтому один
вещественный корень исчезнуть не может. Для того чтобы
могли обратиться в нуль два корня полиномиального уравнения
Р •(*» У) - О» Для частного значения х переменной х должен
существовать кратный корень. Критические значения
переменной ху которые должны появляться в разбиении пространства
R1, - это значения х переменной *, при которых один из
полиномов семейства Р имеет кратный корень. Если р .(у)
имеет кратный корень, то полином НОД(р., dp Vdy) нетривиален
154 Полиномиальное упрощение
(см. параграф "Разложение на свободные от квадратов
множители" в дополнении). Другими словами, для этого значения xQ
переменной х имеем Res (p .(xQ, у)у dp .(xQ, y)/dy) - О (см.
параграф о результантах). Но данный результант - это
полином от х, обозначаемый Disc (p.). Критическими значениями,
таким образом, являются корни полиномов Disc (р.) для
каждого р. из Р. У нас остается еще следующая возможность: при
изменении значения х конечный корень перейдет в
бесконечный. Если записать уравнение р(*/) = О в виде а (х)уп +...
... + а Ах) = 0, где а. - полиномы от х и поэтому всегда
принимают конечные значения, станет очевидным, что для
получения корня полинома р(у), стремящегося к бесконечности,
а должен обращаться в нуль. Это также можно получить из
значений границ корней полиномов, приведенных в последнем
разделе.
Для второго ограничения также имеется две возможности.
Две пересекающиеся кривые могут быть корнями одного и того
же или двух различных элементов семейства Р. В первом
случае этот элемент семейства Р там, где два его корня
пересекаются, имеет кратный корень, а случай кратных корней уже
был рассмотрен в предыдущем абзаце. Во втором случае
соответствующие полиномы должны при значении xQ переменной *,
соответствующем пересечению двух кривых, иметь общий корень
- значение переменной у в точке пересечения. Другими
словами, если р. и р. - полиномы, то их НОД нетривиален и
Res (p .(xQty),p .(xQJy)) = 0. Из предположения, что элементы
семейства Р не имеют общих сомножителей, следует, что
полином Res (p.,p ) не является тождественным нулем, поэтому xQ
определяется как нуль полинома Res (p.,p.).
Для обозначения старшего коэффициента полинома р
используем запись 1с(р). Итак, мы доказали следующий результат.
Предложение. Если Р = {р t,..., рп) - семейство попарно
взаимно простых полиномов, свободных от квадратов, то
достаточно в качестве Q взять следующее семейство:
{кур.); l*i*n)U{Discy{Piy, imn}U{Resy(prp.)- \±i±n).
Читатель может заметить, что размер данных при такой
Компьютерная алгебра 155
редукции к R значительно возрастает. Если семейство Р
состоит из m полиномов, степень которых ограничена числом dy
го Q состоит из 0(пг ) полиномов, степень которых ограничена
величиной 0(d ). Кроме того, коэффициенты элементов из Q
могут быть достаточно большими - они ограничены величиной
[d+l) В , где В - граница для коэффициентов элементов
семейства Р.
3.2.3.2. Общий случай
Анализ, проведенный нами для случая п = 2, был
достаточно специфичен для этого случая. Основные принципы в общем
случае остаются теми же, но нужно рассматривать гораздо
больше возможностей. Читатель может обратиться к работам
[Collins 1975] или [Arnon et at. 1984], или к более свежим
результатам Мак-Каллума [McCallum 1985a,b]. Он доказал, что
обычно1 * достаточно взять результанты и дискриминанты, как
р
мы делали в случае R , а также все коэффициенты.
Теорема [McCallum 1985a, b]. При тех же предположениях,
что и в теореме Коллинза, разбиение можно вычислить за
время, ограниченное величиной
Bd)n2 m2 Я3. F)
Этот результат можно слегка улучшить [Davenport 1985b] и
получить
Bd)n2 m2 Я3. G)
Все эти величины ведут себя относительно п дважды
экспоненциально, и можно спросить, необходимо ли это в
действительности. В конце концов задача не выглядит слишком сложной. К
сожалению, это поведение внутренне присуще задаче
вычисления цилиндрического алгебраического разбиения, как
показывает следующий результат.
Теорема [Davenport, Heintz 1987]. Существуют примеры, в
которых пространство, необходимое для записи цилиндрическо-
' Если примитивная часть каждого полинома обращается в
нуль тождественно как полином от х только в конечном числе
точек пространства Rn~ .
156 Полиномиальное упрощение
го разбиения, а следовательно, и время вычислений, дважды
экспоненциальны по п.
Более точно, если п имеет вид Юг + 2, то существует
семейство из 12г линейных уравнений и двух уравнений степени
четыре, такое, что оно может быть записано в О(п) символах,
однако для цилиндрического разбиения пространства IRn,
инвариантного относительно знаков этого семейства, требуется
пространство объема
92г+1 9(м+3)/5
22 = 22 (8)
Уравнения Дэвенпорта и Хайнтца имеют весьма частный вид,
и результат справедлив только при одном выборе координат,
т.е. порядка исключения переменных. В других координатах
разбиение может оказаться гораздо проще. Но это доказывает,
что вычисления могут быть очень дорогими, и примеры в
следующем параграфе показывают, что эта высокая стоимость
может существенно влиять на приложения.
3.2.4. Приложения цилиндрического разбиения
Существует столько же приложений, сколько существует
полиномиальных систем с вещественными решениями: мы
упомянем здесь только два из этих приложений.
3.2.4.1. Элиминация кванторов
Напомним, что квантор - это один из двух символов: V
(для всех) и 3 (существует). Кванторы употребляются в виде
Ух р(х)> что означает "для всех х предложение р(х)
истинно". Все квантифицированные переменные в этом
параграфе квантифицированы над вещественными числами - более
формально, нас интересует теория вещественных чисел IR первого
порядка. Мы будем пользоваться привычными логическими
знаками л (и), v (включительное или) и п (логическое
отрицание). Эта теория содержит выражения следующего вида, где х.
- переменные, р. - полиномы, а А к В являются по рекурсии
выражениями этой "теории":
р.(х.,*.,...) = 0; р(*.,х.,...)>0;
Компьютерная алгебра 157
А л В\ Aw В; 1 А\
Зх.А; Ух. А.
i i
Например, выражение
Ух ах* + Ьх3 + сх2 + dx + е > О (9)
является выражением этой теории.
Определение. Задача элиминации кванторов - это задача
нахождения алгоритма, который для данного логического
выражения, содержащего кванторы, находит эквивалентное ему
выражение, не содержащее кванторов.
Например, можно найти выражение, эквивалентное выражению
(9), т.е. выражение от переменных а, 6, с, due, истинное
тогда и только тогда, когда полином положителен при всех х.
Тарский [Tarski 1951] доказал, что большинство задач
элементарной алгебры и евклидовой геометрии может быть
решено при помощи элиминации кванторов, и привел
соответствующий алгоритм. Но его алгоритм совершенно непригоден с
практической точки зрения.
Коллинз [Collins 1975] воспользовался для элиминации
кванторов цилиндрическим разбиением. Идея его совсем
проста, хотя детали требуют некоторой техники, главным образом
из-за того, что может оказаться несколько кванторов,
распространяющихся на переменные с одними и теми же именами.
Вместо полного алгоритма приведем лучше несколько примеров.
Рассмотрим, например, в выражении (9) переменные а,...,е
как координаты х ,...,* (порядок их не имеет значения);
квантифицированная переменная х должна стать х (здесь
порядок существен). Выполним цилиндрическое разбиение D
пространства R6, инвариантное относительно знака полинома (9).
Для каждой компоненты F. цилиндрического разбиения прост-
ранства R , на котором базируется Д существует конечное
число компонент Е. . разбиения Д с отмеченной точкой z. .
в каждой компоненте. Если полином (9) положителен в
отмеченной точке 2. ., то он положителен на всей компоненте
Е. .. Если полином положителен во всех отмеченных точках
t> J
над F., то он положителен для всего цилиндра над F.. Отсюда
158 Полиномиальное упрощение
следует, что полуалгебраическое многообразие пространства
R , в точности состоящее из решений соотношения (9), - это
U{F.:V/a. .*4 .+ 6. .х3 . + с. .х2 . + d. х. . + <?. .> 0},
где мы записали отмеченные точки г . как (а. ., 6. ,
с. ., rf. ., е. ., jc. .), Это решение было получено Арноном
[Arnon 1985]. Однако ниоткуда не следует, что это решение
является простейшим или что эта процедура - лучший метод
отыскания решения. С карандашом и бумагой эта задача была
решена Миньоттом [Mignotte 1986] для полинома х4 + рх2 +
+ qx+ r и Лазаром [Lazard 1987] в общем случае (за
исключением того, что он использовал для разложения нужных
результантов систему MACSYMA). Оба нашли более простые
решения, чем полученное алгоритмически.
Другая задача этого рода - проблема эллипса: каковы
условия на а, Ь, с и d, чтобы эллипс
{
полностью содержался в круге х2 + у2 ^ 1. Здесь также
имеется два квантора, поскольку задачу можно переписать в виде
ОТ Ь*
К настоящему времени эта задача полностью автоматическим
способом еще не решена, хотя Арнон и Смит [Arnon, Smith
1983] решили ее в частном случае d = 0. Миньотт [Mignotte
1986] также решил этот случай с карандашом и бумагой, а
Лазар [Lazard 1987] решил ее в общем случае, используя
систему MACSYMA для разложения полинома Т степени 12 с 105
членами, который фигурирует в решении. Данное им решение
имеет вид
Т*0л(с2 + (Ь+ \d\f±l)A(d2 + (a+ |c|J^l)
л (((б2 * а)л(а2 * b)) v
((а > b)A(a2d2 £ A - а2)(а2 - b2)))v
((b > a)A(b2c2 * A - b2)(b2 - а2))));
Компьютерная алгебра 159
оно, как можно убедиться, не слишком простое, особенно если
учесть размер Т.
Из этих двух примеров можно сделать вывод, что это
средство носит очень общий характер, но кажется слишком
дорогим, по крайней мере в имеющихся реализациях.
3.2.4.2. Робототехника
Одна из проблем робототехники - это задача планирования
движения робота, т.е. определения того, как робот может
передвигаться с одного места на другое, не касаясь стен, не
нанося повреждений себе и другим роботам. Имеется, конечно,
много других проблем, но мы будем рассматривать только эту.
Ради простоты мы ограничимся случаем одного робота, даже
этот случай достаточно сложен; случай нескольких роботов
изучается в работе [Schwartz, Sharir 1983b].
Предполагается, что все препятствия фиксированы и определены
полиномиальными уравнениями и что сам робот также задан
полиномиальными уравнениями.
Выбрав определенное число точек на роботе, можно точно
фиксировать положение каждой его части. Например, если
робот жесткий, достаточно выбрать три точки, которые неколли-
неарны. Если нам нужно k точек, то положение робота опреде-
О U
ляется точкой в пространстве IR Но на эти точки имеются
ограничения - например, две точки одной и той же жесткой
части робота всегда находятся на одном и том же расстоянии
о и
одна от другой. Таким образом, наши точки в R должны
удовлетворять системе полиномиальных уравнений (и, возможно,
неравенств).
Препятствия определяют несколько полиномиальных
неравенств, которые должны удовлетворяться, чтобы положение
робота было "законным", например чтобы он не пересекал
стену. Физические законы могут налагать дополнительные
неравенства, например робот должен находиться под действием сил
тяжести в состоянии равновесия. Все эти уравнения и нера-
о у
венства дают нам полуалгебраическое многообразие в IR . В
принципе задача планирования движения достаточно проста:
связаны ли в многообразии исходное положение и требуемое
положение? Другими словами, существует ли в многообразии
160 Полиномиальное упрощение
путь, соединяющий исходное положение с требуемым? Если путь
существует, то он дает нам требуемое движение; если нет, то
задача не имеет решения.
Эта идея рассматривалась Шварцом и Шариром в работе
[Schwartz, Sharir 1983a], где объяснялось, как найти этот
путь. При данном цилиндрическом разбиении проблема делится
на две задачи.
• Геометрический аспект:* какие компоненты граничат друг
с другом (нам нужно рассматривать только компоненты в
многообразии допустимых положений)?
• Комбинаторный аспект: имеется граф отношения
соседства между компонентами; найти путь в этом графе,
соединяющий компоненту исходного положения и компоненту требуемого
положения.
Детали читатель может посмотреть в упомянутых работах.
К сожалению, данный алгоритм выглядит мало пригодным на
практике. Одна из простейших задач планирования движения
состоит в следующем:
В R2 дан "коридор" ширины единица, изгибающийся под
прямым углом, например, (лс>0л0^г/^1)и(#>0л0^х^1). Можно
ли пройти его со стержнем длины 3 (и бесконечно малой
ширины).
Ответ - "нет", поскольку наибольший стержень, который
можно пронести, имеет длину 2V2". Дэвенпорт [Davenport 1986]
пытался решить эту задачу методом Шварца и Шарира.
Полуалгебраическое многообразие расположено в IR (так как нам
нужны в качестве опорных точек две крайние точки стержня) и
определено уравнением, требующим, чтобы эти две точки
всегда находились на расстоянии 3 одна от другой, и восемью
неравенствами, по два для каждой стены коридора. Чтобы
найти цилиндрическое разбиение пространства IR , нам нужно оп-
ределить разбиение для IR , затем разбиение для IR и,
наконец, для IR . Для IR получаем 184 (неприводимых) полинома,
общей степени 801 и максимальной степени 18. Эта редукция
занимает десять минут времени CPU в системе REDUCE на
компьютере DEC 20-60. У этих полиномов 375 вещественных
корней, которые можно изолировать (имеется в виду изолировать
Компьютерная алгебра 161
корни каждого полинома) за пять минут. Однако нам нужно
изолировать все корни всех полиномов, и Дэвенпорту не
удалось проделать такие вычисления из-за роста числителей и
знаменателей получающихся при вычислениях рациональных
чисел.
176—11
Глава 4
СОВРЕМЕННЫЕ АЛГОРИТМЫ
Компьютерная алгебра в общем случае имеет дело с весьма
привычными математическими объектами, и выполняемые над
ними преобразования в принципе достаточно просты. Но, как
мы уже видели, даже для вычисления НОД двух полиномов с
целыми коэффициентами наивные методы чрезвычайно дороги.
Поэтому мы предлагали методы, например последовательность
субрезультантов полиномов, которые выглядят гораздо более
эффективными. Мы утверждали следующее:
Приведенный алгоритм является лучшим из известных
методов вычисления НОД среди методов, основанных на применении
к полиномам с целыми коэффициентами алгоритма Евклида. В
главе "Современные алгоритмы" мы увидим, что если
отказаться от этого условия, то можно получить лучшие алгоритмы для
вычисления НОД.
4.1. МОДУЛЯРНЫЕ МЕТОДЫ
В этом параграфе мы опишем первое (с исторической точки
зрения) семейство неочевидных алгоритмов, и начнем с его
наибольшего успеха - вычисления НОД.
4.1.1. НОД при одной переменной
В этом разделе мы рассматриваем следующую ситуацию: А и
В - два полинома, принадлежащие кольцу 1[х], и их НОД мы
хотим вычислить. Требование, чтобы коэффициенты были
целыми, не представляет проблемы, поскольку мы всегда можем
домножить полиномы на некоторое целое число так, чтобы не-
Компьютерная алгебра 163
ключить знаменатели. Небольшая вариация классического
примера Кнута [Knuth 1969] (см. также [Brown 1971]), когда
вычисление НОД наивными методами становится очень дорогим,
- это
А(х) = х8 + хе - З*4 - З*3 + х2 + 2х - 5;
В(х) = Зх6 + 5х* - 4х2 - 9л: + 21
(см. вычисления в разделе ''НОД" гл. 2). Предположим, что
эти два полинома имеют общий делитель, т.е. полином Р
(ненулевой степени), который делит и А и В. Тогда
существует полином Q, такой, что А - PQ. Это равенство остается
справедливым, если мы представим каждый коэффициент как
целое число по модулю 5. Если мы будем писать Pg, чтобы
обозначить полином Я, рассматриваемый как полином с
коэффициентами по модулю 5, то из этого равенства следует, что Р
делит А-. Аналогично Р„ делит Б , а потому он является об-
щим делителем полиномов А и В . Но вычисление НОД
полиномов А и В довольно простое:
А5(х) = х8 + Xs + 2х4 + 2х3 + х2+ 2х\
ВБ(х) = Зх6 + х2 + х+1;
С5(х) = остаток(Л5(х),£5(х)) = АБ(х) + 3(х2 + 1)В5(х) = 2х2 + 3;
D5(x) = остаток(Б5(л:),С5(л:)) = ВБ(х) + (х4 + х2 + 3)С5(х) = х\
Е5(х) = остаток(С5(*),/>5(*)) = С5(х) + 3xD5(x) = 3.
Таким образом, полиномы Л и Б взаимно просты, откуда
следует, что /*5 = 1- Поскольку старший коэффициент полинома Р
должен быть равен 1, мы получаем, что Я=,1.
Эти вычисления наводят на мысль о модулярных методах, в
которых нет возможности разбухания промежуточных выражений,
поскольку целые числа по модулю 5 ограничены (четырьмя).
Заметим, что мы не можем заключить из этого, что
Р5=НОД(Л-,В-): контрпримером является А- х- 3, В = х + 2,
где Р = 1, но Л5 = В5 = х + 2, и, таким образом, НОД(Л5,В5) =
= х + 2, в то время, как Р- = 1.
164 Современные алгоритмы
Очевидно, что нет необходимости пользоваться целыми числами
по модулю именно 5: достаточно взять любое простое число
(мы выбрали 5, потому что эти вычисления не проходят по
модулям 2 и 3 из-за причин, которые мы рассмотрим позже). В
этом примере результат состоял в том, что полиномы взаимно
просты. Отсюда возникают несколько вопросов об обобщении
этих вычислений до алгоритма, способного вычислять НОД
любой пары полиномов:
A) как вычислять нетривиальный НОД?
B) что делать, если модулярный НОД не является
модулярным образом НОД (как в примере, приведенном в подстрочном
примечании на предыдущей странице)?
C) какова стоимость этого метода?
Прежде чем ответить на эти вопросы, нам нужно найти
границу для коэффициентов НОД двух полиномов.
Теорема (неравенство Ландау - Миньотта). Пусть Q = E^=0& .xl
- делитель полинома Р = Е^=0а •*' (г^е о,. и b. - целые
числа). Тогда
Jim **\V\ JjL A
См. статью Ландау [Landau 1905] и работы Миньотта [Mig-
notte 1974], [Mignotte 1982].
Следствие 1. Каждый коэффициент НОД полиномов А =
= ^=Qa.xl и B-^y.^J) .х1 (с целыми коэффициентами а. и b.)
ограничен величиной
2т1п(а'р)НОД(аа,6р)гшп
1
а1
а
Е
1 = 0
1
a*'WhL-o
ь2
I
Доказательство. НОД является делителем для Л и В,
степень которого не более минимума степеней этих двух
полиномов. Более того, старший коэффициент НОД должен делить оба
старших коэффициента полиномов Л и В,, а потому и их НОД.
Небольшая модификация этого следствия дает такой
результат.
Компьютерная алгебра 165
Следствие 2. Каждый коэффициент НОД полиномов А =
= Li*LQaixl и B-!l- = {fi х1 (с Челыми коэффициентами а. и Ь.)
ограничен величиной
I
2и1п<а'0>ноД(ао\Ао)тш
1 \У а2 1
*2
л! г=0
Доказательство. Если С = Jj\_nc .х.1 - делитель полинома Л,
то С = 5л пс~ -*1 - делитель полинома A = Yr. na„ .х\ и
наоборот. Поэтому последнее следствие можно применить к
полиномам Л и В, откуда получается требуемая граница.
Может показаться странным, что коэффициенты НОД двух
полиномов могут быть больше, чем коэффициенты самих
полиномов. Следующий пример (принадлежащий Дэвенпорту и Трейгеру)
демонстрирует это:
А = х3 + х2 - х - 1 = (х + 1J(х - 1),
. В = х* + х3 - х - 1 = (х + \J{х2 - х + 1),
НОД(Л,Я) = х2 + 2х + 1 = (х + IJ.
Этот пример легко можно обобщить, скажем:
А = *5+ Зх4+ 2*3- 2х2- Зх - 1 = (х + 1L(х " 1)»
Б = х6+ 3*5+ 3*4+ 2*3+ З*2- jc - 1 = (х + \)\х2 - х + 1),
НОД(Л,В) = *4+ 4*3+ 6jc2+ 4*+ 1 = (х+ IL.
4.1.1.1. Соответствие модулярное - целое
В этом разделе мы ответим на вопрос, поставленный выше:
что делать, если модулярный НОД не является модулярным
образом НОД, вычисленного над кольцом целых чисел?
Лемма 1. Если р не делит старший коэффициент НОД(А, В),
то степень НОД(А , В ) больше или равна степени НОД(А, В).
Доказательство. Поскольку НОД(Л, В) делит Л, то
(НОД(Л, В)) делит А . Аналогично он делит В , а поэтому
делит и НОД(Л , о ). Отсюда вытекает, что степень
р Р
НОД(Л , В ) больше или равна степени НОД(Л, В) . Но степень
НОД(Л, В) равна степени НОД(Л, В), поскольку старший
коэффициент В) не обращается в нуль при редукции по
модулю р.
166 Современные алгоритмы
Эту лемму не так-то просто использовать саму по себе,
поскольку в ней предполагается, что нам известен НОД (или
по крайней мере его старший коэффициент) до того, как мы
сможем проверить, имеет ли модулярная редукция ту же самую
степень. Но этот старший коэффициент должен делить старшие
коэффициенты полиномов Л и В. Отсюда вытекает формулировка,
которой уже легко пользоваться.
Следствие. Если р не делит старшие коэффициенты
полиномов А и В (в частности, может делить один из них, но не оба
одновременно), то степень НОД(А , В ) больше или равна
степени НОД(А, В).
Поскольку НОД является единственным (с точностью до
целого кратного) полиномом этой степени, который делит и Л, и
В, то мы можем проверить корректность наших вычислений НОД:
если результат имеет ту же степень, что и НОД(Л , В ) (где
р удовлетворяет предположению следствия), и если он делит Л
и В, то он совпадает с НОД (с точностью до целого
множителя).
Вполне возможно, что мы можем найти НОД(Л , В ) слишком
высокой степени. Например, в уже упоминавшемся случае
А(х) = х8 + х6 - Зх4 - Зх3 + х2 + 2х - 5,
В(х) = З*6 + 5jc4 - 4х2 - 9л: + 21,
НОД(Л , В ) = jc+ 1 (очевидно, что х+1 делит оба полинома
по модулю 2, потому что сумма коэффициентов в каждом
полиноме четна). Следующая лемма показывает, что такая
возможность может возникать только для конечного числа значений
модуля р.
Лемма 2. Пусть С = НОД(А, В). Если р удовлетворяет
условию следствия и если р не делит Res (А/С, В/С), то
НОД(А , В ) = С .
v р р' р
Доказательство. Полиномы А/С и В/С взаимно просты, так
как в противном случае С не был бы НОД для полиномов Л и В.
По следствию С не обращается в нуль. Поэтому
НОД(Л , В ) = С НОД(Л /С , В /С ).
^ р' р> р ^ р р' р Р/
Компьютерная алгебра 167
Чтобы утверждение леммы не выполнялось, последний НОД
должен быть нетривиальным. Отсюда по предложению 1 параграфа
"Результант" в дополнении "Основные сведения из алгебры",
следует, что результант Res (А /С , В /С ) обращается в
нуль. Этот результант является определителем матрицы
Сильвестра, и \М \=(\М\) , поскольку определитель - это
просто сумма произведений коэффициентов. В таком случае это
равносильно утверждению о том, что обращается в нуль
Re&x(A/C, В/С) , т.е., что р делит Resx(A/C, В/С). Но
предположение леммы исключает такую возможность.
Определение. Если НОД(Л , В ) = НОД(Л, В) , то мы
говорим, что редукция задачи хорошая или что р - число с
хорошей редукцией. В противном случае мы говорим, что р - число
с плохой редукцией.
Из этой леммы, в частности, следует, что существует
только конечное число значений р, таких, что степень
НОД(Л , В ) отличается от степени НОД(Л, В), - это те р,
которые делят НОД старших коэффициентов, и те р, которые
делят результант, упоминающийся в лемме (этот результант
ненулевой и потому имеет только конечное число делителей).
В частности, если полиномы А и В взаимно просты, то мы
всегда можем найти такое р, что полиномы А и В взаимно
Р р
просты.
4.1.1.2. Вычисление НОД
В этом разделе мы ответим на поставленный ранее вопрос:
как вычислять нетривиальный НОД? Очевидный метод состоит в
том, чтобы воспользоваться неравенством Ландау - Миньотта,
которое позволяет определить сакое число М, что все
коэффициенты НОД ограничены М, и производить вычисления по модулю
простого числа, большего, чем 2М. Этот метод приводит к
следующему алгоритму:
М := граница Ландау Миньотта (Л, Б);
цикл до бесконечности
р := найти большое простое BМ)\
если степень остатка(р. А) или степень_остатка(р,В)
168 Современные алгоритмы
то С : = модулярный_НОД(А, В,р);
если делит(С,А) и делит(С,В)
то выход С;
(где алгоритм граница Ландау Миньотта применяет следствия
их неравенства, алгоритм найти большое простое возвращает
простое число, большее, чем его аргумент (каждый раз новое
число), алгоритм степень остатка проверяет, что редукция по
модулю р не меняет степень, т.е. р не делит старший
коэффициент, алгоритм модулярный _НО Л применяет алгоритм Евклида
по модулю р, а алгоритм делит проверяет, что полиномы
делятся над кольцом целых чисел). В действительности не
обязательно проверять, что р не делит старшие коэффициенты, -
из границы Ландау - Миньотта (следствие 1) вытекает, что р
больше хотя бы одного из старших коэффициентов полиномов А
и В.
Недостаток этого метода состоит в том, что он требует
многочисленных вычислений по модулю числа р, которое может
быть довольно большим. Поэтому мы предлагаем метод,
использующий несколько маленьких простых чисел и китайскую
теорему об остатках (см. дополнение "Основные сведения из
алгебры"). Если мы вычислим С и С , где С - требуемый НОД, а р
и q - два простых числа, то эта теорема позволяет нам
вычислить С Следует отметить, что эта теорема применяется
в своей целочисленной форме отдельно к каждому коэффициенту
полинома С. Вопрос об использовании ее полиномиального
варианта не стоит, хотя нам нужно вычислить полином. Этот
метод транслируется в следующий алгоритм:
М := граница Ландау Миньотта (Л, В);
Кроме := НОДAс(Л),1с(Б));
ЕО: р := найти_простое(Кроме)\
С :- модулярный НОД{А,В,р)\
НОД определен с точностью до умножения на обратимый в
кольце коэффициент. В описываемом алгоритме при вычислении
модулярного НОД должны выполняться те же действия, что и
при вычислении НОД в кольце целых чисел: в частности, при
переходе к остатку от деления нельзя умножать его на
константу, отличную от ±1. - Прим. перев.
Компьютерная алгебра 169
El: если степень(С) = О то выход 1;
Дано := р\
Результат := С;
цикл пока Дано ^ 2М
/? := наитипростое (Кроме);
С := модулярный НОД(А,В,р);
если степень(С) < степе нь(Результат) то идти на £7;
если степень(С) = степень(Результат)
то Результат := СКГ(Результат^Дано^Сур)\
Дано := Дано х р;
если делит(РезультатуА) и делит(Результат,В)
то выход Результат;
идти на £0;
(где с" обозначает старший коэффициент полинома, подалго-
ритмы предыдущего алгоритма имеют здесь тот же самый смысл,
алгоритм наитипростое выдает простое число, не делящее его
аргумент (каждый раз новое число), и алгоритм CRT применяет
китайскую теорему об остатках к каждому коэффициенту двух
полиномов - Результат (по модулю Дано) и С (по модулю р),
представляя целые числа по модулю М между -М/2 и М/2). Два
2)
оператора идти на в этом алгоритме соответствуют двум
путям определения того, что все выбранные простые числа
давали плохую редукцию:
• или мы нашли простое число р (удовлетворяющее
следствию леммы 1), такое, что степень НОД по модулю р меньше,
чем уже вычисленные степени (поэтому они пришли из плохой
редукции);
• или же мы вышли на конец вычислений с результатом,
который кажется хорошим, но который не делит Л и В, поскольку
все редукции были плохими (неправдоподобная возможность).
При вычислении модулярного НОД следует помнить о
замечании, сделанном выше. Кроме того, нужно следить, чтобы
вычисления по разным модулям были согласованы, в частности
совпадали степени полиномов в последовательностях
полиномиальных остатков по разным модулям. - Прим. перев.
Которые могут быть по нашему желанию заменены циклами
или другими средствами структурного программирования.
170 Современные алгоритмы
Если первая редукция была хорошей, то ни один оператор
идти на не выполняется.
В этот алгоритм можно внести некоторые улучшения. Не
обязательно, чтобы числа р были непременно простыми.
Достаточно, чтобы бесконечное множество чисел р обладало
бесконечным числом простых множителей, так как мы знаем, что
существует только конечное число значений с плохой редукцией.
Если число р не простое, то может случиться, что алгоритм
модулярный НОД найдет ненулевое число, которое не может
быть обращено по модулю р, например 2 (mod 6). Это приводит
к разложению модуля на множители, поэтому мы можем работать
по модулю двух множителей раздельно. Строка
Дано := Дано х р\
должна быть, разумеется, заменена строкой
Дано := НОК(Даноур);
а реализация китайской теоремы об остатках должна позволять
работу с модулями, которые не являются взаимно простыми.
Совершенно не обязательно дожидаться выполнения условия
Дано > 2М. Границы Ландау - Миньотта часто слишком
пессимистичны, хотя Миньотт [Mignotte 1981] доказал, что в общем
случае они не могут быть улучшены. Можно на каждом шаге
проверять, не нашли ли мы общий делитель, так как нам
известно, что таким методом мы никогда не получим полинома
слишком маленькой степени. Но эти проверки могут быть очень
дорогими, и часто используемый компромисс состоит в том,
чтобы производить проверки после тех шагов, на которых
значение не меняется, т.е. заменить строку
то Результат := СКГ(РезультатуДаноуСур)\
строками
то Предыдущий := Результат,
Результат := СКГ(Результат,ДаноуСур)'1
если Предыдущий = Результат и
делит(РезультатуА) и делит(РезультатуВ)
то выход Результат;
Компьютерная алгебра 171
а
Ь=о
at
4.1.1.3. Стоимость алгоритма
Проанализируем основной алгоритм в том виде, как мы
записали его, без улучшений, намеченных в конце предыдущего-
раздела. Добавим следующие предположения:
A) Все простые числа уже вычислены (это предположение
не слишком реалистичное, но мы набросали метод, позволяющий
пользоваться не обязательно простыми числами, а на практике
поиск простых чисел не слишком сложен).
B) Каждое простое число достаточно мало, чтобы все
вычисления по модулю р выполнялись за время 0A), т.е. с
числами по модулю р можно непосредственно работать на
компьютере, поскольку для их хранения достаточно одного слова.
C) Степени полиномов А и В не больше, чем /г, и их
коэффициенты удовлетворяют условию
Е ь2.* я
(которой выполняется, если все коэффициенты меньше, чем
H/Vn+1, и из которого следует, что все коэффициенты меньше,
чем Я).
По неравенству Ландау - Миньотта коэффициенты НОД
ограничены числом 2пН. Если Я - количество нужных нам чисел р
с хорошей редукцией, то произведение всех этих чисел должно
быть больше, чем 2п+ Я, а из этого получается, что N <
<(n + \)\og Я (где использован тот факт, что любое
простое число не меньше 2; более тщательный анализ заведет нас
в аналитическую теорию чисел, не улучшив порядка
получаемого времени счета). Кроме того, имеются числа р с плохой
редукцией - предположим, что их N . Они должны делить
результант полиномов А/С и В/С. Эти два полинома являются
делителями полиномов А и В, поэтому их коэффициенты (в
действительности сумма абсолютных значений коэффициентов)
ограничены величиной 2ПЯ. Отсюда следует, что N2 < п(п + log2 Я).
Можно получить лучшую границу, N < п log Я, если
заметить, что "плохая редукция" эквивалентна тому, что один из
миноров матрицы Сильвестра делится на р, хотя он ненулевой
(см. [Loos 1982]).
172 Современные алгоритмы
Большой цикл пока поэтому выполняется самое большее N +
+ N раз - вероятно, меньше, поскольку мы предполагаем, что
все делители результанта маленькие и различные и что до
того, как мы найдем достаточное количество чисел р с хорошей
редукцией, нам встретятся все эти множители. Дорогие
операции в этом цикле - модулярный НОД и применение китайской
теоремы об остатках. Для модулярного НОД нам вначале нужно
редуцировать коэффициенты полиномов Л и В по модулю р - это
0(п log Н) операций - а затем вычислить НОД - это 0(п2)
операций. Китайская теорема об остатках применяется ко всем
коэффициентам предполагаемого НОД. Через С мы обозначаем
НОД по модулю р, а через D - НОД по модулю М, т.е.
произведению всех уже вычисленных р (в алгоритме обозначено Дано).
Для доказательства теоремы мы вычисляем целые числа / и g,
такие, что fM + gp= 1, и доказываем, что е = с + (d - c)fM
- значение по модулю Мр, которое редуцируется к с по модулю
М и к d по модулю р. Вычисление f ^ g требует 0(\og2M)
операций (так как р по предположению B) считается
маленьким). Значение / ограничено р, а Ь - а может быть вычислено
по модулю р (поскольку результат вычисляется по модулю Мр).
Умножение (Ь - a)fM - это умножение большого числа М на
малое число и требует 0(\og M) операций. Поскольку нам нужно
вычислить самое большее п +1 коэффициентов, общая
стоимость цикла составляет 0(п(п + log2#) + n log2M) операций.
Так как М < 2 #, это можно записать в более простом виде
0№+log2ff)).
Таким образом, мы получили общую стоимость операций в
цикле 0(п(п + log ЯJ). Последний шаг алгоритма - проверка
результата путем деления Л и Б на этот результат; таким
образом мы проверяем, что нашли общий делитель полиномов А
и В. Наиболее дорогой случай - это деление полинома степени
Хотя в этих вычислениях мы не использовали g,
расширенный алгоритм Евклида вычисляет его автоматически. Он
вычисляется всего один раз, . а не для каждого коэффициента.
Это не меняет асимптотической сложности, но весьма важно на
практике, поскольку константа, скрываемая за обозначением
О, для расширенного алгоритма Евклида значительно больше,
чем для умножения.
Компьютерная алгебра 173
п на полином степени дг/2, которое при наивном методе требу-
ет п /4 операций. Поскольку эти операции выполнялись над
числами, размер которых (т.е. количество двоичных цифр)
ограничен величиной п log Я, получаем, что общая стои-
4 2
мость этих делений составляет 0(п \og2H) операций. Это
довольно грустно, поскольку отсюда вытекает, что проверка
значительно дороже самого вычисления. Можно воспользоваться
"эффективными" методами (основанными на быстром
преобразовании Фурье), которые дадут нам
0(n3\og2H \og2n \og2(n \og2H)\og2\og2(n \og2H))
операций, но здесь скрыта довольно большая константа, и
стоимость остается выше, чем стоимость цикла. Браун [Brown
1971] поэтому предложил продолжать цикл до тех пор, пока мы
не будем уверены, что исчерпали все числа р с плохой
редукцией, т.е. добавить к условию в цикле пока фразу
или Лр < Граница результанта
где произведение распространяется на все уже данные
командой найтипростое числа р, а переменной Граница результанта
присваивается значение границы для результанта полиномов А
и Б, а она ограничивает также все миноры, так как обращение
в нуль одного из них было условием плохой редукции. С этими
дополнениями мы знаем, что выбрали р с хорошей редукцией и
что окончательный результат корректен. Это дополнение имеет
теоретическое значение, ограничивая время вычисления
величиной 0(п log Я), но пользователи предпочитают алгоритм в
том виде, как мы его сформулировали.
На практике можно предполагать, что алгоритм находит
немного значений р плохой редукций. Если, кроме того, мы
предположим, что коэффициенты НОД меньше, чем Я, и если мы
Если в частном мы обнаружим число, большее этой
границы, то деление не точное, поэтому можно немедленно
закончить операцию делит. Это замечание очень важно с
практической точки зрения, поскольку деление такого рода, которое
дает остаток, может порождать громадные коэффициенты, -
например, деление х100 на х-10 дает в остатке 10 .
Обсуждение стоимости операции делит см. в работе [Abbott et al.
1985].
174 Современные алгоритмы
добавим тест завершения (такой, как описан в предыдущем
абзаце), мы получим стоимость 0(п log H(n + log #)). В любом
случае данный алгоритм асимптотически более эффективен, чем
субрезультантный алгоритм @(п log H) в соответствии с
[Loos 1982]). Эта эффективность подтверждается и на
практике.
4.1.2. НОД при нескольких переменных
В предыдущем разделе продемонстрировано использование
модулярных вычислений, чтобы избежать разбухания
промежуточных выражений. При вычислениях по модулю р нам
гарантировано, что целые числа не превосходят р -1 (или р/2, если
мы пользуемся симметричным представлением). Этот метод дает
нам алгоритм вычисления НОД при одной переменной,
являющийся более эффективным, чем алгоритм последовательности
субрезультантов. Можно ли обобщить его на полиномы от
нескольких переменных? Прежде чем ответить на этот вопрос, нам
нужно обсудить некоторые детали.
Самый очевидный алгоритм вычисления НОД полиномов от
нескольких переменных х„ ..., х - это перенос алгоритма
Евклида на кольцо 0(х-,..., *,)[*]. Но у него есть один
большой теоретический недостаток (и несколько
практических): он вычисляет зависимость НОД только от х . Например,
будучи примененным к полиномам
Mxvx2) = (x^ -1)х2 + (хг -1),
B(xvx2) = (x1-l)x2 + (-x1-\)J
он даст ответ, что они взаимно просты, хотя они содержат
общий множитель х-г - 1.
Определение. Пусть R - область целостности и р € R[x] -
полином с коэффициентами aQ, ..., afe, т.е. Р = Е-впа/* •
Содержание р, обозначаемое cont(p), - это НОД всех его
коэффициентов. Если содержание полинома равно единице, то
полином называется примитивным. Примитивная часть полинома р,
обозначаемая рр(р), определяется так: рр(р) = /?/cont(p).
Легко показать, что примитивная часть полинома -
примитивный полином. Следующий результат хорошо известен в мате-
Компьютерная алгебра 175
матической литературе и демонстрирует важное значение этого
понятия. В разделе о разложении полиномов на множители мы
представим эту лемму в несколько иной форме.
Лемма Гаусса. Пусть р и q - два полинома из кольца /?[*].
Тогда cont(p^) = cont(p)cont(^) (а значит, и pp(pq) = pp(p)pp(q))-
Следствие. Пусть р и q - два полинома из кольца /?[*]•
Тогда
cont НОД(р,</) = НОД(соп1(р), cont(?)),
рр НОД(р, q) = НОД(рр(р), pp(q)).
Таким образом, если даны два полинома от нескольких
переменных, то можно назвать одну переменную "главной
переменной" (обозначим ее х) и вычислять НОД путем умножения
НОД примитивных частей (найденных с помощью алгоритма
Евклида, позаботившись о том, чтобы результат был
примитивным) на НОД содержаний. Этот второй НОД, так же, как и
НОД'ы, требующиеся для вычисления содержания, не содержит
переменную х и потому может быть вычислен рекурсивно.
В этом разделе предполагается следующая ситуация. А и В
- два полинома, принадлежащие кольцу Щ_Ху...9х ], НОД
которых мы хотим вычислить. Ограничиваясь полиномами с целыми
коэффициентами, мы не налагаем каких-либо ограничений,
поскольку полиномы всегда можно домножить на целое число,
чтобы исключить целый знаменатель, и на полином от
нескольких jc., чтобы исключить полиномиальный знаменатель. Поэтому
программу предыдущего раздела можно выразить в виде двух
рекурсивных алгоритмов:
алг НОД{А,В,г)\
Ас := содержание(А,г)\
Ар := А/Ас;
Вс := содержание(В,г);
Вр := В/Вс\
выход содержание(Евклид(Ар,Вр,г),х ) х НОД(Ас,Вс,г-1)\
алг содержание(А,г)\
Результат := коэфф(А,х ,0);
176 Современные алгоритмы
цикл пока Результат * 1 и / < степень(А,х )
Результат := Н0Д(Результат,коэфф(А,х ,0),г-1);
/ := / + 1;
выход Результат;
где операторы степень и коэфф извлекают указанные
компоненты из своего первого параметра, рассматриваемого как
полином от второго параметра, а алгоритм Евклид применяет этот
алгоритм к первым двум своим параметрам, рассматриваемым
как полиномы от одной переменной, т.е. от третьего
параметра. Здесь мы избавляемся от содержания полиномов Л и Б до
применения алгоритма Евклида - от этого результат не
меняется, но параметры алгоритма Евклид становятся меньше.
Алгоритм содержание останавливается, как только он
определяет, что содержание равно единице: это может избавить нас от
бесполезных вычислений. В связи с этим алгоритмом возникает
много проблем:
(a) В алгоритме Евклида промежуточные выражения
разбухают. Даже если мы воспользуемся методом последовательности
субрезультантных полиномиальных остатков, промежуточные
степени будут значительно возрастать.
(b) Число промежуточных вызовов. Если мы хотим вычислить
НОД двух полиномов от двух переменных степени десять по
каждой переменной, таких, что степень НОД по каждой
переменной равна пяти, то нам нужно:
20 вызовов для вычисления двух содержаний,
1 вызов для вычисления НОД этих двух содержаний,
5 вызовов для вычисления содержаний результата алгоритма
Евклид,
т.е. 26 рекурсивных вызовов. В случае трех переменных
поэтому потребуется 26 вызовов алгоритма НОД для двух
переменных, каждый из которых требует примерно 26 вызовов НОД от
одной переменной.
(c) Кроме того, все целые числа, появляющиеся в качестве
коэффициентов, могут становиться очень большими.
Эти недостатки не являются чисто гипотетическими. Чтобы
проиллюстрировать громадное разбухание, которое может про-
Компьютерная алгебра 177
исходить, мы дадим весьма маленький пример полиномов от
двух переменных х и уу подобранный так, чтобы результаты
были настолько малы, что их можно напечатать (х - главная
переменная):
А = (У2 -У~\)х2 - (у2 - 2)х + (у2 + у+ 1),
В = (У2 -у+\)*2 ~ {У2 + 2)х + (у2 + у + 2).
Первое исключение дает
С = Bу2 + 4у)х + Bу* + у2-3у+1)у
а второе -
D = -V°+ 4*/9 - 4у8 + 8у7 - 7у6 + у5 - 4f/4 + 7у3 - Uy2 + Зу - 1.
Здесь мы видим рост величины целых чисел и весьма
значительный рост степеней у. Заметим, что общая задача этой
степени может дать в результате полином от у степени 32.
Как мы видели в предыдущем разделе, модулярные
вычисления могут избавить нас от такого роста целых коэффициентов.
Но нам нужно быть более изобретательными, чтобы обойти
другую проблему роста степеней неглавных переменных и
рекурсивных вызовов. Предположим, что два полинома А и В из
нашего примера имеют общий делитель, т.е. полином Р
(ненулевой степени), который делит и А, и В.. Тогда
существует полином Q, такой, что А = PQ. Это соотношение остается
справедливым, если мы вычислим значение каждого полинома
при у = 2. Если мы будем писать Р =2 для обозначения
значения полинома Р при у = 2, то из этого равенства следует,
что Р _0 делит А 0. Аналогично Р 0 делит В _9, а потому
У~* У~^ 1) У~^ У~
является общим делителем чисел А = 2 и В"=2- ™° вычисление
НОД чисел А =2 и В =2 совсем просто:
1 Как и в предыдущем разделе, нужно заметить, что мы не
можем заключить, что Р _2 = НОД(Л =2, В =2): контрпримером
является А = ух + 2, В = 2х + уу где Р=1, но А 9 = В 9=
У~*• У *•
= 2х + 2, и, таким образом, НОД(Л =2, В =2) = *+1, в то
время как Р - 1.
176—12 ^
178 Современные алгоритмы
А Ах) = х2 - 2х + 7,
В =Jx) = 3x2-6x + 8,
у ~
осчгпок{Ау'=2(х),Ву=2{х)) = 29.
Таким образом, числа А =2(*) и В Лх) взаимно просты,
откуда следует, что Р =2 = 1. Поскольку старший коэффициент
полинома Р должен делить НОД старших коэффициентов
полиномов А и Б, которые равны единице, мы получаем, что Р = 1.
Эти вычисления сильно напоминают вычисления по модулю 5,
которые мы проводили в предыдущем разделе, и их можно
аналогичным образом обобщить. Читатель, интересующийся этим
математическим результатом в наиболее общей постановке,
может обратиться к статье [Lauer 1982], где приведен общий
формализм модулярных вычислений.
4.1.2.1. Плохая редукция
Мы определили, что число р дает плохую редукцию для
вычисления НОД полиномов А и Ву если
НОД(Л, В)р* НОД(Лр, Вр).
Мы заметили также, что если р не приводит к плохой редукции
и если один из старших коэффициентов полиномов А и В не
делится на р, то степень НОД по модулю р совпадает со
степенью истинного НОД. Эти замечания приводят к следующему
определению.
Определение. Пусть А и В - два полинома из кольца
/?[#][*], где R - область целостности. Элемент г кольца R
дает хорошую редукцию для вычисления НОД полиномов А и В,
если
НОЩА.В^НОЩА^ В^).
В противном случае г дает плохую редукцию.
Предложение. Элемент г дает плохую редукцию тогда и
только тогда, когда у- г делит
Res* [Н0ДМ,Д)' НОДМ.Я)}
Предложение. Если г дает хорошую редукцию и у- г не
делит два старших коэффициента (относительно х) полиномов А
Компьютерная алгебра 179
и В, то НОД(Д В) и НОД(Л , В = ) имеют одинаковую
степень относительно х.
Доказательство этих предложений аналогично
доказательствам в предыдущем разделе. Ключевым результатом этого
раздела было неравенство Ландау - Миньотта, которое весьма
непросто доказать, и удивительно, что его очевидное обощение
ложно. В данном случае все обстоит гораздо проще.
Предложение. Если С - делитель полинома Л, то степень
(относительно у) полинома С меньше или равна степени
(относительно у) полинома А.
4.1.2.2. Алгоритм
Вооруженные этими результатами, мы можем вычислить НОД
двух полиномов от п переменных с помощью рекурсивного
метода, где г - индекс главной переменной (который не будет
меняться), as- индекс второй переменной, которой будет
присваиваться значение. Алгоритм приводится на следующей
странице. Начальный вызов должен быть выполнен при s = г -1.
Когда 5 опускается до нуля, наш полином зависит от одной
переменной, рекурсия завершается и мы можем вызвать
процедуру простойНОД (которая вполне может оказаться модулярным
алгоритмом НОД из предыдущего раздела) для его вычисления.
В данном алгоритме мы предполагаем, что алгоритм random
вырабатывает случайное число (каждый раз новое), а алгоритм
CRT применяет китайскую теорему об остатках (полиномиальный
вариант) к каждому коэффициенту (относительно х ) двух
полиномов Рез (по модулю Дано) и С (по модулю х - v). Два
идентичных цикла пока выбирают значение v> удовлетворяющее
условию, что х - v не делит два старших коэффициента
полиномов А и В.
Как и в модулярном алгоритме НОД 'предыдущего раздела,
два оператора идти на~ в этом алгоритме соответствуют двум
способам определения, дают ли все выбранные значения плохую
редукцию:
• или мы нашли и, такое, что степень НОД после
подстановки значения х = v меньше, чем уже вычисленные степени
(поэтому они пришли из плохой редукции);
180 Современные алгоритмы
Алгоритм модулярного НОД
алг Н0Д{А,В,г,8)\
если 5 = 0 то выход простой НО]Д(А, В, х );
М := 1 + т\п(степень(А,х ),степень(В,х ));
Е0: цикл v := random()\
Av := подст(х ,v,A)\
Bv := подст(х ,v,B)\
пока CTeneHb(Av,x ) * степень(А,х )
и степень(Ви,х ) * степень(В,х )
С := Н0Д{А,В,г,8 - 1);
£7: Дало := * - а;
/z := 1;
Рез := С;
цикл пока п ^ М
цикл у := random()\
Av := подст(х ,v,A)\
Bv := подст(х ,v,B)\
пока степень^Av, x ) * степень^Af x )
и степеHb(Bv,x ) * степень(В,х )
С := Н0Д{А,В,г,8 - 1);
если степень(Сух ) < степень(Резух ) то идти на Я/;
если степень(С,х ) = степень(Рез>х )
то Рез := СРТ(Рез,Дано,С,х8 - i/);
Дано := Дано х (х - и);
если делит(Рез,А) и делит(РезуВ)
то выход Рез;
идти на £0;
• или же мы вышли на конец вычислений с результатом, ко
торый кажется хорошим, но который не делит Л и Б, поскольку
все редукции были плохими (неправдоподобная возможность).
Если первая редукция была хорошей, то ни один оператор
идти на не выполняется.
Этот алгоритм может быть улучшен таким же образом, как и
алгоритм для случая одной переменной, если заменить строку
то Рез := CRT(J>e3,MciHo,C,xs - v)\
Компьютерная алгебра 181
строками
то Предыдущий := Рез;
Рез := С1*Т(Рез,ДаноуС,х -и);
если Предыдущий = Рез и
делит(РеЗуА) и делит(Рез,В)
то выход Яез;
4.1.2.3. Стоимость приведенного алгоритма
Проанализируем теперь наивный алгоритм, как он был
описан, без улучшений, в конце предыдущего абзаца. Будем
использовать следующие обозначения: г - общее число
переменных (таким образом, после г -1 рекурсий мы вызовем
алгоритм простойНОД), степени относительно каждой переменной
ограничены числом л, а длины всех коэффициентов ограничены d.
Нам нужно самое большее п +1 значение хорошей редукции.
Мы можем не принимать во внимание малые циклы пока, так как
в общем случае они повторяются не более п раз, поскольку
повторение означает, что значение я, вырабатываемое
функцией random, - это общий корень старших коэффициентов
полиномов А и В, а у полинома степени п не может быть более п
корней. Если N - количество найденных нами значений
переменной х с плохой редукцией, то большой цикл выполняется
N + п + \ раз. Необходимо поэтому найти границу для N,
которая, очевидно, меньше или равна количеству значений v с
плохой редукцией.
Пусть С - истинный НОД полиномов А к В. Тогда полиномы
А/С и В/С взаимно просты, и их результант (см. дополнение
"Основные сведения из алгебры") относительно х ненулевой.
Если v дает плохую редукцию, то НОД чисел А = и В
А - в *s *s
больше, чем С , т.е. числа Ы и Ы не взаимно
s s s
просты; поэтому их результант относительно х должен быть
равен нулю. Но если старшие коэффициенты не обращаются в
нуль, то
»».[**] -*•.(D] ■(£] ]■
г У. J X =V TLL J X =V L J X =VJ
s s s
(Несколько более сложная ситуация возникает, когда один из
старших коэффициентов (например, старший коэффициент поли-
182 Современные алгоритмы
нома А) обращается в нуль. Результант в правой части - это
определитель матрицы Сильвестра, размер которой меньше
размера соответствующей матрицы в левой части. В этом случае
результант в правой части, умноженный на некоторую степень
второго старшего коэффициента, равен результанту слева. Во
всяком случае один из результантов обращается в нуль тогда
и только тогда, когда обращается в нуль второй.) Отсюда
следует, что v - корень результанта Res {А/С, В/С). Это
2* г ^2
полином, степень которого не превосходит 2/г , поэтому N ^ 2N .
В этом цикле наиболее дорогие операции - рекурсивный
вызов алгоритма НОД и применение китайской теоремы об
остатках. Для последней нам нужно вычислить самое большее п +1
коэффициентов полинома от х , применяя теорему к полиномам
Дано и х - v. Дано - это произведение линейных полиномов,
и в разделе о китайской теореме об остатках в дополнении
"Основные сведения из алгебры" дается чрезвычайно простая
ее формулировка для этого случая. Фактически нам нужно
просто вычислить значение полинома Рез в точке v, умножить
разность между ним и С на рациональное число и на Дано и
прибавить это произведение к Рез. Умножение (самая дорогая
операция) требует времени выполнения 0(п s~ d ) для каждого
коэффициента относительно вычисленного значения х , т.е.
2 с 2 *"
общее время - 0(п d ). Таким образом, если обозначить
через НОД($) время выполнения алгоритма НОД с четвертым
параметром, равным 5, то стоимость одного повторения цикла
равна HOJ\(s-\) + 0(n2sd2).
Поэтому общая стоимость принимает значение
Bл2 + п + 1)(Н0ДE - 1) + 0(n2sd2)).
Из результатов предыдущего раздела, имеющего дело с
одной переменной, следует, что НОД(О) = 0(n3d3). По индукции
доказывается, что HOJ\(s) = 0(п d ). Начальное значение s
равно г-1, поэтому искомое время выполнения ограничено
величиной 0(п d ). Эта оценка достаточно пессимистична,
и Лоос [Loos 1982] цитирует гипотезу Коллинза, что среднее
г+ 1 2
время имеет вид 0(п d ).
Компьютерная алгебра 183
4.1.3. Другие применения модулярных методов
Модулярные методы имеют много других приложений помимо
НОД, хотя это было первым. Некоторые из этих приложений
также используют понятие плохой редукции, для других
редукции всегда хорошие. Очевидно, что алгоритм гораздо проще,
если редукции всегда хорошие.
Вообще мы иллюстрируем эти приложения редукцией по
модулю р, где р - простое число, как мы делали это в первом
разделе. Если в задаче содержится несколько переменных, то
можно придавать значения каждой переменной, как мы делали
при вычислении НОД для случая нескольких переменных.
Обобщения обычно достаточно очевидны, и их можно найти в
цитируемой литературе.
4.1.3.1. Вычисление результанта
Результанты определяются в дополнении "Основные сведения
из алгебры". Поскольку их вычисления очень тесно связаны с
вычислениями НОД, нас не должно удивлять существование
связи между этими понятиями. В действительности, поскольку
результант двух полиномов А и В - это полином от
коэффициентов полиномов Л и By легко заметить (по крайней мере,
если р не делит старшие коэффициенты), что
Resx(A,B)p=Resx(Ap,Bp).
Поскольку это соотношение выполняется всегда, каждое
значение р дает хорошую редукцию. Мы исключаем значения р,
которые делят старшие коэффициенты, чтобы избежать осложнений,
возникающих, когда меняются степени полиномов Л и В. Уже
упоминавшееся дополнение содержит границы величины
результанта, которые говорят о том, как много нужно значений р,
чтобы гарантировать, что мы получили результант. Коллинз
[Collins 1971] обсуждает этот алгоритм, который оказывается
наиболее эффективным методом, известным для вычисления
результанта.
4.1.3.2. Вычисление определителей
Результант является всего лишь определителем матрицы
Сильвестра, и можно надеяться, что модулярные методы
позволят нам вычислять определители общго вида. Это в действи-
184 Современные алгоритмы
тельности возможно - нам нужно только вычислить
определитель по модулю достаточного числа значений р и применить
китайскую теорему об остатках. Нам нужно определить
количество требующихся значений р - другими словами, нужно
ограничить определитель. Предположим, что определитель
имеет размер п и что элементы матрицы суть а. ..
Теорема.
п
ld^(fl/f/)l ~nl Cm?xmax \a. .ft .
Доказательство. Определитель состоит из суммы п\ членов,
каждый из которых является произведением п элементов матрицы.
Теорема (граница Адамара [Hadamard 1893]).
|det(a, .)|2* П С Е К J2]-
4.1.3.3. Обращение матрицы
Эта задача существенно более сложная, поскольку элементы
матрицы, обратной к матрице с целыми элементами, не
обязательно целые. Более того, может случиться, что матрица
обратима над целыми числами, но вырожденна по модулю р,
поэтому могут встречаться плохие редукции. Если обращение по
модулю р не работает, то р делит определитель, и, если
матрица не является действительно вырожденной, то таких р
существует только конечное число. У задачи, связанной с тем,
что элементы обратной матрицы не обязательно целые, имеется
два возможных решения. Первое: заметить, что они всегда
являются рациональными числами, знаменатели которых делятся
на определитель. Поэтому, если умножить этот элемент по
модулю р на определитель (который мы вычисляем раз и
навсегда) по модулю р, то мы вернемся к числителю по модулю р,
который может быть использован для нахождения истинного
решения.
Значение второго решения возрастает в связи с тем, что
оно может быть применено и в других задачах, в которых
требуемое решение является дробным. Этот метод предложил Ванг
[Wang 1981] для задачи нахождения разложения на простейшие
дроби, но он может применяться в гораздо более общей ситуа-
Компьютерная алгебра 185
ции. Прежде всего нам понадобятся некоторые дополнительные
сведения из алгебры. Пусть М - целое число (в практических
задачах М будет произведением всех используемых простых
чисел с хорошей редукцией), а а/Ъ - рациональное число,
такое, что Ь и М взаимно просты (в противном случае одна из
редукций не будет хорошей). Если мы применим расширенный
алгоритм Евклида (см. дополнение "Основные сведения из
алгебры") к числам Ь и М, то получим целые числа с и dy
такие, что be + Md= 1, другими словами, be = 1 (mod M).
Можно расширить понятие рациональной эквивалентности, сказав,
что
т = ас (mod M).
Более того, если а и b меньше, чем v7W/2, то это
представление единственно, поскольку из a/b = a' /b' следует, что
ab'= а'Ь. Например, если М = 9, то мы можем представить
так все дроби, числители и знаменатели которых меньше или
равны 2; это видно из следующей таблицы:
по
модулю 9
0
1
2
3
4
5
6
7
8
дробь
0/0
1/1 = 2/2
2/1
—
-1/2
1/2
—
-2/1
-1/1 = -2/2 1
Мы доказали вторую часть следующего принципа.
Принцип модулярных вычислений. Целое число, меньшее —М,
имеет единственный образ п по модулю М. Аналогично
рациональное число, числитель и знаменатель которого меньше
VM/2, имеет единственный образ по модулю М.
186 Современные алгоритмы
Для случая целых чисел вычисление целого числа по
данному образу п довольно просто: берем п или п - М в
зависимости от того, п < М/2 или п > М/2. Для рациональных чисел
такая "реконструкция" неочевидна. В работе [Wang 1981]
предложено, а в работе [Wang et al. 1982] обосновано
использование расширенного алгоритма Евклида (почти одновременно с
ним это открытие сделали и многие другие авторы). Каждое
целое число, вычисляемое в алгоритме Евклида, является
линейной комбинацией двух данных. Мы применяем алгоритм к
числам п и М и получаем убывающую последовательность целых
чисел а . = b .п + с .М. Другими словами, n = a./b. (mod M).
Весьма примечательно, что если существует дробь а/Ьу
эквивалентная nt для которой а и b меньше, чем VM/2, то этот
алгоритм найдет их, и они будут определяться первым
элементом последовательности, для которого а. < VM/2. Для
выполнения этих вычислений можно приспособить алгоритм Евклида.
q := М\
г := п\
Q : = 0;
R := 1;
цикл пока г * 0
t := остаток(</,г);
Т := Q - Vq/r\R-y
q := П
г := t\
Q := /?;
R := Т\
если г < VM/2 то
если |/?| < VM/2 то
выход г//?
ошибка "не восстанавливается";
ошибка "общий множитель";
По сравнению с алгоритмом из дополнения мы сделали
некоторое упрощение: не обязательно запоминать зависимость г от
М, поэтому мы не вычисляем ее в этом алгоритме.
Компьютерная алгебра 187
4.1.3.4. Другие приложения
Разумеется, можно использовать модулярные методы для
многих вычислений, связанных с вычислением обратной
матрицы, например для решения системы линейных уравнений [Chou,
Collins 1982]: здесь имеются плохие редукции в том случае,
когда р делит один из знаменателей решения. Некоторые
матричные вычисления описаны в [Gregory, Krishnamurthy 1984] и
[Krishnamurthy 1985]. Как уже говорилось, Ванг [Wang 1981]
ввел вычисление дробей для разложения дроби P/QR на
простейшие: здесь плохая редукция соответствует значениям /?,
таким, что Q и R не взаимно просты по модулю р.
Здесь мы должны отметить большой недостаток модулярных
вычислений: они не принимают во внимание разреженную
природу задачи. Если нам нужно вычислить полином степени 99 с
100 членами, то нам нужно 100 значений полинома, прежде чем
можно будет использовать интерполяцию Лагранжа, даже в том
случае, когда полином имеет всего два ненулевых
коэффициента. Мы уже упоминали, что каждый реальный полином от
нескольких переменных должен быть разреженным, поэтому
модулярные методы не очень хорошо применяются к таким
полиномам. Циппель [Zippel 1979] попытался придать этому методу
вероятностный характер, чтобы применять его к задаче
вычисления НОД полиномов от нескольких переменных, и такой
алгоритм встроен в систему MACSYMA и используется по умолчанию.
4.2. р-АДИЧЕСКИЕ МЕТОДЫ
В этом параграфе мы рассмотрим другое достаточно большое
семейство современных методов компьютерной алгебры и начнем
с первого их серьезного приложения - разложения полиномов
на множители.
4.2.1. Разложение полиномов от одной переменной
Предположим, что дан полином f(x) с целыми
коэффициентами, и зададим вопрос: можно ли определить, существуют или
нет полиномы g и А, степени которых строго меньше степени
/, такие, что / = gh?
188 Современные алгоритмы
Лемма Гаусса (эквивалентная форма). Пусть f e 1[х] и
f = gh, где gun принадлежат кольцу (Q[jc]. Тогда существует
рациональное число q, такое, что qg и q~1h принадлежат 1[х].
Эта лемма, хорошо известная в алгебре означает, что
ограничение, чтобы сомножители имели целые коэффициенты, не
уменьшает общности.
Поскольку мы можем достаточно эффективно вычислять
разложение на свободные от квадратов множители, можно
предполагать, что полином / свободен от квадратов. Запишем
f = a хп +... + ап. Каждый линейный сомножитель полинома f
'пи '
должен иметь вид Ьх + с, где Ь делит а , а с делит ап, и
п U
таким образом можно искать линейные множители исходного
полинома. Теоретически, можно найти и множители более
высокой степени, решая системы уравнений, определяющих их
коэффициенты, но этим методом можно пользоваться, только если
степени весьма малы.
Имея в виду успешное применение модулярных методов,
описанное в предыдущем параграфе, можно попытаться применить
их и здесь. Верно, что из f = gh следует / = g h , а также
то, что разложение на множители по модулю р является по
крайней мере конечной задачей, поскольку существует только
конечное число возможных коэффициентов. В действительности
существует весьма эффективный алгоритм, который мы
рассмотрим в следующем разделе.
4.2.1.1. Алгоритм Берлекэмпа
В этом разделе мы рассмотрим задачу о разложении на
множители полинома f(x) по модулю р. Предположим, что полином
/ свободен от квадратов. Сформулируем несколько фактов о
вычислениях по модулю /?, часть из которых хорошо известна.
Предложение 1. Если а и Ь - два целых числа по модулю р,
то (а + Ь)р = ар + Ър.
Доказательство. По формуле бинома мы можем разложить
(а + Ь)р следующим образом:
(а + Ь)р = ар +
поскольку все биномиальные коэффициенты делятся на р.
, Компьютерная алгебра 189
Предложение 2 (малая теорема Ферма). ар = а по модулю р.
Доказательство проводится индукцией по а, поскольку
предложение истинно при а = О или а = 1. В общем случае
а = (а-1) + 1, и к этому выражению можно применить
предыдущее предложение:.
ар = ((а-\) + 1)р = (а-1)р + 1р = (а-1) + 1 = а.
Следствие. Каждое целое число по модулю р является
корнем полинома хр - х, поэтому
ХР-х = (х-0)(х-1)...(х-(р-1)).
Эти два предложения можно следующим образом
распространить на полиномы.
Предложение 3. Если а и Ъ - два полинома По модулю р, то
(а + Ь)р = ар + Ьр.
Доказательство то же самое, что и для предложения 1.
Предложение 4. Если а(х) - полином, то а(х)р = а(хр) по
модулю р.
Доказательство. Проведем индукцию по степени полинома а,
поскольку предложение истинно, когда а — число (предложение
2). В общем случае а(х) = а(х) + а хпу где а - полином,
степень которого меньше степени полинома а, и к этому
выражению можно применить предыдущее предложение:
а(х)р = (а(х) + апхп)р = а(х)р + (а„*У = Фр) + апхпр = а(хр).
Предположим теперь, что / разлагается в произведение г
неприводимых полиномов:
t(x) = f^(x)f2(x)...fr(x)
(в настоящий момент г неизвестно). Поскольку / не имеет
кратных сомножителей, полиномы /. взаимно просты. Пусть
5.,...,5 - целые числа по модулю р. По китайской теореме
об остатках (см. дополнение "Основные сведения из алгебры")
существует полином и, такой, что
v = s. (mod p, /.(*))> (!)
190 Современные алгоритмы
где вычисления выполняются по модулю полинома /. и по
модулю простого числа р. Кроме того, степень полинома v меньше
степени произведения полиномов /., т.е. степени полинома /.
Полезность рассмотрения такого полинома v следует из того,
что если s.±s.y то НОД(/, vs.) делится на / , но не
делится на f., что приводит к разложению полинома /. Имеем
следующее соотношение:
v(x)p =spf = s. = v(x) (mod f.(x)yp).
Тогда по китайской теореме об остатках
v{x)P = v(x) (mod f(x),p). B)
Заменяя х на v(x) в приведенном выше следствии, получаем,
что
v(x)P - v(x) = (v(x) - 0)(v(x) - 1)... (v(x) - (p - 1)) (mod p). C)
Таким образом, если v(x) удовлетворяет соотношению B), то
f(x) делит левую часть соотношения C), а каждый из его
неприводимых множителей, /., делит один из полиномов в
правой части соотношения C). Но из этого следует, что полином
v эквивалентен по модулю /. целому числу, т.е. что v
удовлетворяет A). Мы доказали (методом Кнута [Knuth 1981],
с. 422) следующий результат.
Теорема Берлекэмпа [1967], Решения v сравнения A) суть
в точности решения сравнения B).
Мы уже отметили, что решения сравнения A) дают
информацию о разложении полинома / на множители, но у нас осталась
задача их нахождения. Основная идея Берлекэмпа - заметить,
что соотношение B) - это система линейных уравнений по
модулю р на коэффициенты полинома v. Это замечание выглядит
несколько неожиданным, но оно следует из предложения 4.
Действительно, пусть п - степень полинома /, и рассмотрим
матрицу
Г ^0,0 ^0,1 *•• ^0,n-l I
Q = V ЯУ '" V
I» ^n-1,0 qn-\tV. ••* qn-\,n-\ J
Компьютерная алгебра 191
где элементы q определяются из сравнения
x?kE ^.n-1^ + •• + Чл* + qk$ (mod Л*)- р)-
Если рассматривать полином как вектор его коэффициентов, то
умножение на матрицу Q соответствует вычислению р-й степени
полинома. Таким образом, решения уравнения B) - это
собственные векторы матрицы Q (mod p) для собственного значения
1. Алгоритм Берлекэмпа может быть выражен в следующем виде:
[1] Проверить, что у / нет кратных сомножителей. Если
они есть, то выполнить разложение / на свободные от
квадратов множители и применить данный алгоритм к каждому из них.
[2] Вычислить матрицу Q.
[3] Найти базис собственных векторов для собственного
значения 1. Всегда одним из собственных векторов является
вектор [1, 0, 0, ..., 0]. Это отражает тот факт, что целые
числа всегда являются решениями сравнения B). Число
элементов в этом базисе равно числу неприводимых сомножителей
полинома /.
[4] Вычислить НОД(/, v - s) для каждого целого числа 5
по модулю р, где v - полином, соответствующий
нетривиальному собственному вектору. Это приведет к разложению / на
множители. Если при этом мы найдем меньше множителей, чем
нужно, то можно воспользоваться другим собственным
вектором.
Заметим, что этап [4] самый дорогой и что, если мы
остановимся после этапа [3], то уже определим число
неприводимых сомножителей. Время работы этого алгоритма равно
0(п + ргп ), где г - число сомножителей (среднее значение
его равно In n). Алгоритм очень быстрый, если р мало, но
может оказаться дорогим в противном случае. Кнут [Knuth
1981] описывает несколько вариантов этого алгоритма, в не-
которых из них зависимость от р имеет порядок log p.
4.2.1.2. Соотношение модулярное - целое
В предыдущем разделе был приведен эффективный алгоритм
разложения на множители полинома по модулю р. Как он может
быть использован для разложения на множители полинома с
целыми коэффициентами? Разумеется, если полином не разлага-
192 Современные алгоритмы
ется на множители по модулю р (р не делит старший
коэффициент), то полином неприводим, поскольку из разложения / = gh
следует, что / = g h . Но обратное утверждение неверно:
например, полином х +1 неприводим, но разлагается на
множители по модулю всех простых чисел вида 4k +1, так как -1
является квадратом по модулю чисел такого вида. Тем не
менее этот полином неприводим по модулю чисел ,вида 4k + 3.
Таким образом, можно показать, что он неприводим над
кольцом целых чисел, доказав, что он неприводим по модулю 3.
Фактически имеется бесконечное число "хороших" р и
бесконечное число "плохих" р.
К сожалению, имеются неприводимые полиномы,
разлагающиеся на множители по модулю всех простых чисел. Простейший
пример представляет полином х +1, который всегда
разлагается в произведение двух полиномов степени два, которые
могут оказаться также приводимыми. Доказательство этого
использует некоторые свойства квадратов по модулю р (читатель
по желанию может пропустить детальный анализ).
р = 2 Тогда *4 + 1 = (х + 1L.
р = 4k + 1 В этом случае -1 всегда является квадратом,
скажем -1 = q2. Отсюда получается разложение на
множители х4 + 1 = (х2 - q)(x2 + q).
р = 8k ± 1 В этом случае 2 всегда является квадратом,
скажем 2 = q . Отсюда получаем разложение на
множители
х4 + 1 = (х2 - B/q)x + \){х2 + B/q)x + 1),
которое является вариантом разложения
х4 + 4 = (х2 - 2х + 2)(х2 + 2х + 2),
встречавшегося нам в разделе гл. 2 о
представлении простых радикалов. В случае р - 8k +1 мы
имеем это разложение и разложение, приведенное в
предыдущем случае. Поскольку эти два разложения
различны, можно вычислить НОД сомножителей для
того, чтобы найти разложение в произведение
четырех линейных множителей.
р = 8k + 3 В этом случае -2 всегда является квадратом, ска-
жем -2 = q . Это следует из того, что ни -1, ни
Компьютерная алгебра 193
2 не являются квадратами, значит, квадратом
должно быть их произведение. Это свойство числа -2
дает нам разложение на множители
*4 + 1 = (х2 - B/д)х - \){х2 + B/д)х - 1),
которое также является вариантом разложения
*4 + 4 = (х* - 2х + 2)(х2 + 2х + 2).
Этот полином не является изолированным: Калтофен и др.
[Kaltofen et al. 1981], [Kaltofen et al. 1983] доказали,
что существует целое семейство полиномов, которые неприво-
димы, но разлагаются на множители по модулю любого простого
числа. Кое-кто утверждал, тем не менее, что такие полиномы
встречаются "совсем редко", но Аббот и др. [Abbott et al.
1985] установили, что они могут реально встречаться при
вычислениях с алгебраическими числами.
Поэтому нам нужно найти метод разложения на множители,
который работал бы даже в том случае, когда модулярное
разложение не соответствует разложению на множители над целыми
числами. В начале этой главы мы приводили неравенство
Ландау - Миньотта, которое дает нам границы для коэффициентов
сомножителя полинома в терминах степени и размера
коэффициентов исходного полинома. Это неравенство пригодится нам в
данном случае, поскольку оно позволяет найти такое N, что
все коэффициенты сомножителей полинома должны лежать между
-N/2 и N/2. Отсюда получается следующий алгоритм разложения
на множители полинома /, по существу принадлежащий Цассен-
хаузу [Zassenhaus 1969]:
[1] Выбрать N достаточно большим, чтобы все коэффициенты
сомножителей полинома / были меньше, чем N/2. Позаботиться,
чтобы N не имело общих делителей со старшим коэффициентом
полинома /.
[2] Разложить полином по модулю N на множители.
Предполагая, что / нормирован, выбирать всегда нормированные
множители. Записать / = fJo-fb (m°d Ю-
[3] Рассматривая /. по модулю Af как полиномы с целыми
коэффициентами, проверить, делят ли они /. Каждый полином
f., делящий /, является его неприводимым сомножителем.
176—13
194 Современные алгоритмы
[4] Если имеются полиномы /., не делящие /, то нужно
образовать полиномы вида /./. (mod N) и проверить, делят ли
эти полиномы (с целыми коэффициентами между -N/2 и N/2)
полином /. Каждая комбинация, которая делит /, - это
неприводимый сомножитель полинома /. Те полиномы /., которые
появляются в сомножителе полинома /, могут быть исключены
из дальнейшего рассмотрения.
[5] Если остались некоторые /., то нужно образовать
полиномы вида fjfk (mod N) и проверить, делят ли эти
полиномы (с целыми коэффициентами между -N/2 и N/2) полином /.
Каждая комбинация, которая делит /, - это неприводимый
делитель полинома /. Продолжаем до тех пор, пока не будет
проверена каждая комбинация (или ее дополнение).
[6] Если остались некоторые /., то их произведение -
неприводимый делитель полинома /.
Например, коэффициенты каждого делителя полинома х +1
меньше (или равны) 16, поэтому можно использовать N = 37,
которое приводит к разложению х + 1 = (х - 6)(х + 6)
(mod 37), и эти полиномы -неприводимы. Рассматриваемые как
полиномы с целыми коэффициентами, они не делят х +1.
Поэтому берем их комбинацию, но это - сам полином х + 1. Он
делит х +1, поэтому является неприводимым сомножителем,
что мы и стремились доказать.
Этот алгоритм может оказаться экспоненциальным (т.е.
может требовать времени выполнения, которое будет
экспоненциальной функцией) относительно числа сомножителей по
модулю N из-за числа комбинаций, которые нужно проверить на
этапе [5]. В действительности если полином неприводим, но.
имеет п сомножителей по модулю N, то нужно проверить
примерно 2П_1 полиномов, чтобы узнать, есть ли у полинома /
делители. Эта проблема называется комбинаторным взрывом
стоимости выполнения. Недавно она была решена Ленстрой и
др. [Lenstra et at. 1982], но их метод представляет скорее
теоретический, чем практический интерес.
Тем не менее в практических задачах мы чаще сталкиваемся
со следующей проблемой: наиболее дорогим этапом алгоритма
кажется вычисление разложения на множители по модулю N.
Компьютерная алгебра 195
Обычно N является слишком большим, чтобы мы могли взять
простое число р > N и непосредственно воспользоваться
алгоритмом Берлекэмпа, поскольку зависимость от р весьма
существенна, даже для улучшенной версии. Кроме того, мы хотим
иметь возможность использовать маленькие значения р, чтобы
быстро определять, неприводим ли полином.
Можно воспользоваться модулярными методами, но здесь мы
сталкиваемся с проблемой, ранее нам не встречавшейся.
Предположим, например, что / представляется в виде g^h (mod
р ) и g2h2 (m°d P2)> где все сомножители имеют одну и ту же
степень. Можно применить китайскую теорему об остатках к
коэффициентам полиномов g и g , чтобы найти полином с
коэффициентами по модулю РгР2^ который является делителем
полинома / по модулю РгР2 (и аналогично для А и А ). Но
равным образом можно применять эту теорему к g и А или к
g и А . В действительности кольцо (I/p p 1)[х] не является
областью с однозначным разложением на множители, и полином
/ обладает двумя различными разложениями по модулю РгР2-
Если мы выявим такое же поведение по модулю р , то мы
найдем четыре различных разложения на множители по модулю
р р р , и в общем случае число различных разложений может
быть экспоненциальной функцией от р. Таким образом,
модулярный метод не очень годится для этих вычислений, и нам
нужно найти другой метод для разложения на множители по
модулю N. На этот раз мы используем числа вида N = р , где р
- простое число. Такие методы называются р-адическими.
4.2.2. Лемма Гензеля - линейный вариант
В этом разделе мы увидим, как можно вычислять разложение
на множители полинома / по модулю р , исходя из его
разложения на множители по модулю р, вычисленного с помощью
алгоритма Берлекэмпа, описанного ранее. Для простоты,
рассмотрим сначала случай нормированного полинома /, который
разлагается по модулю р в произведение вида f = gA, где
полиномы g и А взаимно просты (откуда следует, что полином /
по модулю р свободен от квадратов, т.е. что р не делит
результант полиномов / и /'). Мы будем использовать нижние
196 Современные алгоритмы
индексы для обозначения показателя степени числа р, по
модулю которой производятся вычисления. Таким образом, наше
разложение на множители может быть записано как 1Л=ёЛ1гЛ
м 111
(mod p ), а наша цель - вычислить соответствующее
разложение на множители fk = gkhk (mod pk)y такое, что значение рк
достаточно велико.
Очевидно, что g1 = g2 (mod р), поэтому можно записать
ё2 = &i+ P&21 где &2 " мера Разности между gx и gr То же
имеет место для / и А, так что /2-£2А2 (mod Р2) принимает
вид
fr + Pf2 - (^1 + Рё2КН1 + рН?) (mod ^
Поскольку f1~g1h1 (mod р1), это сравнение может быть
переписано в виде
р +fz = 82hi + A2*i (mod P)-
Левая часть этого сравнения нам известна, в то время как
правая часть линейно зависит от неизвестных g и А .
Применяя расширенный алгоритм Евклида (см. дополнение "Основные
сведения из алгебры") к полиномам g и А , которые взаимно
просты, можно найти полиномы g и А , степени которых
меньше степеней соответственно полиномов g и А ,
удовлетворяющие этому сравнению по модулю р. Ограничения на степени
полиномов g2 и А2 в данном случае выполняются, поскольку
старшие коэффициенты полиномов g, и А, должны равняться 1.
Таким образом можно определить g2 и А2.
Аналогично g3 = g2 (mod р2), поэтому g3 = g2 + p2g3> где
g - мера разности между g и g . То же имеет место для / и
о _ £ о
А, так что f3-g3h3 (mod р ) принимает вид
р
Поскольку /2 = £2^2 (mod Р )» эт0 сравнение может быть
переписано в виде
/Р - g?h? ~
2 + /3 = *3*2 + А3*2 (m0d ^
Компьютерная алгебра 197
Более того, g2 = g1 (mod /?), так что это сравнение можно
упростить:
/2 - g2h2 -
2 +/з5«зЛ2 + Лз«1 (mod Л-
Левая часть этого сравнения нам известна, в то время как
правая часть линейно зависит от неизвестных g и А .
Применяя расширенный алгоритм Евклида к полиномам g и А ,
которые взаимно просты, мы можем найти полиномы g. и А_, степе-
ни которых меньше степеней соответственно полиномов g и
А , удовлетворяющие этому сравнению по модулю р. Таким
образом, исходя из полиномов g и А , определяем g и А3.
Можно продолжать этот вывод таким же способом для любой
k k
степени р числа р, пока р не станет достаточно велико.
Нужно заметить, что алгоритм Евклида применяется всегда
к одним и тем же полиномам, поэтому достаточно выполнить
его один раз. В действительности можно сформулировать
алгоритм в следующем виде:
Алгоритм ГенЗеля - линейный вариант;
Вход Ugyhvp,k;
Выход gk,hk;
g •= gy
А := hv
grecip,hrecip := PacuiupeHHbiuEeMud(g1,h1,p);
цикл для / : = 2...k
Различие := f ~ g* (mod p')
gcorr := Различие * hrecip (mod p,g.);
hcorr := Различие * grecip (mod p,hx);
g := g + pl~X gcorr;
h := h + pl~ hcorr;
выход g,A;
Алгоритм РасширенныйЕвклид должен здесь выдавать
значения grecip и hrecip, такие, что
grecip * gx + hrecip * h^ = 1 (mod p).
198 Современные алгоритмы
4.2.2.1. Лемма Гензеля - квадратичный вариант
Существует другая версия алгоритма, которая на каждом
шаге удваивает показатель степени р вместо того, чтобы
увеличивать его на единицу. Мы приведем математическое
обоснование перехода от р к р , а затем - алгоритм в общем
случае. Действительно, g4 s g^ (mod p2), поэтому можно
написать gA = g2 + p2gr где £4 - мера различия между g2 и g
То же имеет место для / и А, так что / = gJi* (mod p )
принимает вид
/2 + Р% - («2 + P%Kh2 + P%) (m0d >-
Поскольку / = g A (mod p ), это уравнение может быть
переписано в виде
fo " So*1? v о
Левая часть этого сравнения нам известна, в то время как
правая часть линейно зависит от неизвестных g и А . Приме-
няя расширенный алгоритм Евклида к полиномам g и А , кото-
2.
рые взаимно просты по модулю р , поскольку они являются
взаимно простыми по модулю р, можно найти полиномы g и А4,
степени которых меньше степеней соответственно полиномов g
2 ^
и А , удовлетворяющие этому сравнению по модулю р . Ограни-
чения на степени полиномов g и А в данном случае
выполняются, поскольку старшие коэффициенты полиномов g и А должны
равняться 1. Таким образом, исходя из полиномов g2 и А2,
определим непосредственно полиномы g4 и А4. Далее можно
продолжать таким же способом для любой степени числа р, с
показателем, равным степени двух, до тех пор, пока р не
станет достаточно велико.
Алгоритм Гензеля - квадратичный вариант 1;
Вход f*gyhvp,k\
Выход gk>h.>мoдyль\
g := gy
А := Ах;
модуль := р;
Компьютерная алгебра 199
цикл для / := 1... flog k]
Различие := f ~ *h JnTLd4M,Z)i
модуль '
grecip,hrecip := РасширенныйЕвклид^ ,h,модуль)',
gcorr := Различие * hrecip (mod. модуль, g);
hcorr :- Различие * grecip (mod модуль, h);
g := g + модуль * gcorr;
h := h + модуль * hcorr,
модуль := модуль ;
выход g,h, модуль;
Этот алгоритм выдает решения по модулю степени р,
которая может быть больше, чем р , но которая при необходимости
всегда может быть уменьшена. Алгоритм РасширенныйЕвклид
должен здесь выдавать значения grecip и hrecip, такие, что
grecip * g + hrecip * h = 1 (mod модуль).
Можно смотреть на метод Гензеля как на разновидность
другого хорошо известного метода с квадратичной сходимостью
- метода Ньютона нахождения простых корней вещественного
уравнения. Этот метод начинает работу с приближения х
корня уравнения F(x) = О и последовательно вычисляет лучшие
приближения с помощью последовательности
Х2п = Хп~ F'(x ) •
В общем случае х~ имеет вдвое больше правильных цифр, чем
х . Если рассматривать g как переменную, a F = f - gh, то
hgnh
So = ё + —тг—» чт0 совпадает с использованным нами
соотношением. В действительности существует теория р-адических
чисел, в которой два числа "близки", если одно из них
отличается от другого на кратное степени р (чем больше степень,
тем ближе целые числа). При таком понятии "расстояния"
квадратичный алгоритм Гензеля в точности совпадает с алгоритмом
Ньютона, а условие простоты корня означает, что полиномы g
и h должны быть взаимно просты. Эту связь изучал Липсон
[Lipson 1976].
Такая квадратичная сходимость очень полезна в случае
вещественных чисел, но менее полезна в данном случае. Для чи-
200 Современные алгоритмы
сел с плавающей точкой в общем случае время выполнения не
зависит от данных, в то время как в нашем случае точность
эквивалентна длине целых чисел, поэтому удвоение точности
соответствует умножению времени выполнения на четыре.
Сравнение линейного метода с квадратичным зависит от деталей
реализации, и нет четкого разделяющего результата в этой
области. Некоторые авторы используют смешанный метод, т.е.
используют квадратичный метод, пока р1 содержится в одном
слове компьютера, а затем переходят на линейный метод.
Существует несколько вариантов метода Гензеля: мы опишем
только некоторые из них. Прежде всего отметим, что можно
работать одновременно с несколькими сомножителями, а не
только с двумя. Достаточно вычислить обратные ко всем
сомножителям (кроме g\) по модулю g для каждого сомножителя
g. В линейном алгоритме это не слишком дорого, поскольку
обратные вычисляются только один раз, но это достаточно
дорого в квадратичном алгоритме.
4.2.2.2. Лемма Гензеля - уточнение алгоритма
Это наблюдение привело к тому, что некоторые специалисты
заметили, что обратные по модулю р связаны с обратными по
модулю р : на самом деле они эквивалентны по модулю р
Можно рассматривать обратный G к полиному g как решение
уравнения Gg = 1 (mod h, p ), а это сравнение может быть
разрешено с помощью метода Гензеля. Как и прежде,
рассмотрим переход от р2 к /?4, предполагая, что £2<?2 = 1 (mod
А , р ) и что наша цель - найти такой полином G , что
g4G4 = 1 (mod /г4, р ). Как и раньше, запишем g4 = g2 + p g4
и G. - G + p2G . Таким образом, требуемое сравнение
преобразовано в
(g2 + P2g4)(G2 + P2G4) = 1 (mod Л4, р4).
Переписываем это в виде
Р2!ГА = 1 - g2G2 - p2g4G2 (mod hv p4).
Согласно рекурсивному определению полинома G , р делит
правую часть этого сравнения, поэтому
Компьютерная алгебра 201
ёг°* m ^Н - 4Gz <mod Л4- А
р
Но Л = Л (mod р ); значит, это сравнение выполняется в
2
действительности по модулю Пир. Но в силу индукции
полином G является обратным к g , и это сравнение может быть
разрешено относительно £д:
G4SG2
Это соотношение дает нам алгоритм Гензеля, использующий
расширенный алгоритм Евклида только в начале. Как обычно,
сформулируем его для случая двух сомножителей.
Алгоритм Гензеля - квадратичный вариант 2;
Вход f,gvhvp,k\
Выход g k, ft k, модуль;
g := gtf
h := Ах;
grecip,hrecip := РасширенныйЕвклид^х,Нх,р)\
модуль := р;
цикл для / := 1... [log /г].
Ошибка := 1 ~ ^i™?d *0(^b2)
мооиль
gcorr := Ошибка * hrecip (mod модуль,g)\
hcorr := Ошибка * grecip (mod модуль,h);
g '.= g + модуль * gcorr;
h := h + модуль * Acorr,
если это не последняя итерация
то Ошаб/са := l-g*g^P^niod КмодЧль2) _ gcorrmgrecip.
grecipcorr := Ошибка * grecip (mod модуль,h);
Ошибка := 1"**АггС^^<1 Н'модЧм2) - hcorr*hrecip;
hrecipcorr := Ошибка * hrecip (mod модуль, g)\
grecip := grecip + модуль * grecipcorr;
hrecip := hrecip + модуль * hrecipcorr;
модуль := модуль ;
выход g,h, модуль;
1 - gpU
2 2
g>
4 2
(mod ft p ).
202 Современные алгоритмы
4.2.2.3. Алгоритм разложения на множители
Используя алгоритм Гензеля из предыдущего раздела, можно
получить алгоритм разложения на множители полиномов с
целыми коэффициентами. Прежде всего мы предполагаем, что
полином / нормирован и свободен от квадратов (если это не так,
то сначала найдем разложение на свободные от квадратов
множители методом, описанным в дополнении "Основные сведения
из алгебры").
В этом алгоритме мы предполагаем, что подалгоритм прос-
тоечисло вырабатывает при каждом обращении новое простое
число, например пробегая список 2, 3, 5, 7, 11, ... . Бер-
лекэмп применяет алгоритм Берлекэмпа, описанный в
предыдущем разделе (или какой-либо из его вариантов) и выдает
список множителей полинома / . Оператор граница JIандау Миньот-
та выдает целое число, такое, что все коэффициенты всех
делителей полинома / меньше этого числа. Из-за знака его
нужно умножить на два. Мы предполагаем наличие алгоритма
Гензеля (названного Гензель), работающего с п сомножителями,
хотя привели только его вариант для двух множителей. Его
детали (линейный/квадратичный) здесь не рассматриваются.
Имеется несколько направлений возможной оптимизации.
Например, если 2 * Комбин = я, то не обязательно
рассматривать все Комбин-подмножества множества Множители,
достаточно рассматривать только половину, поскольку остальные суть
их дополнения.
Можно взять также несколько значений р для того, чтобы
найти такое, которое дает наименьшее число модулярных
множителей. Еще более сложный метод - попытаться извлечь
максимум информации из разложения на множители по модулю
различных р. Например, если / разлагается на два множителя
степени два по первому модулю, а по второму - на один
полином степени 3 и полином степени 1, то можно сделать вывод о
том, что полином / неприводим. Но программирование этих
тестов не очень очевидно. Мюссе [Musser 1978] считает, что
оптимальное число выбираемых значений р равно пяти, но
точное число этих значений зависит от реализации алгоритма.
Следует отметить, что в практических вычислениях дорогой
этап - лемма Гензеля, хотя теоретически перебор всех комби-
Компьютерная алгебра 203
Алгоритм разложения на множители полиномов от одной
переменной
цикл р := простое_число()\
fp := / (mod p)\
пока степеHb(f) * степень^] ) или НОДA ,]' ) * 1;
{gv- >gn) '•= Ьерлекэмп (fp,p);
если п = 1 то выход {/};
& := log B*граница_Ландау_Миньотта(())\
Множители := Гензель(},^ ,...,g },p,k)\
Результат := {};
цикл для каждого элемента g из Множители
если g делит /
то Результат := Результат U {g};
Множители := Множители \ {#};
/г := /г - 1;
Комбин := 2;
цикл пока 2 * Комбин ^ л
для каждого /Сол*б*/«-множества £ из Множители
g := П Л (mod /?*);
й€£
если g делит /
то Результат := Результат U {g};
Множители := Множители \ {g};
п := п - Комбин;
если 2 * Комбин > п то
выйти из двух циклов
Комбин := Комбин + 1;
если Множители * 0
то g := П Л (mod p*);
Результат := Результат U {g};
выход Результат;
наций может требовать экспоненциального времени. Если нужно
проверить несколько комбинаций, то проверка делением может
оказаться слишком дорогой. Аббот и др. [Abbott et al. 1985]
204 Современные алгоритмы
заметили, что можно улучшить этот этап, проверяя делимость
крайних коэффициентов до проверки делимости полиномов.
Описанный нами алгоритм весьма хорошо структурирован - с
главной программой и двумя подпрограммами, т.е. Берлекэмп и
Гензель. Нужно признаться, что современные реализации
значительно сложнее, чем можно предположить по этой идеальной
структуре.
(a) Алгоритм Берлекэмпа дает число множителей (т.е.
размерность базиса собственных векторов) после третьего шага,
в то время как для вычисления самих множителей требуется
значительно больше времени. Следовательно, можно запустить
несколько (по Мюссе [Musser 1978] - пять) экземпляров
алгоритма Берлекэмпа с различными р, остановить их после
третьего этапа, извлечь всю возможную информацию из числа
сомножителей, а затем продолжить перспективные варианты. Это
легко сказать, но гораздо труднее написать на большинстве
современных языков программирования.
(b) Можно во время алгоритма Гензеля проверять, является
ли один из сомножителей (mod pl или р для квадратичного
варианта) истинным делителем полинома [Wang 1983]. Можно
адаптировать метод, описанный для модулярного НОД, и
проверять, что множитель не меняется после шага алгоритма
Гензеля, т.е. добавлять после строк вида
gcorr := Ошибка * hrecip (mod модуль, g)\
строки вида
если gcorr = 0
то если делит^, f) то
Если это случится, то можно удалить его из списка р-ади-
ческих сомножителей и редуцировать /. Это может привести к
изменению границы Ландау - Миньотта, а поэтому и требуемой
степени р. Это означает, что большинство переменных в
алгоритме разложения на множители можно модифицировать
алгоритмом Гензеля: нарушение принципа модульного программирования.
Из этих замечаний вместе с теми, что мы сделали ранее,
следует, что в действительности реализация - это весьма
сложная программа.
Компьютерная алгебра 205
4.2.2.4. Старший коэффициент
В предыдущем разделе мы предполагали, что полином,
который мы хотим разложить на множители, нормированный. Любая
задача разложения полиномов на множители может быть
редуцирована к этому случаю с помощью следующих двух шагов:
[1] Умножить полином / на ап~ , где п - степень полинома
/, а а - его старший коэффициент.
[2] Выполнить подстановку у = х/а .
Поскольку старший коэффициент теперь равен qn, а все
другие коэффициенты делятся на ап~ , то после такой
подстановки полином становится нормированным, не выходя из 2[х].
В действительности полином Y?~axt заменяется полиномом
а.а х = х + а .х + а а пх +...+ а ап.
Существенный недостаток этой подстановки заключается в том,
что при этом коэффициенты, а следовательно, и граница
Ландау - Миньотта растут, и, таким образом, увеличивается
размер всех целых чисел, участвующих в алгоритме. Имеется ли
другой метод?
Напомним, что мы можем рассматривать только
нормированный полином / из-за условия на степени "поправок" g.,
степень которых всегда меньше степени g.. Действительно,
разложение на множители полинома из R[x] определено только с
точностью до единиц (обратимых элементов кольца /?). Для
целых по модулю р любой ненулевой элемент обратим, поэтому
разложение можно домножить на любое число. Основная идея
состоит в том, чтобы с самого начала сделать полином
нормированным по модулю р и выполнять деление, пользуясь
следующим замечанием: если g делит /, то eg делит а /, где
константа с выбрана таким образом, чтобы старший коэффициент
полинома eg равнялся а . Итак, алгоритм модифицируется
следующим образом:
(a) вызов алгоритма Берлекэмп должен выполняться для
нормированного полинома / ;
(b) граница Ландау - Миньотта должна быть умножена на
а , поскольку теперь должны ограничиваться коэффициенты
полинома a g (а не коэффициенты g);
206 Современные алгоритмы
(c) в алгоритме Гензеля нам нужно заменить / на f/a
(вычисленный по модулю подходящей степени р)\
(d) тест делимости вида
если g делит f
должен быть заменен тестами следующего вида:
если a g (mod p ) делит a f
и к результату нужно добавлять примитивную часть полинома
ang (mod pk).
Можно также воспользоваться определением рациональных
чисел по их модулярным значениям, как описано в разделе
"Обращение матрицы" D.1.3.3). Вместо разложения на
множители полинома с целыми коэффициентами можно разлагать
нормированный полином с рациональными коэффициентами. Конечно,
значение р не должно делить старший коэффициент исходного
полинома, который становится знаменателем рациональных
коэффициентов. Обзор этих методов дан Вангом [Wang 1983].
4.2.3. Разложение для нескольких переменных
Разложение на множители полиномов от нескольких
переменных выполняется таким же способом, как и разложение для
одной переменной. Как и в случае НОД, идея редукции по
модулю р заменяется идеей вычисления значений при y:=ry a
переменные заменяются до тех пор, пока мы не придем к
полиному от одной переменной. Мы приведем только краткий
набросок этого алгоритма, поскольку детали его весьма сложны,
хотя принципы его аналогичны тем, которые мы уже изложили.
Нам, конечно, понадобится эквивалент леммы Гензеля. Его
получить довольно просто: всюду в уравнениях и алгоритмах
заменим р на у - г. Имеются линейные и квадратичные
варианты этих алгоритмов, и неочевидно, какие из них лучше, хотя
большинство систем, видимо, использует линейный вариант.
Нам не нужно неравенство в духе Ландау - Миньотта,
поскольку степень делителя всегда меньше степени исходного
полинома. Более того, можно утверждать, что если степень
полинома равна л, то по крайней мере для одного из
сомножителей степень меньше или равна /г/2.
Компьютерная алгебра 207
Остается то же самое понятие плохой редукции. Например,
полином х - у неприводим (поскольку его степень по у равна
1), но он разлагается на множители при любых значениях у,
являющихся квадратами, таких, как у = 1 или у = 4. Здесь
ситуация гораздо лучше, чем в случае полиномов от одной
переменной.
Теорема неприводимости Гильберта. Пусть !(Уу-,у , *<»•••
...,х ) - неприводимый полином кольца 1[у.,...,у , х.,...,х ].
Пусть M(N) - количество значений у.-Ь.,..., у -Ь , для
которых \b.\<N, таких, что полином f(y.,...,y ,x^,..., x ) в кольце
1[х.,..., х ] приводим, т.е. таких, что это значение плохое.
Тогда существуют константы ос и С, такие, что 0 < ос < 1 и M(N) ^
*СB# + 1M~а
Поскольку число возможных значений, обозначаемое через
P(N), равно величине BN + \)S, эта теорема утверждает, чта
Vim mM(N)/ P(N) = 0; другими словами, вероятность того, что
значение "плохое", стремится к нулю, когда целые числа
становятся достаточно большими. На практике плохие, редукции
встречаются весьма редко.
4.2.3.1. Алгоритм
Мы продолжаем предполагать, что полином, который мы
хотим разложить на множители, свободен от квадратов. Если
переменные этого полинома / суть х.,...,х , то мы опишем
алгоритм с параметрами /, г и s; последний из них - индекс
переменной, которую нужно заменить, в предположении, что
х +.,...,х _. уже заменены целыми значениями. Предположим
для начала, что полином /, который мы собираемся разлагать,
нормирован относительно х .
Приведем вариант алгоритма, поднимающий сомножители до
такой степени двучлена х - v, что степень одного из двух
сомножителей меньше или равна этой степени. Такой подход
означает, что нужно проверять все комбинации множителей, а
не только половину из них, но он выглядит более
эффективным, чем переход к" удвоенной степени, в предположении, что
плохие редукции встречаются очень редко.
208 Современные алгоритмы
Алгоритм разложения на множители полиномов от нескольких
переменных
алг разлагать^,r,s);
если s = 0 то выход разлагать-одно{\)\
цикл и := random()\
fv := /x :=,;
пока степень^) * степеньЦъ) или HOM(fv,f'v) * 1;
{gy-»8n} := разлагать^,r,s-l);
если п = 1 то выход {/};
k := степень(},х )/2\
Множители := Гензель(},^г,... ,gn},xs~v,k)\
Результат := {};
цикл для каждого элемента g из Множители
если g делит /
то Результат := результат U {g};
Множители := Множители \ {g}\
п \- п - 1;
Combine := 2;
цикл пока Combine < п
для каждого Combine-множества £ из Множители
g := П Л (mod (х -и)*);
если g делит /
то Результат := Результат U {g};
Множители := Множители \ {g}\
п := п - Combine',
Combine := Combine + 1;
если Множители * 0
то g := П /i (mod (x -a)fe);
пеМножители s
Результат := Результат U {g};
выход Результат;
В этом алгоритме мы предполагаем, что random выдает нам
случайное значение для переменной, выбирая сперва
наименьшие значения. Мы используем разлагать-одно для разложения
на множители полиномов от одной переменной и вспомогатель-
Компьютерная алгебра 209
ный алгоритм Гензель для применения леммы Гензеля,
поднимающей разложение на множители по модулю х - v до разложения
ь ^
по модулю (х - v) .
Алгоритм в том виде, как он здесь представлен,
рекурсивен по переменным: можно представить себе параллельный
вариант, придающий значения всем переменным, кроме одной,
разлагающий получившийся полином, а затем выполняющий
несколько параллельных шагов гензелевского подъема для
нахождения переменных. Параллельные варианты в общем случае
более эффективны, но они более сложны для описания (и
написания!). Описание см. в статье Ванга [Wang 1978].
Имеется три ситуации, когда время выполнения этого
алгоритма, который в общем случае достаточно быстр, существенно
увеличивается. Они описываются (см. например, [Wang 1978])
следующим образом:
A) плохие нули, т.е. невозможность использовать 0 в
качестве значения v\
B) паразитические множители, т.е. множители с плохой
редукцией;
C) старший коэффициент, который мы уже рассматривали в
случае одной переменной.
Плохие нули представляют весьма серьезные практические
затруднения из-за явления, с которым мы уже встречались в
параграфе "Полиномы от нескольких переменных", а именно что
каждый реальный полином от нескольких переменных должен
быть разреженным. Разреженные полиномы остаются
разреженными по модулю хпу но становятся плотными (по переменной х )
по модулю (х - v)n для ненулевого v. В действительности
вычисление значения при ненулевом значении переменной
соответствует подстановке х —> х - v, выполненной после
вычисления значения при х = 0, а мы уже отмечали, что такая
подстановка разрушает разреженную природу полинома и может
сильно увеличить время выполнения. Это не слишком серьезно
для рекурсивного метода, но ужасно для параллельного
метода. Имеется несколько приемов, чтобы обойти эту проблему,
за подробным описанием которых мы отправляем читателя к
Вири [Viry 1982] и Вангу [Wang 1978].
176—14
210 Современные алгоритмы
Эффекты паразитических множителей могут быть смягчены
рассмотрением нескольких значений, как мы уже видели в
случае одной переменной. Но, в рекурсивном случае это
становится весьма дорого: если мы будем использовать два значения
вместо одного, то стоимость вычислений умножится на 2 , а
весьма вероятно, что нам понадобится их гораздо больше
двух. Плохие значения приводят к комбинаторному взрыву, с
которым мы уже сталкивались в случае одной переменной, но
здесь они вызывают также другую проблему. Весьма вероятно,
что ложные множители не являются разреженными, поэтому
выполнение леммы Гензеля обойдется очень дорого.
4.2.3.2. Старший коэффициент
Мы уже видели в случае одной переменной, что можно
избавиться от старшего коэффициента путем замены переменной. Но
это довольно дорого даже для полиномов от одной переменной,
а в настоящем случае станет слишком дорого, потому что
возрастет степень- и разрушится разреженная природа полинома.
Например, предположим, что нам нужно разложить полином
степени пять от четырех переменных. Если старший коэффициент
имеет степень пять, то после подстановки степень будет
равна 25, и весьма маленькая задача превратится в очень
серьезную проблему. Что касается числа членов, то полином
(о;4 + х* + у* + 1)г4 + (ад + х + у + l)(z4 + г3 + г2 + z + 1)
содержит 24 члена (в раскрытом виде), но эквивалентный ему
нормированный относительно z полином содержит их 247 (и
заполняет несколько экранов).
Для случая одной переменной мы предложили другой метод,
основанный на работе с нормированным полиномом,
эквивалентным (по модулю р ) разлагаемому. В данном случае этот метод
не очень эффективен, поскольку обратный (по модулю
(х - v) ) к полиному полином может быть весьма большим,
даже если его можно вычислить (поскольку кольцо функций от
других переменных не обязательно является полем и обращение
может требовать рациональных дробей от остальных переменных
*,...,* J. Поэтому нужно найти другой подход.
Компьютерная алгебра 211
Ванг [Wang 1978] предложил его в параллельной ситуации,
т.е. тогда, когда полином редуцируется к одной переменной.
Полагаем
где ап - старший коэффициент, вызывающий неприятности. Ванг
предложил находить значения v.,..., v , переменных ху...
..., х _., удовлетворяющие трем следующим условиям:
A) a {Vy...yvr_A не обращается в нуль (это
необходимо, чтобы степень редуцированного полинома равнялась
степени исходного полинома);
B) f(Vy...,v _yX ) не имеет кратных множителей (это
необходимо для применения леммы Гензеля);
C) каждый делитель (после подавления кратных
множителей) старшего коэффициента а (*.,...,* А (это - полином
от г-\ переменной), вычисленный при значениях х. =*;.,...
...,jc _4=v ., содержит в качестве множителя простое
число, не содержащееся в значениях других множителей.
. Первые два условия необходимы всегда, третье является
ключом к методу Ванга. Если мы найдем подстановку такого
вида, то мы можем разложить на множители старшие
коэффициенты всех сомножителей полинома /(и-,.'..,и _уХ ). Взглянув
на простые числа, представляющие все сомножители полинома
а , можно определить старшие коэффициенты тех сомножителей
от п переменных, которые соответствуют этим сомножителям от
одной переменной.
Как только мы узнали старшие коэффициенты, можно
потребовать, чтобы сомножители имели эти старшие коэффициенты до
запуска алгоритма Гензеля. В этом случае все поправки
удовлетворяют условию на степени, которое является основным для
этого алгоритма. Таким образом, мы нашли метод, который
может хорошо работать с нетривиальным старшим коэффициентом и
не требует каких-либо преобразований полинома. Стоимость
этого метода складывается из двух компонент:
A) разложения на множители старшего коэффициента (и по
индукции его старшего коэффициента и т.д.);
B) сложности нахождения подстановки, удовлетворяющей
всем этим условиям.
212 Современные алгоритмы
Вторая компонента кажется более существенной, но
исследования в этой области продолжаются.
4.2.4. Другие применения р-адических методов
Чтобы р-адический метод работал, нам нужен алгоритм Ген-
к
зеля, т.е. алгоритм для перехода от решения по модулю р к
решению по модулю р + или р (в случае нескольких
переменных заменяем р на х - v). Мы уже упоминали два
алгоритма такого сорта - уточнение множителей полинома и уточнение
мультипликативного обратного. Ванг [Wang 1981] обобщил
приложения к обратным для вычислений разложения на простейшие
дроби.
В качестве примера другого приложения уточнения
сомножителей рассмотрим теперь р-адический метод вычисления НОД.
Мы сможем сравнить преимущества и недостатки модулярных и
р-адических методов.
4.2.4.1. НОД с помощью р-адического алгоритма
Рассмотрим сначала случай одной переменной и, как и в
начале этой главы, предположим, что А и В - два полинома с
целыми коэффициентами, для которых мы хотим вычислить НОД.
Выберем простое число р, которое не делит оба старших
коэффициента полиномов Л и Б, и пусть F есть НОД полиномов А
(mod p) и В (mod p) (мы используем нижние индексы для
обозначения степени числа р, по модулю которой производятся
вычисления). Таким образом, можно написать следующую
систему:
Л1" FiGi (mod ^ W
Вг = F1H1 (mod p); (B)
В настоящий момент мы рассматриваем случай, когда
НОД(А В) - нормированный полином (например, полиномы А и В
нормированы, или, более общо, НОД их старших коэффициентов
равен единице). Придерживаясь предположения о том, что
редукция хорошая, мы должны уточнять одно из этих сравнений
до тех пор, пока степень р не станет достаточно большой,
чтобы полином F, равнялся истинному значению F. Это дей-
Компьютерная алгебра 213
ствительно можно сделать, если F и G взаимно просты,
применяя лемму Гензеля к уравнению (Л). Или же, если взаимно
просты полиномы F и # , то можно применять алгоритм
Гензеля к уравнению (Б). Что можно сделать, если не реализована
ни одна из этих возможностей?
Есть два решения.
(a) Можно сделать один шаг алгоритма Евклида, прежде чем
перейти к р-адическим методам. Вместо рассмотрения"
полиномов Л и В рассмотрим В и С = остаток(Л, В) (в предположении,
что степень полинома А больше степени В). По алгоритму
Евклида НОД(Л, В) = НОД(Б, С). Подобным образом НОД(Лг Вг) =
= НОД(#1, Сг). Ни один из сомножителей полинома НОД(^ , GJ
или НОД(/=,1, Н ) не может делить НОД(/7 , СУ^л)* поэтому,
после конечного числа шагов мы израсходуем все множители
полинома F и одно из условий алгоритма Гензеля тогда
обязательно будет выполнено.
(b) Можно взять линейную комбинацию полиномов Л и Б,
т.е. D = \А + дБ, и положить / = AGX + [iH . С вероятностью
единица полиномы F и У взаимно просты, и мы можем
работать со сравнением D = F / .
Если мы не можем предполагать, что истинный НОД
нормированный, то можно следовать методу, используемому для
разложения на множители полиномов от одной переменной, умножая
все уравнение на границу для старшего коэффициента, т.е.
НОД старших коэффициентов полиномов Л и Б. Во всяком случае
мы придем к уточнению вида А. = F.G.. Если F. делит А (оба
рассматриваются как полиномы с целыми коэффициентами), то
F, есть НОД полиномов Л и Б. В противном случае редукция
плохая, и нам нужно начинать все сначала. Таким образом,
недостатком р-адического метода является более высокая
чувствительность к плохим редукциям. Этот дефект может быть
смягчен путем поиска нескольких редукций, поскольку хорошая
редукция даст самую низкую степень.
Эти методы были обобщены на полиномы от нескольких
переменных (см. [Yun 1974]). Здесь мы можем отметить одно
преимущество р-адического метода: использование разреженной
природы данных. Чтобы иметь возможность воспользоваться им,
214 Современные алгоритмы
нам нужно преодолеть три проблемы: плохих нулей,
паразитических множителей и старшего коэффициента. Ванг [Wang 1980]
предложил способ подхода к этим проблемам, весьма похожий
на тот, эскиз которого мы изложили для разложения на
множители.
Глава 5
ФОРМАЛЬНОЕ ИНТЕГРИРОВАНИЕ И
ДИФФЕРЕНЦИАЛЬНЫЕ УРАВНЕНИЯ
5.1. ФОРМАЛЬНОЕ ИНТЕГРИРОВАНИЕ
В этом параграфе мы описываем теорию и практику
формального интегрирования. Компьютеры, несомненно, весьма полезны
для численного интегрирования, т.е. для нахождения
определенных интегралов. Но компьютерная алгебра позволяет также
выполнять и формальное интегрирование, т.е. нахождение
интегралов в виде формул. Эти вычисления, которые невозможно
выполнить численно, составляют одно из главных достижений
компьютерной алгебры.
5.1.1. Введение
Мы должны отличать формальное интегрирование от
численного интегрирования. Естественно, численное интегрирование,
заключающееся в присвоении численного значения определенно-
1 2
му интегралу, например J x dx= 1/3, представляло одно из
о
первых применений вычислительных машин. Формальное
дифференцирование было реализовано на ранних этапах развития
вычислительной техники [Kahrimanian 1953], [Nolan 1953], но
первые шаги в области формального интегрирования были
сделаны только Слейглом в работе [Slagle 1961]. Чем
обусловлена эта задержка?
Причину следует искать в существенном различии между
формальным дифференцированием и формальным интегрированием.
Дифференцирование в том виде, как ему обучают в школах,
является алгоритмической процедурой, и знание производных
элементарных функций и следующих четырех правил:
216 Формальное интегрирование
(а ± Ь)' =а' ±Ь',
(аЬ)' =а'Ь + аЬ',
fa-i' а'Ь - аЪ'
Стг) =—-2 •
позволяет нам продифференцировать произвольную данную
функцию. Фактически настоящей проблемой при дифференцировании
является упрощение результата, так как если его не
упрощать, то производная от 2х +1 выдается в виде Ох + 2*1 + О
или, если 2х + 1 представлено как 2х + \х , - в виде
О*1 + 2@(log х)хг + М**1) + 0*° + l@(log х)х° + (М**0).
Напротив, интегрирование выглядит случайным набором
правил и частных случаев. Кажется, что существует только одно
общее правило, S(f + ё) - S f + S ё (Да и эт0 правило не
всегда справедливо - см. соотношение A) в разделе
"Интегрирование рациональных функций" и последующее обсуждение).
Для комбинаций, отличных от сложения (и вычитания), общих
правил не существует. Например, из того, что мы знаем, как
интегрировать ехр х и *2, вовсе не следует, что мы знаем,
как интегрировать их композицию ехр jc2; как мы увидим ниже,
эта функция не имеет более простого интеграла, чем
J* ехр х2 dx. Таким образом, мы изучаем несколько "методов",
таких, как интегрирование по частям, интегрирование с
помощью подстановки, интегрирование просмотром напечатанных
таблиц интегралов и т.д. Кроме того, мы не знаем, какой
метод или какая комбинация методов сработает для данного
интеграла. Так что первые шаги (сделанные Слейглом)
основывались на той же эвристике, которую использует человек.
Этот способ был весьма скоро вытеснен (после работ
Мозеса ([Moses 1967], [Moses 1971b])) истинно алгоритмическими
методами. К настоящему времени существует развитая теория
интегрирования, и мы можем дать только совсем краткий ее
обзор. Если явно не указано противное, то все
интегрирования в этой главе выполняются относительно х.
Компьютерная алгебра 217
Поскольку дифференцирование, несомненно, проще, чем
интегрирование, имеет смысл переформулировать проблему
интегрирования как "обратную задачу" для дифференцирования, т.е.
для данной функции а вместо отыскания ее интеграла Ь мы
ищем функцию Ьу такую, что Ь1 - а.
Определение. Для двух данных классов функций А и В
задана интегрирования из А в В состоит в том, чтобы найти
алгоритм, который для любого элемента а из А либо выдает
элемент Ь из Б, такой, что а = Ь1, либо доказывает, что в В не
существует такого элемента Ьу что а = Ь1.
Например, если А = Q(x) и В = Щх), то ответом для 1/х
должен быть элемент -1/х, в то время, как для 1/х он должен
быть "невозможно". С другой стороны, если В = Q(jc, log x)y
то ответ для 1/х должен быть log x.
Ричардсон [Richardson 1968] доказал теорему,
утверждающую, что проблема интегрирования для А - В = Q(/, % ехр,
log, II) (где II обозначает абсолютную величину) неразрешима.
Но это не должно разочаровывать желающих получить алгоритм
интегрирования: в действительности в этом поле не может
быть решена уже проблема определения, является ли константа
нулем. Поэтому Ричардсон взял неопределимую константу с и
2
рассмотрел функцию се* . Поскольку хорошо известно (позже
2
мы это также докажем), что функция се* не может быть про-
2
интегрирована в Б, мы видим, что се* может быть
проинтегрирована, только если с - О, - вопрос, который не может
быть разрешен. Начиная с этого момента, мы будем
предполагать, что наш класс функций является эффективным, т.е. что
любая проблема равенства в этом классе может быть решена.
5.1.2. Интегрирование рациональных функций
В этом разделе мы имеем дело со случаем А = С(х), где С
- поле констант (в соответствии со сказанным выше
эффективное). Любая рациональная функция / может быть записана в
виде р + q/r, где р, q и г - полиномы, q и г взаимно
просты и степень q меньше степени г. Хорошо известно, что
218 Формальное интегрирование
но в теории алгебраического интегрирования мы должны
соблюдать некоторую осторожность. Вполне возможно, что интеграл
S f + g может быть выражен в явном виде, хотя ни J4 /, ни
Sg в явном виде не выражаются. Примером такого явления
может служить ■ J* xx + (log х)хх: интеграл выражается в виде
хху в то время как оба его слагаемых неинтегрируемы (в
конечном виде). В действительности соотношением A) можно
пользоваться, только если известно, что существуют два из
трех интегралов.
Для любого полинома р существует конечный интеграл; таким
образом, формула A) имеет место при х-р и у-q/r.
Поэтому проблема интегрирования / сводится к задачам
интегрирования р (которая совсем проста) и правильной рациональной
функции q/r. Остальная часть этого раздела посвящена
интегрированию правильной рациональной функции.
5.1.2.1. Наивный метод
Если полином г разлагается на линейные множители, так
что
п п.
г = П (х-а.) \
/=1 1
то мы можем разложить q/r на простейшие дроби (см.
дополнение "Некоторые сведения из алгебры"):
„ " Ь .
£= у I
г А п. •
'=1(*- а.) <
где Ь. - полиномы, степени которых меньше п.. Эти полиномы
можно разделить на х-а., чтобы получить следующее
разложение:
П I
"• ь. .
4 = у у Li_
г Ь fix (x - at)l '
где b. . - константы.
Это разложение можно проинтегрировать и получить
сп п п i о
J r /-i '•' l /-1 /=2 (/- 1)(* -a )'
Компьютерная алгебра 219
Таким образом, мы доказали, что любая рациональная функция
имеет интеграл, который может быть выражен в виде суммы
рациональной функции и логарифмов от рациональных функций с
постоянными коэффициентами. Таким образом, этот интеграл
принадлежит полю С(х, log).
Хотя это доказательство хорошо известно, с
алгоритмической точки зрения оно обладает некоторыми дефектами:
A) В нем требуется, чтобы мы полностью разложили г на
множители, что не всегда удается сделать без присоединения
к С некоторых алгебраических величин (как мы уже убедились,
.работа с такими алгебраическими расширениями весьма сложна).
B) Разложение на множители полинома г достаточно
высокой степени является весьма дорогой операцией, даже если не
требуется переходить к алгебраическим расширениям.
C) Требуется также сложное разложение на простейшие
дроби.
Для иллюстрации того, что существуют интегралы, которые
можно определить без значительных трудностей (с карандашом
и бумагой), рассмотрим
Г 5л:4 + 60*3 + 255л:2 + 450* + 274 =
\хБ + 15jc4 + 85х3 + 225л:2 + 274л: + 120
= \og(x5 + 15л:4 + 85л:3 + 225л:2 + 274л: + 120) =
= log(* + 1) + log(* + 2) + log(jc + 3) + log(* + 4) + \og(x + 5);
Г 5л:4 + 60л:3 + 255л:2 + 450л: + 275 =
}хБ + 15л:4 + 85л:3 + 225л:2 + 274л: + 120
= Ц log(* + 1) + |log(x + 2) + |log(x + 3) + |log(* + 4) + Ц log(x + 5)
(выражение только с одним логарифмом является слишком
длинным, чтобы выписать его здесь: оно содержит логарифм
полинома 120 степени, наибольший коэффициент которого содержит
68 десятичных цифр);
Г 5*4 + 1 -1
J (л:5 + х + IJ (л:5 + х + 1)'
[ 5*4 + UlogOf + Jc+l).
} X + X + 1
Первое равенство представляет собой пример, когда мы можем
220 Формальное интегрирование
разложить знаменатель на множители (достаточно простое
выражение
(х + 1)(х + 2){х + 3)(х + 4)(х + 5)),
но разложение на простейшие дроби весьма утомительно.
Второй пример показывает, что незначительное изменение
подынтегрального выражения может весьма сильно изменить
интеграл. В последних двух примерах знаменатели вообще не
разлагаются над Q, и чтобы разложить их полностью на множители,
нам нужно использовать четыре алгебраических расширения
(или расширение степени 120!). Таким образом, мы можем
сформулировать следующую проблему: Найти алгоритм
интегрирования рациональных функций, который работает только с
теми алгебраическими величинами, которые необходимы для
выражения интеграла.
5.1.2.2. Метод Эрмита
Этот метод [Hermit 1872] позволяет нам определять
рациональную часть интеграла рациональной функции без
использования дополнительных алгебраических величин. Аналогично он
находит производную от суммы логарифмов, которая также
является рациональной функцией с коэффициентами в том же
поле, где лежат коэффициенты функции /. Мы видели, что
множитель знаменателя г, который присутствует в нем в степени л,
появляется в знаменателе интеграла в степени п -1. Это
приводит к мысли воспользоваться разложением на множители,
свободные от квадратов (см. дополнение "Некоторые сведения
из алгебры").
Предположим, что г имеет разложение на свободные от
квадратов множители вида П^г'.. Полиномы г. взаимно
просты, и мы можем построить разложение на простейшие дроби
(см. дополнение "Некоторые сведения из алгебры"):
i= я = 5 Ь.
г П" , r[ /-1 г1. '
Мы знаем, что каждый элемент в правой части обладает
интегралом, поэтому выполняется A), и достаточно
проинтегрировать поочередно каждый элемент. Это выполняется при помощи
тождества Безу (см. еще раз дополнение "Некоторые сведения
Компьютерная алгебра 221
из алгебры"), применяемого к полиномам г. и г'., которые
являются взаимно простыми. Следовательно, существуют а и Ь,
удовлетворяющие соотношению аг . + br'. = 1.
JH
? (arf+ 6r';)
г'.
[(,« Г (<7>/(.-1))'
?,a + (?,6/(М))'
<?,-6/(М)
q.b/(i-\)
. г-1
I
/"I
и нам удалось понизить показатель степени полинома г.. Мы
можем продолжать подобным образом до тех пор, пока
показатель не станет равен 1, когда оставшийся интеграл является
суммой логарифмов.
5.1.2.3. Метод Горовица
Метод Эрмита вполне подходит для вычислений вручную, но
его недостатки заключаются в том, что в нем используется
несколько подалгоритмов (разложение на свободные от
квадратов множители, разложение на простейшие дроби, тождество
Безу), а это требует довольно сложного программирования.
Поэтому Горовиц [Horowitz 1969], [Horowitz 1971] предложил
следующий метод. \
Преследуется та же цель: переписать J q/r в виде //1/^1 +
+ J* Я2^Г2' где 0Ста1°Щийся интеграл после вычисления
представляется в виде суммы логарифмов. Из метода Эрмита и
соображений, изложенных выше, мы знаем, что полином г имеет
те же сомножители, что иг, но с показателями, уменьшенными
на единицу, что полином г не имеет кратных сомножителей и
что его сомножители - это все сомножители полинома г. Из
рассуждений, приведенных в параграфе "Разложение на
множители, свободные от квадратов" (в дополнении "Некоторые све-
222 Формальное интегрирование
дения из алгебры"), следует, что гг = НОД(г, г') и что г2
делит г/НОД(г, г'). Мы можем предполагать, что Я2^Г2 запи~
сано в приведенной форме, поэтому г2 = г/НОД(г, г7).
Тогда
ав Гgi I7, ^ - ^ ^ , ^ ^ ~ qis + ^ri
Г LrJ Г2 Г Г2 Г Г
1 * Г1 Г1 Г2
где 5 = A'i/'2//ri (Деление здесь выполняется без остатка).
Таким образом, наша проблема сводится к чисто
полиномиальной задаче, т.е.
где q, s, г и г известны, а ф и ф нужно определить. Но
степени полиномов q и q меньше степеней тип полиномов
г и г соответственно. Итак, ^ = ]С?1о а/*' и Я2 =
= Еп^-**- Уравнение B) переписывается в виде системы
т+.п линейных уравнений от п + т неизвестных. Более того,
эта система может быть решена, и интегрирование (по крайней
мере эта подзадача) сводится к линейной алгебре.
5.1.2.4. Логарифмическая часть
Два описанных выше метода могут редуцировать
интегрирование произвольной рациональной функции к интегрированию
рациональной функции (скажем, q/r), интеграл которой будет
представлен только суммой логарифмов. Мы знаем, что этот
интеграл может быть вычислен полным разложением на
множители знаменателя, но, как мы уже убедились, это не всегда
необходимо для выражения результата. Настоящая проблема
состоит в том, чтобы найти интеграл без использования
каких-либо алгебраических чисел кроме тех, которые необходимы
для записи результата. Эта проблема была решена Ротштейном
[Rothstein 1976] и Трейгером [Trager 1976] (мы приводим их
решение).
Предположим, что
- выражение для этого интеграла, где правая часть
использует наименьшее возможное алгебраическое расширение. Здесь с.
Компьютерная алгебра 223
- константы, a v. - в общем случае рациональные функции.
Поскольку \og(a/b) = log a - log b> мы можем без потери
общности предполагать, что v. - полиномы. Более того, мы
можем выполнить разложение на свободные от квадратов
множители, которое не добавит каких-либо алгебраических
расширений, и применить правило
logIIpJ=Eilogpr
Далее, поскольку
с log pq + d log pr = (c+ d)\og p+ с log q + d log r,
мы можем предполагать, что полиномы v. взаимно просты, все
еще сохраняя минимальность числа алгебраических расширений
(даже если число логарифмов может измениться). Кроме того,
мы можем предполагать, что все с. различны.
Дифференцируя уравнение C), получим
п С .Vй.
£ = у -J—L . (зм
Из предположения о том, что полиномы v. свободны от
квадратов, следует, что никакой элемент этой суммы не может быть
упрощен, а из предположения о том, что v. взаимно просты,
вытекает, что в этой сумме не может иметь место сокращение.
Отсюда следует, что полиномы v. должны в точности совпадать
с делителями полинома г, т.е. что г = П" «и.. Положим
и = П.^ . v. Продифференцировав затем произведение
полиномов v .у видим, что r/=Ytv/.u.. Избавившись от знаменателей
г и i i
в (З7), получим, что q = Ytc v' и.. Эти два выражения для q
и г' позволяют сделать следующий вывод:
vk = НОД@, vk) =
= HOR(q-Zc.v'.urvk) =
(поскольку все остальные и. делятся на v,)
= HOJ\{q-ckv'kuk, vk) =
(по той же причине)
= НОД(? - ck I V.U., vk) =
= НОДО7 ~ ckr\ vk).
224 Формальное интегрирование
Если / * ky то
НОДО/ - chr\ v{) = НОЩЪс^'м. - c^v'.u.y vt) =
(поскольку все остальные полиномы и. делятся на v.)
= HOR(clv'lul-ckv'lurvl) =
= 1
(поскольку полиномы v. не имеют кратных множителей или
каких-нибудь множителей, общих с произведением и. остальных
полиномов v.). С помощью этих преобразований можно
выполнить следующие вычисления:
HOR(q-ckr',r) = HOIX(q-ckr', П v .) =
i= 1
(поскольку полиномы v. взаимно просты)
= П HOR(q-ckr' yv ) =
/=1 ft t
(поскольку все остальные члены исчезают)
= HOR(q-ckr',vk) =
Следовательно, если мы знаем е., то мы можем вычислить
v.. Более того, с, - это в точности значения у, для которых
НОД(<7~ уг', г) * 1. Но эти значения могут быть получены с
помощью результантов (см. дополнение "Некоторые сведения из
алгебры"). Res (q - yr', г) - это полином от у, равный нулю
тогда и только тогда, когда соответствующий НОД
нетривиален. Следовательно, достаточно вычислить этот полином (для
чего не нужны алгебраические расширения) и для каждого его
корня с. определить vk = HOJ\(q - с.г', г).
5.1.3. Интегрирование более сложных функций
Как только мы выходим из класса рациональных функций, мы
находим функции; интегралы которых нельзя выразить в более
простом виде. Например, мы можем сказать, что
J>2 = /|erf*,
но это будет только новой записью определения функции erf.
Нам могут сказать, что Jl/^=logjc является просто другой
Компьютерная алгебра 225
записью определения функции log, и это будет справедливое
замечание. Но различие заключается в том, что log "хорошо
известен" (ниже этот термин будет уточнен). Другими
словами, какой класс В мы допускаем в качестве возможных
интегралов? Лиувилль предложил следующее определение, которое
кажется вполне подходящим.
Определение. Пусть К - функциональное поле. Функция 0
называется элементарной образующей над К, если
(a) функция 0 алгебраична над /С, т.е. 0 удовлетворяет
полиномиальному уравнению с коэффициентами в поле /С;
(b) функция 0 является экспонентой над К, т.е. в поле К
существует элемент т/, для которого Э'=Т)'6, что является
просто алгебраической записью утверждения 0 = ехр Т)\
(c) функция 0 является логарифмом над К, т.е. в поле К
существует элемент т/, для которого 0/=Т7//т/, что является
алгебраической записью утверждения 0 = log T).
Определение. Пусть К - функциональное поле. Расширение
/С@Г...,0 ) поля К называется полем элементарных функций
над /С, если каждая функция 0 . является элементарной
образующей над К. Функция называется элементарной над К, если она
принадлежит некоторому полю элементарных функций над /С.
Если указание о поле К опущено, то имеется в виду поле
С(х) рациональных функций.
Это определение включает в себя тригонометрические
функции. Например, sin x элементарен (над С(лс)), так как
s\nx = ^(eix + e^x) = ^(Q + l)y
где 0 - это экспонента от ix. Это верно также для обратных
тригонометрических функций: например, tg~ *=log(^).
Для класса элементарных над К функций мы будем использовать
обозначение /C(elem).
В предыдущем разделе показано, что каждая рациональная
функция обладает элементарным интегралом. Более того, этот
интеграл имеет специальный вид суммы рациональной функции
(для вычисления которой нам не нужны никакие алгебраические
расширения) и логарифмов с постоянными коэффициентами. Мы
176—15
226 Формальное интегрирование
увидим, что эта форма ответа имеет место в гораздо более
общем случае, как показывает следующий результат.
Теорема (принцип Лиувилля). Пусть f - функция из
некоторого функционального поля /С. Если f обладает элементарным
над К интегралом, то этот интеграл имеет следующий вид:
J*f = + E ct\ogvr D)
где vQ принадлежит полю К, v . принадлежат расширению К поля
К с помощью конечного числа алгебраических над К констант,
ас.- константы, принадлежащие К'.
Другими словами, если / обладает элементарным над К
интегралом, то она имеет следующий вид:
п С .V'.
/ = 1 i
Эта теорема является фундаментальной для всей теории
интегрирования в терминах элементарных функций. В
дальнейшем мы будем использовать выражение "Мы можем интегрировать
в А с результатами в В" в качестве сокращения от
"Существует алгоритм, который для данного элемента а из А выдает
элемент Ь из В, такой, что а = Ь', или доказывает, что в В
не существует функции с таким свойством". Если В опущено,
то имеется в виду класс Л(е1ет).
5.1.4. Интегрирование логарифмических функций
В этом разделе изучаются функциональные поля,
порожденные одним логарифмом. Мы работаем в таких предположениях:
(i) К - функциональное поле, предполагаемое эффективным,
такое, что мы можем интегрировать в /С;
(и) 8 - логарифм над К, Ъ'=ч\*/ч\ и 9 предполагается
трансцендентным над /С;
(iii) поле К(в) имеет то же поле констант, что и поле /С.
Последнее предположение позволяет избежать трудностей,
которые могут встретиться, если присоединение Э порождает
новые константы. Например, если К = Щх, log x) и 9 =
= log 2x, то поле К(в) содержит константу log 2. Это
предположение, так же как и предположение о том, что элемент 9
Компьютерная алгебра 227
трансцендентен, может быть проверено с помощью структурной
теоремы Риша (см. параграф "Представление трансцендентных
функций"). Наша цель - показать, что мы можем интегрировать
в К(9). Методы в основном аналогичны методам интегрирования
рациональных функций, но имеется несколько мест, где нужно
проявлять осторожность.
5.1.4.1. Лемма о разложении
Мы можем записать нашу функцию / из поля К(в) в виде
р + q/r, где р, q и г - полиномы из /С[в], q и г взаимно
просты, а степень q меньше степени полинома г. Можно ли
тогда рассматривать р и q/r раздельно, т.е. можно ли
применить формулу A)?
Лемма о разложении. Если функция f имеет элементарный
над К интеграл, то и р, и q/r обладают элементарными над К
интегралами.
Доказательство. Из принципа Лиувилля (в виде соотношения
D')) следует, что
п с .v\
Мы можем предполагать, что в этом разложении и ,...,w- -
нормированные полиномы от в, коэффициенты которых
принадлежат полю /С, в то время как v. *,...,v принадлежат полю /О
К • I I* /Ч/Ч/Ч /\/Ч
Более того, мы можем записать v в виде р + q/r, где р, q и
г - полиномы от 9, a q/r - правильная рациональная функция.
При этих предположениях мы используем следующие свойства:
производная от полинома является полиномом; производная от
правильной рациональной функции является правильной
рациональной функцией. Поэтому
» + £ =
г
п С .V1.
•1 v •
ПС .17 .
i=ft+1 I
' k си'.
+ Е ' '
/-1 vt
правильная рациональная функция
228 Формальное интегрирование
Поскольку разложение "полином + правильная рациональная
функция" является единственным (напомним, что 0
предполагается трансцендентной), это соотношение позволяет нам
получить следующие два соотношения:
Р = Р'
п
Е
С .V.
i i
I =«+1 I
Я.,
г
г
+ Е
/ = 1
С .V.
I I
V .
I
Эти два уравнения могут быть формально проинтегрированы.
Получим
г - п
\Р = Р+ Е cAogv
J i = k+\ l l
J£=£+ £ с log и
Эти соотношения доказывают нужный результат, и, более того,
они дают нам дополнительную информацию о форме интегралов.
В следующем разделе мы рассматриваем эти два случая
отдельно.
5.1.4.2. Полиномиальная часть
Предположим, что полином р записан в виде Y"! пЛ.б' и
Г ~ г *"* i =U 1
что полином р записан в виде Y^.^Bti1. Из последнего
соотношения в доказательстве леммы о разложении следует, что
m r n .-w n С .v'.
I А.в1 = Г е в в1] + Е -^ =
у; Б'.е'Ч v iB.e'Q
м
П
Е
С .V.
i i
1=0 /=1 *=й+1 г
Напомним, что элементы и., встречающиеся в этом выражении,
принадлежат полю К. Поскольку 0 - трансцендентный элемент,
можно заключить, что коэффициенты при каждой степени 0 в
обеих частях должны быть равны. Отсюда следует, что п = m
или /z = m + l. Коэффициенты при 0т+ дают нам уравнение
0 = В'_ «, из которого мы получаем, что коэффициент Вп
r ti^ которого
должен быть константой
m+l
Компьютерная алгебра 229
Коэффициенты при 0т (в предположении, что m > 0) дают
уравнение
m m ^ ' пг+1
Это уравнение может быть переписано в интегральной форме:
= -(m + i)Bm+1e + J\,
Из этого уравнения следует, что для А должен существовать
элементарный интеграл, а предположение (i) этого раздела
обеспечивает существование алгоритма нахождения этого
интеграла (или доказательства того, что для этой функции нет
элементарного интеграла, а это означает, что для р его
также нет). Более того, этот интеграл должен иметь специальный
вид: сумма элемента поля К и кратного (с постоянным
коэффициентом) элемента 9. Единственным логарифмом, который может
быть присоединен к /(, чтобы выразить этот интеграл,
является в. (Следовательно, можно оптимизировать это
интегрирование коэффициента А , но при этом значительно усложняется
изложение, и мы не будем здесь этого делать.) Это
интегрирование определяет В ., а также определяет В с точностью
до константы. Обозначим эту константу через Ъ .
Коэффициенты при Gm~ (в предположении, что m > 0) дают
уравнение
А л=В'+т(В+Ь )в7.
т-1 т-1 v т т'
Это уравнение может быть переписано в интегральной форме:
= -тЬ 9+ [А ,-тВ в' . E)
Как и ранее для коэффициентов при 0т, мы можем вывести
отсюда, что для А _.-тВ Q' имеется элементарный интеграл,
который должен принадлежать полю /С, кроме, возможно,
кратного с постоянным коэффициентом элемента в, что определяет
b . Таким образом В л определено с точностью до константы,
m m-1
которую мы обозначим b _..
230 Формальное интегрирование
Подобным образом мы продолжаем процедуру до
коэффициентов при в :
i4 = B^ + i(e1 + 61)e'+ E с-£±
Это уравнение может быть переписано в интегральной форме:
fi0+.j+iC,iogt,. = jM0-(B1 + 61)e') =
Из этого мы заключаем, что AQ - В в' обладает элементарным
интегралом. На этот раз интеграл не обязательно принадлежит
полю /С, и он может содержать новые логарифмы. Коэффициент
при 9 в этом интеграле определяет Ъ . Как и прежде, В
определен с точностью до константы, но это постоянная
интегрирования, которая остается неопределенной. Таким образом,
мы нашли весь интеграл полиномиальной части (или же
показали, что его не существует).
5.1.4.3. Рациональная и логарифмическая части
Из последнего соотношения в доказательстве леммы о
разложении следует, что
Я.,
г
' k С. V*.
+ Е -*—L
I = 1 I
г
Наша задача похожа на соответствующую задачу для
рациональных функций, и решение ее также аналогично. Фактически в
этом случае, как и в случае рациональных функций, работает
метод Эрмита, за исключением того, что нужно принимать во
внимание символ дифференцирования '. В случае полинома от
переменной х
Е а У] = Е /а.*',
в то время как для полинома от переменной в
Е а .в1 = Е ш.е'е'-1* е а'о1.
Хотя эти равенства следует доказывать здесь заново, все
необходимые результаты из дополнения "Некоторые сведения из
Компьютерная алгебра 231
алгебры" остаются справедливыми, и метод Эрмита (или, более
точно, метод Эрмита - Островского, поскольку это обобщение
принадлежит Островскому [Ostrowski 1946]) работает.
Логарифмическая часть вычисляется почти так же, как и в
случае рациональных функций. Мы доказали, что коэффициенты
при логарифмах, которые по теореме Лиувилля должны быть
константами, суть корни полинома Resg (q - yr', г). Однако
в данном контексте мы уже не можем быть уверены в том, что
эти корни являются константами. Возьмем в качестве примера
J* dx/\og ху где q = 1 и г = log x. Тогда
teio.,p-4'10**)
\-Ы\ =х - Ч
х\ х
и корнем этого полинома является у = х, что не является
константой. В этом случае мы можем утверждать, что интеграл
не является элементарным, поскольку элементарный интеграл
должен иметь постоянные коэффициенты. Если мы применим этот
метод к J dx/x log x, то мы найдем полином i/=l, и
интеграл принимает вид log log x.
5.1.5. Интегрирование экспоненциальных функций
Этот раздел посвящен изучению функциональных полей,
порожденных одной экспонентой. Здесь применима та же
процедура, что и в предыдущем разделе, за исключением того, что
разница в поведении логарифмических и экспоненциальных
функций вынуждает нас внести некоторые изменения. Мы
работаем в следующих предположениях:
(i) К - функциональное поле, предполагаемое эффективным,
такое, что мы можем интегрировать в К и умеем решать в К
дифференциальное уравнение у' + fy = g (о решении этой
задачи см. следующий параграф);
(п) в - экспонента над К, В'-х\'В и в предполагается
трансцендентным над /С;
(iii) поле К(В) имеет то же поле констант, что и поле /С.
Последнее предположение позволяет избежать трудностей,
которые могут встретиться, если присоединение в порождает
новые константы. Например, если К = Q(x, exp х) и В =
= ехр(х + 1), то поле К(В) содержит константу е. Это пред-
232 Формальное интегрирование
Положение, так же как и предположение о том, что элемент 0
трансцендентен, может быть проверено с помощью структурной
теоремы Риша (см. параграф "Представление трансцендентных
функций" гл. 2). Наша цель - показать, что мы можем
интегрировать в К@). Методы для рациональной части в
значительной степени аналогичны методам интегрирования
логарифмических функций, но полиномиальная часть существенно
отличается.
Мы должны подчеркнуть, что выбор образующей 0 в
некоторой степени произволен; q также является экспонентой - экс-
понентой от -7). Таким образом, очевидно, что
"полиномиальная часть" должна принимать эту симметрию во внимание. В
предыдущем разделе мы использовали методы разложения на
свободные от квадратов множители и т.д., утверждая, что они
справедливы также для случая полиномов от одной
логарифмической переменной. В случае экспоненциальной переменной они
более не имеют места, например если 0 = ехр х, то полином
р = в не имеет кратных сомножителей, но НОД(р, р') = 0, а
из такой нетривиальности НОД обычно следует, что р обладает
кратным сомножителем. Нетрудно проверить, что эти
утверждения остаются справедливыми, если 0 не делит р.
5.1.5.1. Лемма о разложении
Мы можем записать нашу функцию / из поля K(Q) в виде
p+q/ry где р - обобщенный полином (т.е. £п=_ а.в1)у a q и
г - полиномы из /С[0], такие, что 0 не делит г, q и г
взаимно просты и степень q меньше степени полинома г. Можно ли
•тогда рассматривать р и q/r раздельно, т.е. можно ли
применить формулу A)?
Лемма о разложении. Если функция f имеет элементарный
над К интеграл, то и каждое из слагаемых р и q/r обладает
элементарным над К интегралом.
Доказательство. Из принципа Лиувилля (в виде уравнения
D')) следует, что
п С .V*.
р + £=1,/+ у -JLJL
* И Г О ,и V .
* = 1 I
Мы можем предполагать, что в этом разложении vy-->vk ~
нормированные полиномы от 0 степеней п. (коэффициенты кото-
Компьютерная алгебра 233
рых принадлежат полю /С), в то время как v. *,...,v
принадлежат полю К. Мы можем также предполагать, что ни один из
полиномов v. не делится на 9, так как log 9 = т). Более то-
го, мы можем записать v в виде р + q/r таким же образом,
как мы представляли /. При этих предположениях, пользуясь
тем, что производная от обобщенного полинома является
обобщенным полиномом, а производная от правильной рациональной
функции (такой, что 9 не делит ее знаменатель) - правильная
рациональная функция (такая, что 9 не делит ее
знаменатель), мы видим, что
, + ?
Г~ ~ V п с .v'. ~ n с .v1.
[ г ) / = 1 v i /-Л+1 i-
k с .v\
* = 1 i
В разделе о логарифмических функциях мы отмечали, что две
части этого разложения представляли собой полином и
правильную рациональную функцию. В настоящем случае это
замечание не имеет места. Предположим, что v. (где i^k) запи-
п. п .-1
сан в виде 9 1 + Т\.1п а.в1. Полином v'. также является по-
линомом степени п ., т.е.
i
п.
I
rt.Tj'9 +
rn.-l
■ 2 aiQ
1/-0
и поэтому с .v' ./v. не является правильной рациональной
дробью. Однако
со'.
t i
v :
С .П .7) =
civ'. - ny'v.)
/ _ Г I I ' V
- правильная рациональная дробь. Поэтому мы имеем следующее
разложение:
~ п с .v\ k
Р^-Р'\ Е ПГГ + 11 7V
l=k + \ I l=\
r k civ'. - nj)'v.)
+ E ' ' ' '
• 1 v •
1 = 1 *
обобщенный полином правильная рациональная функция
(где, более того, 9 не делит знаменатель второй части).
Поскольку разложение "обобщенный полином + правильная
рациональная функция" (знаменатель которой не делится на 9)
234 Формальное интегрирование
является единственным (напомним, что в предполагается
трансцендентным), это соотношение позволяет нам получить
следующие два соотношения:
п С .v'. к
р = р' + Е нН"*1»' Е ел
я...
г
r k civ'. - n.rfv.)
+ у -£-J i—lL
• 1 v'.
i = \ i
Формально проинтегрировав второе уравнение, получаем
k
ff =*+ Е с (log v -n n).
В первом уравнении мы запишем р = ЕП=_ AQ1 и Р = Е"=_ /В Я1*
где А. и В. принадлежат полю К. Поскольку элемент 0 транс-
цендентен, мы можем заключить, что коэффициенты при каждой
степени 6 в обеих частях должны быть равны. Отсюда следует,
что п-п' и m = m'. Поскольку производная от B.Q1 равна
(В'. + ft)' В .)б', мы получаем, что А.в1 = (В'. + it)' В.)в( для
i ± 0, откуда вытекает, что все эти последние члены
обладают интегралами. Поскольку рациональная часть также имеет
интеграл, то и оставшийся член, т.е. А , тоже должен иметь
интеграл.
5.1.5.2. Обобщенная полиномиальная часть
Мы только что доказали, что для / * О
где В. принадлежит полю К и удовлетворяет дифференциальному
уравнению В'. + а)' В . = А .. По предположению у нас есть
алгоритм, который решает эту задачу в /С, либо находя В , либо
доказывая, что в поле К нет элемента В., удовлетворяющего
этому уравнению (детали см. в параграфе "Алгебраические
решения О.Д.У.").
Коэффициент А принадлежит полю /С, поэтому его интеграл
можно определить алгоритмом интегрирования в /С. Следует
отметить, что мы должны вычесть из этого интеграла т$]i = \cin->
чтобы получить интеграл от функции /, поскольку эта сумма
была прибавлена в процессе разложения.
Компьютерная алгебра 235
5.1,5.3. Рациональная и логарифмическая части
Из последнего соотношения в доказательстве леммы о
разложении следует, что
г
k civ'. - п.У]'v.)
Е^ 'l-
• 1 P.
l=\ l
Фактически в этом случае, так же как и для рациональных и
логарифмических функций, работает метод Эрмита, поскольку 9
не делит знаменатель г; поэтому действует разложение на
свободные от квадратов множители г=П'?в1г1., и, кроме
того, все полиномы г. взаимно просты со своими производными.
Поэтому мы можем вернуться к случаю, когда полином г не
имеет кратных сомножителей. Ранее мы отмечали, что интеграл
был суммой логарифмов, но в данном случае мы получаем, что
\
п k
?= Е с (logv -пт»
Метод, которым мы воспользуемся для нахождения с. и и.,
аналогичен методу, использованному для рациональных функций
от jc, но требует некоторой технической модификации. Как и
прежде, мы можем предполагать, что v. - взаимно простые
полиномы, свободные от квадратов. Аналогом уравнения C')
является
п civ'. - n.in'v.)
?=£'•,' ' • F)
/= 1 i
В этой сумме не может иметь место сокращение, а это
означает, что полиномы v. должны в точности совпадать с
сомножителями полинома г, т.е. что г = Лп. • v.. Положим и. =
= 11.^.1/.. Мы можем затем продифференцировать произведение
полиномов v. для того чтобы убедиться, что г' =%v'.u..
Избавившись от знаменателей в F), получим, что q =
vk = НОД@, vk) =
= HOJX(q-Ylci(v/i-n.'n'vi)urvk) =
(поскольку все остальные и. делятся на и.)
= НОЩд - ck(v'k - л т)' vk)uk, vk) =
236 Формальное интегрирование
(по той же причине)
= WOJ\(q - c^iv'.- п .!)' v .)u r vk) =
= НОД(<7-сл(г'-т)'гЕ *,).»*).
Если / * &, то так же, как мы делали для рациональных
функций, устанавливаем, что
HOJX(q-ck(r' -V'rln.), 0/) = l.
С помощью этих преобразований получаем
HOR(q-ck(r' -io'rZn.)yr) = vk.
В этой формуле используется сумма £/г., но это просто
степень полинома г, которую мы можем обозначить N. Поэтому
если мы знаем сиу то мы можем вычислить v.. Более того, с.
- это в точности значения у, для которых HOJ\(q - у(г' -
- Nrf г), г) * 1. Но эти значения могут быть получены с
помощью результантов (см. дополнение "Некоторые сведения из
алгебры"). Resg (q - y(r' - Nt)' г), г) - это полином от у,
равный нулю тогда и только тогда, когда соответствующий НОД
нетривиален. Следовательно, достаточно вычислить этот
полином (для чего не нужны алгебраические расширения),
вычислить его корни (для чего алгебраические расширения могут
потребоваться) и для каждого его корня с. определить
vk = HOOLq-ck(r' -N-n'r), г).
Как и в случае логарифмических функций, может случиться,
что корни этого полинома не являются константами, откуда
будет следовать, что функция / не имеет элементарного
интеграла.
5.1.6. Интегрирование смешанных функций
Иногда приходится иметь дело с функциями, не являющимися
чисто логарифмическими или чисто экспоненциальными. Но
условия, наложенные нами на поле К, позволяют интегрировать
смешанные функции, рассматривая их как элементы поля /С@),
где К - функциональное поле, а 6 - логарифм или экспонента.
Например, рассмотрим функцию
Компьютерная алгебра 237
-ex\og2x + log х { 4е*/ V } + е* + е2*
1 + 2е* + е2*
Задача. Эта функция принадлежит функциональному полю
Щх, ех, log х). Поэтому мы можем положить К = Щх, ех), 9 = log x,
и применить теорию, изложенную в разделе "Интегрирование
логарифмических функций". Как элемент поля К(9) эта функция
является полиномом от 8
М + 2ех + e2xJ U(l + **) J 1 + е*'
Следуя методу, изложенному в разделе "Интегрирование
логарифмических функций - полиномиальная часть", мы должны
проинтегрировать коэффициент при старшей степени 9, т.е.
-ех/(\ + ех) . Это интегрирование имеет место в поле К.
Подзадача 1. Это интегрирование имеет место в поле Цф)У
где ф=ех и L = Q(x). Функция, которую нужно
проинтегрировать, является правильной рациональной функцией, и, более
того, 0 не делит знаменатель. Поэтому применима теория
раздела "Интегрирование экспоненциальных функций -
рациональная и логарифмическая части". Разложение на свободные от
квадратов множители выполняется совсем просто, и нам нужно
только применить метод Эрмита к q/r , где q^-ф и г = 1 + ф.
Получаем, что г' -ф (символ ' всегда обозначает
дифференцирование относительно х). К г и г' нужно применить
тождество Безу, что в данном случае сделать совсем просто:
A)г + (-1)г'=1.
Подставляя эти значения в метод Эрмита, мы получаем
интеграл дроби -q(-\)/(\ + 0), а остаток полностью сокращается.
Таким образом, решением этой подзадачи является -0/A + 0).
В первоначальной задаче мы получили таким образом один
из членов интеграла, т.е. -9 ех/A + ех). Но производная от
этого члена дает нам члены, содержащие 91. Коэффициент при
в1, который нужно проинтегрировать в соответствии с
формулой E) раздела "Полиномиальная часть", задается выражением
238 Формальное интегрирование
А1~2в'В2, где Лг - исходный коэффициент, а #2 - решение
подзадачи 1. После этих вычислений получаем
2 2 -е* ^2
х{\ + ех) х 1 + ех х
Интеграл от этой функции должен дать нам коэффициент при 0
в интеграле (и, возможно, определить постоянную
интегрирования в предыдущей подзадаче).
Подзадача 2. Теоретически это интегрирование выполняется
в поле Цф), где ф = ех и L = Щх), но нетрудно заметить,
что в действительности ответом является 2 log x.
Вообще интегралы, задаваемые подзадачами, должны
принадлежать полю /С, но, как мы видели, они могут содержать 8.
Именно такой случай налицо здесь, так как интеграл равен
28. Отсюда следует, что выбор постоянной интегрирования в
последней подзадаче был плохой и что ее нужно увеличить на
2/2 = 1. Таким образом, текущее состояние задачи таково,
2 1
что мы проинтегрировали коэффициенты при 8 и 8 и нашли,
что интеграл должен быть равен 8 A - ех/(\ + е*)), а это
выражение приводится к более простому виду 8 /A + е ). Нам
осталось проинтегрировать коэффициент при 8°, т.е. ех/A + ех).
Подзадача 3. Это интегрирование выполняется в поле Цф),
где ф = ех и L = Щх). Функция, которую мы хотим
проинтегрировать, не является правильной рациональной функцией и
должна быть переписана в виде 1-1/A + ех). Интегрируя 1,
получаем х (плюс постоянную интегрирования, являющуюся
константой интегрирования всей задачи). Оставшаяся часть
является правильной рациональной функцией q/r, где q = -1 и
г = 1 + ех. Функция г не делится на ех и не имеет кратных
множителей, поэтому ее интеграл должен быть суммой
логарифмов. В соответствии с теорией раздела "Интегрирование
экспоненциальных функций - рациональная и логарифмическая
части" нам нужно вычислить
Res0(?-Mr'-WO, О,
где W=l (степень полинома г) и 1)=х. Это переписывается
в более простом виде, как Res^ (-1 + у, 1 + ф)> т.е. -1 + у.
Компьютерная алгебра 239
Этот полином имеет корень у=\л который действительно
является константой. Поэтому интеграл от рациональной части
равен log A + ех) - х. Слагаемое -х сокращается с х из
другой части, и мы получаем log A + ех).
Таким образом, решением задачи является
logM—^— 1 + log A+ е*).
Ч + е J
Этот кажущийся достаточно сложным метод разложения
интеграла в ряд вложенных, но простых задач, является весьма
общим. Он приводит к следующему результату.
Теорема [Risch 1969]. Пусть К=С(х, вув2, ... ,6п) -
функциональное поле, где С - поле констант и каждый элемент
в. является либо логарифмом, либо экспонентой элемента из
поля C(x,Q.,Q2,...,Q..) и трансцендентен над С(х,в.,в2,...
...,8...). Кроме того, подполе констант поля К должно
совпадать с С. Тогда существует алгоритм, который для данного
элемента f поля К либо выдает элементарную над К функцию,
являющуюся интегралом от f, либо доказывает, что для f нет
элементарного над К интеграла.
Доказательство проводится индукцией по п (п = 0
соответствует интегрированию рациональных функций) с
использованием теории, изложенной в разделах "Интегрирование
логарифмических функций" и "Интегрирование экспоненциальных
функций". Эту теорему можно также применять к
тригонометрическим функциям (и их обратным), так как они могут быть
выражены как экспоненты (или как логарифмы).
5.1.7. Интегрирование алгебраических функций
Это весьма трудная проблема, которой интересовались
многие великие математики и которая изучается в курсе
^алгебраической геометрии. После некоторого продвижения в этой об-
л^асти стало возможным дать ответ [Davenport 1981] для этой
задачи, т.е. указать алгоритм, который для данной
алгебраической над Щх) функции f либо выдает элементарную над Q(*)
функцию, являющуюся ее интегралом, либо доказывает, что
такой функции не существует.
240 Формальное интегрирование
Этот весьма сложный алгоритм, и Дэвенпорт
запрограммировал только его часть, когда / определена через квадратные
корни и геометрические проблемы не являются слишком
сложными . Позднее Трейгер [Trager 1985] предложил другие
методы, которые кажутся более эффективными, но они до сих пор
не запрограммированы. Фактически эта задача остается на
переднем крае наших математических знаний и возможностей
систем компьютерной алгебры. Этот алгоритм может быть
использован вместо алгоритма интегрирования рациональных
функций как исходная точка для индукции в теореме Риша.
Отсюда получается следующий результат.
Теорема [Davenport 1984а]. Пусть К = С(х,у,в ^,Q2,... ,Qn)
- функциональное поле, где С - поле констант, у алгебраинен
над С(х), а каждый элемент 0. является либо логарифмом,
либо экспонентой элемента из поля C(x,y,Q *,62,...,6 ._^) и
трансцендентен над С(х,у, Q.,Q2,...,Q. ^). Кроме того,
подполе констант поля К должно совпадать с С. Тогда существует
алгоритм, который для данного элемента f поля К либо выдает
элементарную над К функцию, являющуюся интегралом от f,
либо доказывает, что для f нет элементарного над К
интеграла.
Важно отметить, что эта теорема не допускает
рассмотрения алгебраических расширений, которые зависят от
логарифмических или экспоненциальных функций. Эта проблема остает-
»2)
ся нерешенной .
5.1.8. Интегрирование неэлементарных функций
Мы процитировали определение Лиувилля слова
"элементарный" и дали набросок теории интегрирования таких функций,
где интегралы также должны быть элементарными. Что произой-
Более точно, хотя несколько технически: если нужно
вычислять логарифмическую часть, то алгебраическая функция
должна быть определена над алгебраической кривой рода не
более 1.
2) С момента написания книги в решении этой задачи
получено значительное продвижение. См., например, [37]. - Прим.
перев.
Компьютерная алгебра 241
дет, если мы избавимся от этого ограничения? Прежде всего
мы больше не сможем пользоваться принципом Лиувилля.
Недавно Зингер, Сондерс и Кавинесс [Singer, Saunders, Caviness
1981], [Singer, Saunders, Caviness 1985] обобщили этот
принцип, но обобщение весьма сложное и применяется только к
весьма ограниченному классу функций, хотя этот класс и
шире, чем элементарные функции. Фактически в дополнение к
логарифмам и экспонентам допускается конечное число функций
типа Е или L.
Определение. Функция имеет тип Е над полем К, если ее
можно представить в виде J #'G(exp (R(u))), где и € /С, a G
и R - рациональные функции с постоянными коэффициентами.
Функция имеет тип L над полем К, если ее можно представить
в виде S и' H(\og(S(u))), где и € /С, а Н и S - рациональные
функции с постоянными коэффициентами, такие,ч что степень
числителя функции Н не более чем на 1, превосходит степень
знаменателя функции Я.
Например, функция erf х имеет тип Е над £(х) с и = х и
рациональными функциями G(y) = V2/n у и R(y) = -у .
Аналогично
erf log x = Г (y/TTn/x) exp (-log2*)
имеет тип Е над (C(jc, log x). Функция Ei(jc) = J4 ex/x не
является функцией типа Е над С(*), потому что требуемая
функция G(y)y а именно у/х, имеет коэффициенты, не являющиеся
константами. Функция Li(x) = J41/log x имеет тип L над С(*)
при и - х, Н(у) = \/у и S(y) = у. Функция Е\(х) имеет тип L
над £(х,ех), поскольку она может быть записана в виде Li ex.
Чтобы интегрировать, в компьютерной алгебре требуется
несколько больше, чем принцип Лиувилля, - нужен также и
алгоритм. В настоящее время имеются алгоритмы, обобщающие
теорему Риша, допуская тот же самый класс исходных функций,
но более широкий класс интегралов, т.е. функции, которые
"элементарны с erf" или "элементарны с Li (и Ei)" ([Cherry
1983], [Cherry 1985], [Cherry, Caviness 1984]). Но в
настоящее время эта область является предметом интенсивного
изучения, и можно ожидать открытия новых алгоритмов.
176—16
242 Формальное интегрирование
5.2. АЛГЕБРАИЧЕСКИЕ РЕШЕНИЯ О. Д. У.
Задачу интегрирования можно рассматривать как решение
простейшего дифференциального уравнения у' - /. В этом
параграфе приводится ряд сведений о поведении формальных
решений некоторых линейных дифференциальных уравнений.
Замечания, сделанные в предыдущем параграфе о различии между
формальными и численными решениями, остаются справедливыми
в этом случае, так же как и замечания о различии между
эвристическим и алгоритмическим подходами.
5.2.1. Уравнения первого порядка
Здесь мы рассматриваем уравнение у' + fy- g. В разделе
об интегрировании экспоненциальных функций уже
формулировалась задача нахождения алгоритма, который для данных
функций / и g из некоторого класса А либо находит функцию (/,
принадлежащую данному классу функций В, либо доказывает,
что в данном классе В не существует элемента,
удовлетворяющего данному уравнению. Из соображений простоты мы будем
рассматривать только случай, когда В - класс элементарных
над А функций.
Хорошо известен следующий метод решения уравнений этого
типа: воспользоваться подстановкой y=ze"^'. Получаем
g = У' + fy - z'е ~ z\e~ + fze* * = z* e~*'.
Таким образом, z' - ge^' и
y=e-fffgeff. A)
В общем случае этот метод нахождения у алгоритмически
неудовлетворителен, поскольку алгоритм интегрирования,
описанный в предыдущем параграфе, переформулирует этот
интеграл в виде дифференциального уравнения, с которого мы
начинали.
5.2.1.1. Проблема Риша
Таким образом, нам нужно найти прямой метод решения этих
уравнений. Риш [Risch 1969] нашел такой метод для случая,
когда А - поле рациональных функций или расширение (с по-
Компьютерная алгебра 243
мощью трансцендентного логарифма или трансцендентной
экспоненты) некоторого поля, над которым «эта задача может быть
решена. Ниже приводится алгоритм для случая рациональных
функций; для других случаев главные черты остаются теми же,
но детали становятся гораздо более сложными. Приводимое
здесь решение grosso modo совпадает с решением Риша [Risch
1969]; имеется другое решение, принадлежащее Дэвенпорту
[Davenport 1985c].
Задача может быть сформулирована следующим образом: для
двух данных рациональных функций fug найти рациональную
функцию у, такую, что у' + fy = g, или доказать, что такой
функции нет. Функция / удовлетворяет условию, что exp(J/)
не является рациональной функцией, т.е. / - не константа и
ее интеграл не является суммой логарифмов с рациональными
коэффициентами. Задача решается за два шага: сведение ее к
чисто полиномиальной задаче и решение получившейся задачи.
Пусть р - неприводимый полином. Пусть а - наибольшее
целое число, такое, что р делит знаменатель функции у; это
мы можем записать в виде ра | den(i/). Пусть g и у таковы,
что рг | den(y) и р* | den(g). Таким образом, можно
вычислить степени полинома ру делящие члены уравнения
У' + fy = £>
сх+1 <x+g у
которое требуется решить.
Возможны три случая.
0) 3 > 1. В этом случае должны сокращаться члены в
полиномах ра+^ и /?^, т.е. должно выполняться равенство oc^-g.
B) g < 1 (другими словами, g = 0). В этом случае должны
сокращаться члены в полиномах ра+ и р*> т.е. должно
выполняться равенство а = у - 1.
C) g = 1. В этом случае могут сокращаться члены в левой
части и тогда степень полинома /?, которая делит знаменатель
функции у'+ fy, меньше, чем ос+1. Если сокращения не
происходит, то действительно a = y-l = y-g. Итак,
предположим, что происходит сокращение. Разложим / и у на частич-
ные дроби относительно р: f = /Vpp + / и у = Y/p + у, где
244 Формальное интегрирование
степени полинома р, которые делят знаменатели функций / и
«/, не превосходят /3-1 = 0 и а - 1.
У ГУ ра+1 Ра Ра+1 Ра р 1у-
Для того чтобы в этом уравнении выполнялось сокращение,
нужно, чтобы полином р делил -ccp'Y + FY. Но полином р
неприводим и степень полинома Y меньше степени р, поэтому р и
Y взаимао просты. Отсюда следует, что р делит ар7 - F. Но
степени полиномов р' и F меньше степени полинома р, а
единственным полиномом, степень которого меньше степени р, и
который делится на р, является нуль. Поэтому QL-F/p'.
Мы доказали следующий результат:
Лемма [Risch 1969]. а ^ max(min(y - 1, г - 3), F/p'), где
последний член принимается во внимание, только если C=1 и
этот член равен положительному целому числу.
В действительности разложение знаменателя на
неприводимые множители не является необходимым. Достаточно найти
свободные от квадратов попарно взаимно простые полиномы р.
и неотрицательные целые числа |3. и у., такие, что den(/) =
Р/ */ ' '
= Пр. и den(g) = TIp.. При C=1, теоретически, мы
должны полностью разложить р на множители, но достаточно с
помощью рассуждений, аналогичных алгоритму Трейгера для
вычисления логарифмической части интеграла от рациональной
функции, найти целые корни результанта Res (F - ур', р).
Поэтому мы можем ограничить знаменатель функции у
полное,
номом D = Tip.1 так, что y-Y/D, где Y - полином. Возможно
избавиться в нашем уравнении от знаменателей и перейти к
уравнению RY' + SY = Т.
Пусть а, /3, у и 5 - степени соответственно элементов У,
R, S и Т. Имеется три возможности
J Читатель может заметить, что этот анализ весьма похож
на анализ знаменателя. Эта аналогия не является результатом
чистой случайности - в действительности величина л на
которую степень Y больше степени Д - это кратность х в
^знаменателе функции у, после выполнения преобразования х = 1/х.
Это явление анализируется в работах [Davenport 1984a, b].
Компьютерная алгебра 245
A) /3-1 > у. В этом случае члены степени ос + |3-1
должны сократиться с членами степени б, поэтому а = б + 1 - C.
B) ft-1 < У- В этом случае члены степени а + у должны
сократиться с членами степени б, поэтому а = б - у.
C) 6-1 = у. В этом случае члены степени а + £ -1 в
левой части могут сократиться. Если этого не происходит, то
остается в силе предыдущий анализ и а = б + 1 - /3. Для
анализа сокращений запишем У = Х/7=0 у .х1, /? = J7^e0 г .д?' и
S = E-=n 5 •*'• Коэффициенты при членах степени 0C.+ J3-1
равны arg*/a и sy#cr Сокращение эквивалентно условию
a=-W
Мы доказали следующий результат:
Лемма [Risch 1969]. a ^ max(minF - у, б + 1 - C), -s /г^), где
последний член принимается во внимание, только если |3 =* у + 1
ы эгог **л£« равен положительному целому числу.
Определение коэффициентов у. полинома Y - задача
линейной алгебры. В действительности система уравнений
треугольная и легко решается.
5.2.1.2. Теорема Дэвенпорта
Тем не менее, преобразование дифференциального уравнения
в уравнение A) дает очень интересный результат.
Теорема ([Davenport 1984c]; см. также [Davenport
1985а]). Пусть А - класс функций, содержащий f и g, и
предположим, что уравнение у' + fy = g имеет элементарное над А
решение. Тогда
либо функция е*' алгебраична над А, и в этом случае
теория интегрирования должна давать возможность определить у\
либо у принадлежит 1
Доказательство. Если функция е*' не алгебраична над Л,
то она трансцендентна над А Положим B = A($f). Либо
функция е^' алгебраична над Б, либо она трансцендентна над В.
Единственная возможность для того, чтобы функция е^' была
алгебраичной над В, состоит в том, чтобы J*/ была суммой
логарифмов с рациональными коэффициентами. Но в этом случае
функция е^ ' алгебраична над А.
246 Формальное интегрирование
Единственная оставшаяся возможность состоит в том, чтобы
функция е^' была трансцендентной над В. Мы предполагали,
что функция у элементарна над А и a fortiori у элементарна
над й. Частное двух элементарных функций является
элементарной функцией, и, значит, функция
уе = Г ge
элементарна над В. Но из леммы о разложении для интегралов
экспоненциальных функций следует, что этот интеграл имеет
вид he^\ где h принадлежит В. Тогда уеВ и у является
решением некоторой задачи Риша - в действительности задачи
Риша для исходного уравнения у' + ]у- g. Но / и g
принадлежат Л, поэтому решение задачи Риша принадлежит тому же
классу.
Фактически эта теорема утверждает, что существуют только
два способа вычисления элементарного решения
дифференциального уравнения первого порядка: либо мы находим решение
однородной задачи, либо мы находим решение в том же классе,
в котором лежат коэффициенты. Более того, достаточно искать
однородные алгебраические решения над классом, определенным
коэффициентами.
5.2.2. Уравнения второго порядка
Каждое уравнение первого порядка имеет, как мы видели,
решение, которое может быть выражено в терминах интегралов
и экспонент, и интересная задача об этих уравнениях
заключается в том, чтобы определить, является ли решение
элементарным. Для уравнений второго порядка уже не очевидно (и
даже неверно), что каждое решение может быть выражено в
терминах интегралов и экспонент. Чтобы иметь возможность
сформулировать точные теоремы, нам понадобится уточнить
определение этого понятия.
Определение. Пусть К - функциональное поле. Функция в
является лиувиллевой образующей над /С, если выполняется
одно из следующих условий:
(а) она алгебраична над /С, т.е. 9 удовлетворяет
полиномиальному уравнению с коэффициентами из /С;
Компьютерная алгебра 247
(b) 9 является экспонентой над К, т.е. в К имеется
элемент % такой, что 9'=Т}'9 (это является алгебраическим
способом записи утверждения 9 = exp tj);
(c) 9 является интегралом над /С, т.е. в К имеется
элемент 7), такой, что 9' =7) (это является алгебраическим
способом записи утверждения 9 = S1)).
Определение. Пусть К - функциональное поле. Расширение
/С(9Г ..., 9 ) поля К называется полем лиувиллевых функций
над /С, если каждая 9. является лиувиллевой образующей над
/С . Функция называется лиувиллевой над К, если она
принадлежит полю лиувиллевых функций над /С.
Если указание о поле К опускается, то подразумевается
поле С(х) рациональных функций.
Это определение является более общим, чем определение
"элементарности", поскольку любой логарифм является
интегралом. Как мы уже отмечали, оно включает тригонометрические
функции. Мы пользуемся обозначением /C(liou) для класса
лиувиллевых над /С функций.
Теорема [Kovacic 1977, 1986]. Существует алгоритм,
который для данного линейного дифференциального уравнения
второго порядка у" + ау' + Ьу = 0, где а и Ь - рациональные
функции от х,
либо находит два лиувиллевых решения, таких, что любое
решение является линейной комбинацией этих решений с
постоянными коэффициентами,
либо доказывает, что лиувиллевых решений (кроме нуля) не
существует.
Эта теорема и получающийся алгоритм достаточно сложны, и
мы не можем приводить здесь все детали. Известно, что
преобразованием z = era у это уравнение приводится к виду
z" + (Ь - а2/А - a' /2)z = 0. Ковачич доказал, что может
быть четыре разных случая решения этого уравнения.
' Обычно в определении поля лиувиллевых функций
требуется, чтобы 9. были лиувиллевыми образующими над
/С(9 ,...,9. ). - Прим. перев.
248 Формальное интегрирование
A) Имеется решение вида е^\ где / - рациональная
функция. В этом случае дифференциальный оператор факторизуется,
и мы получаем уравнение первого порядка, решения которого
всегда лиувиллевы.
B) Первый случай не выполняется, но имеется решение
вида е^\ где / удовлетворяет квадратному уравнению с
рациональными функциями в качестве коэффициентов. В этом случае
дифференциальный оператор факторизуется, и мы получаем
уравнение первого порядка, решения которого всегда
лиувиллевы.
C) Два первых случая не выполняются, но имеется
ненулевое лиувиллево решение. В этом случае любое решение
является алгебраической функцией.
D) Никакое ненулевое решение не является лиувиллевым.
Примером применения алгоритма Ковачича является
уравнение
,„ _ 4*6 - 8х5 + 12х4 + 4х3'+ 7х2 - Бх + 1
У ~ .4 Уу
Ах
одно из решений которого - это
^log х + logU2 - 1) + \х- - 1 - 1/х
У =е
= х-3/2(х2-1)ех2/2-*-Х/\
Метод Ковачича позволяет также доказать, что уравнение
Бесселя, которое можно записать в виде
имеет элементарные решения, только когда 2п - нечетное
целое число, и при пу удовлетворяющем этому условию, найти
решения. Этот алгоритм реализован в системе MACSYMA (к
сожалению, эта реализация не поставляется с системой
MACSYMA) и, по-видимому, работает достаточно хорошо [Saunders
1981].
В случае уравнений второго порядка могут быть
использованы те же методы, которые использовались для решения
уравнений первого порядка (см. [Davenport 1984c] и [Davenport
Компьютерная алгебра 249
1985а]), но в действительности результаты являются гораздо
более общими и будут рассматриваться в следующем разделе.
5.2.3. Уравнения произвольного порядка
Ситуация с уравнениями произвольного порядка,
теоретически так же понятна, как и для уравнений второго порядка,
хотя алгоритмы уже не столь ясны.
5.2.3.1. Однородные уравнения
Рассмотрим сначала обобщение алгоритма Ковачича.
Теорема [Singer 1981]. Существует алгоритм, который для
данного линейного дифференциального уравнения произвольного
порядка, коэффициенты которого - рациональные или
алгебраические функции,
либо находит лиувиллево решение,
либо доказывает, что его нет.
Если этот алгоритм находит лиувиллево решение,
дифференциальный оператор (предполагается, что он имеет порядок п)
разлагается в произведение оператора первого порядка,
решением которого является найденное решение, и оператора
порядка п -1, коэффициенты которого - также рациональные или
алгебраические функции. Алгоритм можно рекурсивно применять
к последнему для нахождения всех лиувиллевых решений.
Этот алгоритм является более общим, чем алгоритм
Ковачича для уравнений второго порядка, не только из-за обобщения
порядка, но также потому, что он допускает в качестве
коэффициентов алгебраические функции. Однако пока никто не
реализовал этот алгоритм, и кажется, что он весьма сложен и
длинен.
Сингер [Singer 1985] нашел также алгоритм, подобный
предыдущему, для поиска решений, которые могут быть
выражены в терминах решений уравнений второго порядка и
лиувиллевых функций. И этот алгоритм тоже выглядит весьма длинным.
5.2.3.2. Неоднородные уравнения
Здесь мы приводим обобщение теоремы Дэвенпорта,
сформулированной для линейных уравнений первого порядка. По
существу, возможны три случая:
250 Формальное интегрирование
A) имеется элементарное решение;
B) имеется неэлементарное лиувиллево решение;
C) нет лиувиллевых решений.
Следующая теорема позволяет нам отличать первый случай
от двух последующих путем поиска алгебраических решений
однородного уравнения.
Теорема 1 [Singer, Davenport 1985, 1986]. Пусть А -
класс функций, содержащий коэффициенты линейного
дифференциального оператора L, пусть g - элемент класса А, и
предположим, что уравнение Цу) = g имеет элементарное над А
решение. Тогда
либо уравнение Цу) = 0 имеет алгебраическое над А
решение',
либо у принадлежит А.
Эта теорема является следствием такого результата,
который позволяет нам отличать первые два случая от последнего
при помощи поиска лиувиллевых решений (специального вида)
над А.
Теорема 2 [Singer, Davenport 1985, 1986]. Пусть А -
класс функций, содержащий коэффициенты линейного
дифференциального оператора L, пусть g - элемент класса А, и
предположим, что уравнение Цу) = g имеет лиувиллево над А ре
шение. Тогда
случай 1) либо уравнение Цу) - 0 имеет решение е^z, где
элемент z алгебраичен над А,
случай 2) либо у принадлежит А.
Более того, имеется алгоритм для случая, когда А - поле
алгебраических функций, который определяет, какой из
случаев имеет место в теореме 2, и сводит проблему теоремы 1 к
некоторой задаче алгебраической геометрии. Этот алгоритм
основан на алгоритме Сингера (или, в некоторых случаях, Ко-
вачича) для однородных уравнений. Но это - совсем новый
сюжет, в котором все еще имеется много проблем, ожидающих
решения, и алгоритмов, которые нужно реализовывать и улучшать.
Решения дифференциального уравнения в конечном виде,
если они существуют, очень полезны. Но у большинства диффе-
Компьютерная алгебра 251
ренциальных уравнений в физике таких решений нет. Именно
поэтому большое значение имеет следующий параграф, в
котором мы изучаем метод определения для таких уравнений
решений в виде рядов.
5.3. АСИМПТОТИЧЕСКИЕ РЕШЕНИЯ О.Д.У.
5.3.1. Мотивация и история
Цель данной части книги - описать некоторые новые дс^лп
жения в области алгоритмических методов, необходимых для
"решения" линейных дифференциальных уравнений. Отметим, что
здесь под "решением" понимается "решение в виде ряда".
Мы будем рассматривать только уравнения вида
an(x)(y)W + an_,( W) + ... + а0(х)у = 0, A)
где всегда будет предполагаться, что а. - полиномы с
комплексными коэффициентами (это предположение будет
обсуждаться ниже) без общих делителей.
Разумеется, дифференциальные уравнения вида A)
исследовались в бесчисленном множестве работ. Постоянно, со
времени первых работ Гаусса 1812 г. и работ Куммера 1834 г.,
большинство крупнейших математиков занимались решением этих
уравнений в С. Чтобы назвать только самые значительные
имена, нам необходимо упомянуть статьи Римана A857),
Вейерштрасса A856), Коши A835 - 1840), прежде чем перейти
к фундаментальным работам Фукса A865), Фробениуса A873),
Пуанкаре A881), Биркгофа A909). Сегодня эти исследования
с теоретической точки зрения возобновлены Делинем A976),
Мальгранжем A980) и Рамисом A981).
Почему уравнения вида A) представляют такой интерес?
Эти исследования выполнялись под руководством Деллы
Дора в Группе компьютерной алгебры Лаборатории TIM3
Института IMAG в Гренобле, членами которой являются Дикресенцо,
Хилали, Турнье, Вацнер, Цейли-Найид. Работа выполнялась в
тесном сотрудничестве со Страсбургским университетом (Ра-
мис, Ричард, Томан) и с Институтом Фурье в Гренобле
(Дюваль, Мальгранж).
252 Формальное интегрирование
Есть много ответов:
1) несомненный теоретический интерес,
2) огромный практический интерес - приведем только
несколько приложений линейных дифференциальных уравнений -
решение путем разделения переменных задач с частными
производными,
решение задач о собственных значениях (задачи Штурма -
Лиувилля),
генерация многочисленных специальных функций и т.д.
Что нового мы надеемся внести в эту область математики?
Прежде всего впервые получить возможность без ошибок
находить алгебраические решения таких уравнений. Этот
результат чрезвычайно важен сам по себе, поскольку, как мы
покажем ниже, он дает подход к теоретическим проблемам, до того
недоступным. Другое применение, которое мы здесь не будем
рассматривать, - получить "генератор" специальных функций
(численные значения, точные индексные характеристики, ...).
Для обзора всего, что уже сделано в области только этого
второго круга проблем, требуется выполнить громадную
работу. Наконец, мы должны рассматривать эту область как
тестовую - если будет разработано программное обеспечение для
алгебраического решения обыкновенных дифференциальных
уравнений, то это откроет дорогу работам в области программного
обеспечения для решения уравнений в частных производных.
Будущее здесь богато задачами.
5.3.2. Классификация особенностей
Рассмотрим уравнение вида A). Особенности решений этого
уравнения располагаются в нулях полинома а (л:) = 0 или,
возможно, в бесконечности.
Сдвигом вида х —> х- а мы можем редуцировать задачу
для нулей в конечной области к особенности в начале
координат (аналогично подстановка х—>1/х редуцирует
особенность в бесконечности к особенности в нуле). Классически
предполагается, что уравнение A) имеет особенность в нуле.
В действительности такой способ рассуждений ошибочен. Мы
знаем, что вне особенностей решения являются аналитическими
Компьютерная алгебра 253
функциями и потому очень регулярны. При этом выбор корня
полинома приводит, каким бы методом мы не пользовались
(Ньютона, ...), к аппроксимации этого корня, и при
численном сдвиге мы попадаем в регулярную точку и, значит, теряем
всю нашу информацию об особенности. Мы не можем действовать
подобным образом.
Кратко опишем способ обхода этой проблемы (путь, который
требует, конечно, значительных изменений в отношении к
ЭВМ). Прежде всего ради простоты мы предположим, что
коэффициенты полинома а - рациональные числа (следовательно,
а принадлежит Щ_х]) и, более того, что они являются целыми.
Здесь корни а полинома а определяются не
своими-численными значениями (которые в большинстве случаев будут,
разумеется, только приближенными), а просто вычислительным
правилом "а (а) = 0", которое истинно для всех корней полинома
а . В этом случае осуществление сдвига х —> х - ос
приобретает весьма точный смысл, который мы проиллюстрируем на
примере. Коэффициенты нового оператора, который мы лолуча-
ем, лежат в (Q[*]/a )[у].
Если мы посмотрим на дифференциальный оператор
Цу) = (х2 + 2)у" + у,
то увидим, что его коэффициенты принадлежат ~Ц_х\ Пусть а -
корень полинома х + 2; таким образом, а удовлетворяет
уравнению ос2 = -2, и мы можем пользоваться только этой
информацией. Выполним сдвиг
z=х-ос;
тогда
г2 = х2 - 2<х*х + ос2 = х2 - 2а*х - 2 =
= х2 - 2а*(г + а) - 2 = х2 - 2а*г + 2 ;
поэтому х2 + 2 = г2 + 2аг, и оператор принимает вид
(z2 + 2a*z)y" + y=L(y),
т.е.
г(г + 2аI/' + у=Цу).
254 Формальное интегрирование
Мы действительно выполнили сдвиг, который редуцирует
особенность в нуль. Следует отметить, что нам не требуется
повторять вычисления для другого корня.
С этого момента мы можем, таким образом, предполагать,
что начало координат является корнем полинома а , т.е.
ал@) = 0. Мы уже предположили, что полиномы а. не имеют
общих делителей, поэтому существует хотя бы один индекс /,
такой, что а.@) отлично от 0.
Для классификации особенностей нам понадобится новое
понятие, а именно многогранника Ньютона дифференциального
оператора.
Поясним его на примере.
Пусть оператор имеет вид
L = x5d* + x3d3 + 2x3d2 + d + \y
гдеа = ^.
_ Если xldJ - дифференциальный моном, принадлежащий L, то
с ним ассоциируется точка (/, /-/) в 2 .
Поэтому нам нужно рассмотреть следующие точки в Z2:
D,1); C,0); B,1); A,-1); @,0).
Множество точек в I , ассоциированных с мономами
оператора L, обозначим через S. Тогда для найденной таким
образом точки (а, Ь) рассмотрим область
Компьютерная алгебра 255
Q/(a,6) = {(*,(/) €R2; x*a; y*b}.
Положим
QT = U Qt(a,b).
(a,6)€S
Многогранник Ньютона - это граница выпуклой оболочки
множества QT.
Теперь мы можем сформулировать результаты Фукса.
Будем говорить, что О - регулярная особенность оператора
L, если у многогранника Ньютона для L есть только один на-
256 Формальное интегрирование
клон и этот наклон нулевой. В противном случае мы будем
говорить, что особенность иррегулярная.
Заметим, что в классических исследованиях [Ince 1956]
для определения типа особенностей используются другие
критерии. Наше определение имеет преимущество большей
простоты. Легко видеть, что если 0 - регулярная особенность, то L
можно переписать в каноническом виде:
L= xnR0(x)dn + Jcn_1/?1(jc)a"+...+ Rn(x)y
где /?0@) - не нуль и все R. - полиномы.
5.3.3. Программа для решения О.Д.У. в регулярной особенности
Разберем этот случай более подробно, поскольку он проще
общего случая и иллюстрирует некоторые из встречающихся
трудностей. Описываемый ниже подход следует классическому
алгоритму Фробениуса (могут использоваться и другие
алгоритмы).
A) Рассмотрев действие оператора L на символьную
степень хг, мы видим, что
ЦхЛ) = хЛ/(*,А),
где
га
/ = 0 '
причем /. - полиномы от переменной А, а /и - функция от
степеней полиномов /?п, ...,/? .
B) Будем искать формальные решения вида
*Л Е .яУ. где g * 0.
/ = 0 '
Линейность оператора L позволяет написать
ЦхА Е gjx1)= I gMxA+i).
C) Пользуясь A), легко видеть, что
Д^+Е 8ix') = xX+l g( I /t.(A+/V).
/ = 0 ' / = 0 ' t' = 0
Компьютерная алгебра 257
поэтому xr Yig.x* будет решением уравнения L=0 тогда и
только тогда, когда удовлетворяется следующая бесконечная
система:
/0(А) О
/,(Л) /0(А+1) О
fkW /ft_,(A+l) •••
О
f.(\+k)
So
*1
= 0.
Эта бесконечная система может быть разделена на две части:
- начальные условия
/o<Ateo = °-
/1Wg0 + /0(A> 1)^ = 0,
/2(Ato0 + f,(A +1)^ + ^ + 2)^ = 0.
- оставшаяся часть представляет собой в
действительности линейное рекуррентное уравнение
/Л(* + п)ёп + • - • + /0(* + * + «)^ГП+Л = 0 для /г £ 0.
Мы видим, что g. могут быть алгебраически выражены в
виде рациональных функций от Л, например
Здесь важно заметить, что g. получаются точными вычислениями.
Единственную трудность представляет первое уравнение
/0<*)*ов0-
Поскольку g нельзя положить равным нулю, единственное
решение заключается в выборе такого Л, что / (А) = 0, т.е. мы
возвращаемся к задаче, с которой уже встречались, но здесь
она усложняется тем, что f - элемент кольца (Q[x]/(a ))[*/],
поэтому мы должны перейти к следующему расширению и работать
в (Ч*]/(ав)М
176—17
258 Формальное интегрирование
Мы не будем вдаваться глубже в этот деликатный вопрос,
а закончим замечанием, что некоторые знаменатели элементов
g. могут обращаться в нуль. В ее настоящем состоянии
программа Фробениуса може'т справляться со второй упомянутой
трудностью благодаря недавним работам Дикресенцо и Дюваля
[Dicrescenzo, Duval 1985].
5.3.4. Общая структура программы
Программа DESIR состоит из следующих основных модулей:
FROBENIUS, который мы только что описали, позволяет
обрабатывать регулярные особенности.
NEWTON позволяет рассматривать случай иррегулярных
особенностей. Мы сформулируем здесь основную идею метода,
исходя из следующего простого примера: пусть дифференциальный
оператор порядка п = 2 имеет вид
L = x2d + 6(x), Q€k[x]y 6@) *0.
Построим многогранник Ньютона, ассоциированный с L:
Мы видим, что в этом случае у многогранника Ньютона имеется
единственный наклон Л = 1. Хорошо известно, что мы можем
найти п линейно независимых алгебраических решений и^и^
..., и уравнения Ци) = 0у которые записываются в виде
и - е v(x)y
Компьютерная алгебра 259
-\/q .
где Q .(х) - полином от ^ ', q.el. В нашем примере,
следовательно, решения будут иметь вид
и = еа/х v(x),
где А = 1.
С оператором L и наклоном Л = 1 ассоциируется новый опера-
а/х„
тор L , полученный заменой переменной и = е xv(x), которая
дает
„а/х.
а Ла/х.
а/х*
па/х„
L(ea'xv(x)) = хГ(- -f ea'xv(x) + ё^'Щх)) + 9(x)ea'xv(x)
х*
= еа/х(х2д + (Э(х) - а))и(х);
следовательно, оператору
соответствует оператор
= х'д + (в(х) - а).
Член оператора L , соответствующий точке s
многогранника, - это полином Р(а) = 6@) - а. Уравнение Р(а) = 0
назовем характеристическим уравнением оператора L . Поэтому
если мы присвоим а значение корня характеристического
уравнения, например,
а = 6@),
то точка s исчезнет, и многогранник Ньютона примет вид
= 0@)
Это многогранник Ньютона, характеризующий регулярную
особенность, решения которой мы умеем определять с помощью
метода Фробениуса.
Поэтому общее решение будет иметь вид
е{а /х >Ф(*),
260 Формальное интегрирование
где Щх) - решение, получаемое алгоритмом Фробениуса, а а*
- корень характеристического уравнения.
Приведенный здесь пример принадлежит простому общему
случаю, т.е. случаю, когда а - простой корень
характеристического уравнения, и ровно после одной замены переменной
получается нулевой наклон.
При полном разборе нужно рассматривать природу корней
(простые, кратные, отличающиеся один от другого на целое
число) характеристического уравнения. Для более подробного
изучения этих различных возможностей мы отсылаем читателя к
работе [Delia Dora et al. 1982] и к разделу 5.3.5 данной
главы, где приведено несколько примеров работы программы
DESIR.
Другие модули
С двумя модулями, FROBENIUS и NEWTON, которые имеют дело
с дифференциальными уравнениями, тесно связан модуль,
рассматривающий случай систем дифференциальных уравнений ([Hi-
lali 1983], [Hilali 1987]):
X = АХ,
где А - мероморфная в начале координат функция.
Разрабатываются также четыре основных модуля, а именно
1) арифметический модуль, позволяющий манипулировать с
различными требующимися алгебраическими расширениями ([Dic-
rescenzo, Duval 1984], [Dicrescenzo, Duval 1985], [Duval
1987b]);
2) модуль окончательной численной обработки, позволяющий
вычислять специальные функции [Ramis, Thomann 1980];
3) модуль графической визуализации [Richard 1986];
4) модуль для работы с линейными разностными уравнениями
([Delia Dora, Tournier 1984], [Delia Dora, Tournier 1986],
[Tournier 1987]).
Некоторые из этих работ уже значительно продвинулись, и
более подробно о них можно прочитать в цитируемой
литературе.
Компьютерная алгебра 261
5.3.5. Несколько примеров применения программы DESIR
DESIR - это программа, работающая под управлением
системы REDUCE. Приведенные ниже примеры реализованы на
компьютере Bull DPS8 с операционной системой Multics. В этих
примерах имеются:
- вызов, осуществляемый командой codedesir();
- интерактивный диалог для ввода данных;
- напечатанные решения дифференциального уравнения с
требуемым количеством членов;
- проверка корректности этого решения, осуществляемая
путем подстановки его в исходное уравнение; ответом
является выражение, все степени любого члена которого выше
степени решения.
5.3.5.1. Примеры с уравнением Бесселя
codedesirO;
***** ВВОД ДАННЫХ *****
Уравнение имеет вид
аA,0)(х)<Г0 + аA,1)(Х)<Г1 + + a(l,n) (x)d"n = О
порядок уравнения ?
2;
Введите коэффициенты a(l,j)(x)
x**2-nu**2; х; х**2;
2 2
аA,0) = - пи + х
аA,1) = х
2
аA,2) = х
коррекция ? ( да; / нет; )
нет;
сколько членов хотите получить в решении ?
Ю;
***** ВВОД ЗАКОНЧЕН *****
***** ВЫПОЛНЕНИЕ *****
2 ПОЛУЧЕННЫХ РЕШЕНИЯ НАХОДЯТСЯ В ТАБЛИЦЕ
soldif (l,j) при j = 1,2
262 Формальное интегрирование
РЕШЕНИЕ No 1
nu 5 4 2 4 3 4
(х *A22880*nu - 30720*nu *x + 1843200*nu + 3840*nu *x
3 2 3 2 6 2 4
- 430080*nu *x + 10444800*nu - 320*nu *x + 46080*nu *x
2 2 2 8 6
- 2181120*nu *x .+ 27648000*nu + 20*nu*x - 2880*nu*x +
4 2 10 8
180480*nu*x - 4730880*nu*x + 33669120*nu - x + 100*x
6 4 2
- 6400*x + 230400*x - 3686400*x + 14745600))/A22880*
5 4 3 2
(nu + 15*nu + 85*nu + 225*nu + 274*nu + 120))
РЕШЕНИЕ No 2
5 4 2 4 3 4
A22880*nu + 30720*nu *x - 1843200*nu + 3840*nu *x -
3 2 3 2 6 2 4
430080*nu *x + 10444800*nu + 320*nu *x - 46080*nu *x
*? *? P R R
+ 2181120*nu *x - 27648000*nu + 20*nu*x - 2880*nu*x
4 2 10 8
+ 180480*nu*x - 4730880*nu*x + 33669120*nu + x - 100*x
6 4 2 nu
+ 6400*x - 230400*x + 3686400*x - 14745600)/A22880*x
5 4 3 2
*(nu - 15*nu + 85*nu - 225*nu + 274*nu - 120))
Истинность каждого решения можно проверить путем вызова
процедуры solvalide(j), которая подставляет /-е решение в
данное уравнение (или уравнения, если рассматривается
система).
Компьютерная алгебра 263
solvalide(l);
УРАВНЕНИЕ 1
nil 12 5 4 3 2
(- х *х )/A22880*(nu + 15*nu + 85*nu + 225*nu
+ 274*nu +120))
solvalideB);
УРАВНЕНИЕ 1
12 nu 5 4 3 2
x /A22880*x *(nu - 15*nu + 85*nu - 225*nu + 274*nu
- 120))
sub(nu=0, soldifA,1)); % 1-е решение для nu=0 ;
10 8 6 4 2
(- x + 100*x - 6400*x + 230400*x - 3686400*x
+ 14745600)/14745600
sub(nu=0, soldifA,2)); % 2-е решение для nu=0 ;
10 8 6 4 2
(- x + 100*x - 6400*x + 230400*x - 3686400*x
+ 14745600)/14745600
sub(nu=l, soldifA,1)); % 1-е решение для nu=l ;
10 8 6 4 2
(x*(- x + 120*x - 9600*x + 460800*x - 11059200*x
+ 88473600))/88473600
sub(nu=l, soldifA,2)); % 2-е решение для nu=l :
это второе решение не может
быть вычислено для пи > 0 ;
***** нулевой знаменатель
errornil
sub(nu=-l, soldif A,2) )п; % но оно может быть вычислено
для nu<0;
10 8 6 4 2
(х*(- х + 120*х - 9600*х + 460800*х - 11059200*х
+ 88473600))/88473600
264 Формальное интегрирование
sub(nu=2, soldifA,1)); % 1-е решение для nu=2 ;
2 10 8 6 4 2
(х *(- х + 140*х - 13440*х + 806400*х - 25804800*х
+ 309657600))/309657600
codedesir();
***** ВВОД ДАННЫХ *****
Уравнение имеет вид
аA,0)(х)(Г0 + аA,1>(Х)ал1 + + аA,п)(х)<Гп = 0
порядок уравнения ?
2;
Введите коэффициенты a(l,j)(x)
х**2; х; х**2 ;
2
аA,0) = х
аA,1) = х
2
аA,2) = х
коррекция ? ( да; / нет; )
нет;
сколько членов хотите получить в решении ?
Ю;
***** ВВОД ЗАКОНЧЕН *****
***** ВЫПОЛНЕНИЕ *****
2 ПОЛУЧЕННЫХ РЕШЕНИЯ НАХОДЯТСЯ В ТАБЛИЦЕ
soldif (l,j) при j = 1,2
РЕШЕНИЕ No l
10 8 6 4 2
(- х + 100*х - 6400*х + 230400*х - 3686400*х +
14745600O14745600
Компьютерная алгебра 265
РЕШЕНИЕ No 2
10 8 6
(- 60*log(x)*x + 6000*log(x)*x - 384000*log(x)*x +
4 2
13824000*log(x)*x - 221184000*log(x)*x + 884736000*log(x)
10 8 6 4
+ 137*x - 12500*x + 704000*x - 20736000*x +
2
221184000*x )/884736000
Истинность каждого решения можно проверить путем вызова
процедуры solvalide( j), которая подставляет /'-е решение в
данное уравнение (или уравнения, если рассматривается
система).
solvalide(l);
УРАВНЕНИЕ 1
12
( - х )/14745600
solvalideB);
УРАВНЕНИЕ 1
12
(х *( - 60*log(x) + 137))/884736000
5.3.5.2. Другой пример
codedesir();
***** ВВОД ДАННЫХ *****
Вы хотите рассматривать систему? (да / нет)
нет;
Уравнение имеет вид
аA,0)(х)<Г0 + a(l,l)(x)d'4l + .... + аA,п)(х)<Гп' = '0
порядок уравнения ?
4;
Введите коэффициенты a(l,j)(x)
х+1 ;
2*х**2*(х+1);
266 Формальное интегрирование
х**4;
5*х**7/2;
х**10;
аA,0) = х + 1
2
аA,1) = 2*х *(х + 1)
4
аA,2) = х
7
аA,3) = E*х )/2
10
аA,4) = х
коррекция ? ( да; / нет; )
нет;
сколько членов хотите получить в решении ?
4;
***** ВВОД ЗАКОНЧЕН *****
***** ВЫПОЛНЕНИЕ *****
4 ПОЛУЧЕННЫХ РЕШЕНИЯ НАХОДЯТСЯ В ТАБЛИЦЕ
soldif A,j) при j = 1,...,4
РЕШЕНИЕ No l
((sqrt(x)+sqrtF)*x)/(sqrt(x)*x))
(е *(- 63868560*sqrt(x)*x
2
398592*sqrt(x) + 174069763*sqrtF)*x +
4
2641824*sqrtF)*x + 4608*sqrtF)))/D608*sqrtF)*x )
РЕШЕНИЕ No 2
A/x)
(e *F3868560*sqrt(x)*x + 398592*sqrt(x) +
Компьютерная алгебра 267
2
174069763*sqrtF)*x + 2641824*sqrtF)*x +
(sqrtF)/sqrt(x)) 4
4608*sqrtF)))/D608*e *sqrtF)*x )
РЕШЕНИЕ No 3
2
A/54) (B*x + 3)/C*x )) 10 4
(x *e *x *(863316799848061*x -
3 2
188871635401200*x + 41488989484320»x - 7344803723904*x
+ 1338925209984))/1338925209984
РЕШЕНИЕ No 4
2
A3/27) (l/D*x )) 14 4
(x *e »x *(90412648939865456*x +
3 2
2632462344749808*x + 62680827168288*x + 1090631723256«x
(8/C*x))
+ 10460353203))/A0460353203*e )
Как мы уже видели в предыдущих примерах, справедливость
каждого решения можно проверить путем вызова процедуры sol-
valide(j), которая подставляет /-е решение в уравнение.
solvalide(l);
УРАВНЕНИЕ 1
(-1) (-1)
(sqrt(x) *sqrtF) + x )
(е *A67106972480»sqrt(x)*sqrt(
4 3
6)*х + 464361708855*sqrt(x)*sqrtF)*x + 137967753774»
268 Формальное интегрирование
2
sqrt(x)*sqrtF)*x - 128924853089*sqrt(x)*sqrtF)»x -
4
40445876310*sqrt(x)*sqrtF) + 696161071305»x +
3 2
751890166596*x - 110777578191*x - 170415446928*x))/
C6864*sqrt(x)»sqrtF))
Дополнение
ОСНОВНЫЕ СВЕДЕНИЯ ИЗ АЛГЕБРЫ
АЛ. РАЗЛОЖЕНИЕ НА СВОБОДНЫЕ
ОТ КВАДРАТОВ МНОЖИТЕЛИ
В этом параграфе мы будем рассматривать полином р из
кольца /?[*], где R - область целостности нулевой
характеристики1 (например, кольцо целых чисел Z). Возможно, что у
полинома р имеются кратные сомножители, т.е. существует
2 3
полином q, такой, что q делит р (может быть, q или более
высокая степень q делит р, но в таком случае верно и то,
что q2 делит р).
Очевидно, что можно найти все кратные множители,
выполнив полное разложение полинома р, но имеется гораздо более
простой способ, который мы сейчас опишем. Достаточно
рассмотреть нормированный полином р, т.е. полином со старшим
коэффициентом, равным 1.
Предположим, что р разлагается в произведение линейных
множителей:
л п.
р= П (х-а.) \
/-1
где элементы а. могут быть алгебраическими величинами над
кольцом R (это разложение мы выполняем только для
доказательства).
Тогда производная полинома р, вычисляющаяся чисто
алгебраически по коэффициентам полинома р, равна
Мы делаем это предположение, чтобы исключить случай
полинома лг +1 над полем из р элементов: этот полином
неприводим, но его производная равна нулю. Этот случай и ему
подобные не очень трудны для обработки - см., например,
дополнение 3 в книге [Davenport 1981J.
270 Дополнение. Основные сведения из алгебры
П г Л.-1 П П.-х
Р' = Е [nfx-a.) ' П (х-а)').
i = 1 / = 1 у
'*/
Очевидно, что для любого / полином {х-а.) 1 делит р
и р'. Более того, каждый полином, который делит р, - это
произведение двучленов (х-а.) в степени, меньшей или
равной п.. Поэтому НОД полиномов р и р' почти определен: это
произведение двучленов (х-а.)у степени которых равны
п. -1 или п.. Но эта степень не может равняться /г.,
поскольку (х-а.) 1 делит все слагаемые в разложении р'',
кроме одного, а поэтому не может делить р'. Таким образом,
мы доказали, что
НОД(р, р') = 5 (х-а.у .
Значит, р/НОД(р, р') = П^ ^(х - а .). Для краткости
обозначим этот полином через q. Тогда
НОД(<7, НОД(/7, р'))= П (х-аХ
/=1 1
п.>1
I
откуда мы делаем вывод, что
п
НОД(^Н0Д(р,р'))= (^х'а^
п. = 1
Левая часть этого равенства - произведение всех некратных
множителей полинома р, и мы показали, как ее вычислить,.
используя только операции дифференцирования, (точного)
деления и взятия НОД. Эти операции не вынуждают нас выйти из
кольца Щ_х]у откуда следует, что указанное произведение
может быть вычислено в Щ_х] и довольно эффективным методом.
Кроме того, в качестве промежуточного результата мы
вычислили НОД(р, р'), сомножителями которого служат кратные
сомножители полинома р, но их степени уменьшены на единицу.
Если те же самые вычисления, которые мы применяли к
полиному р, применить к НОД(р, р7), то мы вычислим все сомножите-
Компьютерная йлгебра 271
ли полинома НОД(р, р') кратности один, т.е. сомножители
полинома р кратности два. Аналогично для сомножителей
кратности три, ....
То есть достаточно простыми вычислениями в кольце R[x]
можно представить полином р в виде Пр'., где р. -
произведение сомножителей кратности /. В этом разложении полинома р
у каждого полинома р( нет кратных .сомножителей, и полиномы
р. взаимно просты. Это разложение называется разложением
полинома р на свободные от квадратов множители.
Описанный метод выглядит настолько эффективным, что
никакое улучшение его, кажется, невозможно, но Юн [Yun 1976],
[Yun 1977] нашел остроумную модификацию, показывающую, что
асимптотически стоимость разложения полинома р на свободные
от квадратов множители имеет тот же порядок, что и
стоимость вычисления НОД(р, р'). Мы видим, что все эти
вычисления основаны на возможности вычислять производную полинома
р. Вычисление разложения целых чисел на свободные от
квадратов множители гораздо более сложно - оно почти так же
дорого, как и разложение целых чисел на неприводимые
множители.
А. 2. РАСШИРЕННЫЙ АЛГОРИТМ ЕВКЛИДА
Следуя Евклиду (см. исторические замечания у Кнута
[Knuth 1973]), можно вычислить НОД двух целых чисел q и г
следующим образом:
если |^| < \г\ то t := q\
q := г;
г : = t\
цикл пока г * О
t := остаток(^,г);
q := П
г := t\
выход q\
(где для указания структуры программы мы пользовались
отступами, а не конструкцией начало ... конец, а функция
"остаток" вычисляет остаток от деления q/r). В действительное-
272 Дополнение. Основные сведения из алгебры
ти тот же алгоритм имеет место для полиномов от одной
переменной над полем - достаточно заменить значение "абсолютная
величина" символа | | значением "степень".
Этот алгоритм способен на большее, чем просто вычислять
НОД. На каждом этапе значения символов q и г - это линейные
комбинации исходных значений. Таким образом, если мы будем
следить за этими линейными комбинациями на каждом этапе, то
сможем определить не только НОД, но и его представление в
виде линейной комбинации исходных данных. Поэтому можно
переписать алгоритм Евклида следующим образом, где скобки
[...] используются для обозначения пары чисел, a Q и /? суть
пары, дающие представление текущих значений q и г в
терминах начальных данных.
Присваивание значения переменной Т может показаться
неясным, но определение остатка дает / значение q - \_q/r\ г,
где \_q/r\ - частное от деления q на г.
Первое значение, выдаваемое этим алгоритмом, - это НОД
чисел q и г (обозначим р), а второе - пара [а, Ь\ такая,
что p-aq^ br. Это соотношение называется тождеством
Везу, а только что описанный алгоритм называется расширенным
алгоритмом Евклида.
Мы упоминали, что алгоритм Евклида равным образом
применим к полиномам от одной переменной. То же самое верно для
расширенного алгоритма Евклида. Но здесь имеется маленькая
ловушка. Предположим, что q и г - два полинома с целыми
коэффициентами. Алгоритм Евклида вычисляет их НОД, также
являющийся полиномом с целыми коэффициентами, но может
случиться, что промежуточные значения. будут полиномами с раци-
ональными коэффициентами. Например, если q = x -1 и г =
= 2х2 + Ах + 2, то частное lq/rj равно 1/2. После этого
деления наши переменные принимают следующие значения:
q: 2х2 + Ах + 2, г. -2х - 2,
Q: [0, 1], /?: [1, -1/2].
Остаток от второго деления равен нулю, и мы получили НОД
- 2х - 2, который может быть выражен в виде
Цх2-\)-1Bх2 н-4х + 2).
Компьютерная алгебра 273
Расширенный алгоритм Евклида
если \q\ < |г| то / := q\
q := г;
г := t\
Q := [0,1];
R := [1,0];
иначе Q := [0,1];
R := [1,0];
цикл пока г * 0
/ := остаток( <?,/*);
Т := Q - lq/r\R;
q := П
г := t-
Q := /?; .
R := Г;
выход q и Q;
Может быть, более естественно сделать НОД нормированным,*
что дает нам в качестве НОД х+1, который выражается как
А.З. ПРОСТЕЙШИЕ ДРОБИ
Две дроби (чисел или полиномов от одной переменной)
можно складывать:
a b aa/HOR(p а) + Ьр/НОШм)
р q HOKipTq)
Можно ли преобразовывать дробь в другом направлении,
т.е. можно ли переписать c/pq в виде (а/р) + (b/q)? Такое
разложение дроби c/pq называется разложением на простейшие
дроби.
Это возможно, только если р и q взаимно просты,
поскольку в противном случае знаменатель дроби (а/р) + (b/q) будет
НОК(р, q), что отличается от pq. Если р и q взаимно просты,
то НОД равен 1. По теореме из предыдущего параграфа
существуют два (вычислимых!) целых числа (или полинома, в зависи-
176—18
274 Дополнение. Основные сведения из алгебры
мости от ситуации) Р и Q, такие, что Pp+Qq=l. Тогда
с _ с(Рр + Qq) _ cQq | cPp __ cQ cP
pq pq pq pq p q*
и мы получили желаемое 'разложение.
На "практике c/pq (часто является правильной дробью, т.е.
абсолютное значение (если речь идет о числах, степень, если
- о полиномах) числителя с меньше или равно абсолютному
значению pq. В таком случае мы хотим, чтобы простейшие
дроби были правильными, что в общем случае нашим методом не
гарантируется. Однако Достаточно заменить cQ остатком от
деления его на р> а сР - остатком от деления на q.
Эта процедура, очевидно, распространяется на случай
более сложных знаменателей с сохранением условия, что все
множители взаимно просты. Достаточно последовательно
отделять множители, например
с а* Ь.
РхРт-.рп =ТХ + Р2-Рп =
= а\ , й2 , Ь2
Р\ ?2 Рз'Рп
а. ап а
Р\ Р2 Рп
В действительности существуют более эффективные методы,
чем данный, отделяющие р. более сбалансированным образом
[Abdali et al. 1977].
А. 4. РЕЗУЛЬТАНТ
Весьма часто случается, что нужно определить, могут ли
два полинома, которые обычно взаимно просты, иметь общий
множитель в некоторых частных случаях. Основное
алгебраическое средство для решения такой задачи называется
результантом. В этом параграфе мы определим этот объект и
приведем некоторые его свойства. Рассмотрим случай двух
полиномов / и g от одной переменной х с коэффициентами в кольце
/?.
Положим f = J? Qa х* и g = J?lmQb х*.
Компьютерная алгебра 275
Определение. Матрицей Сильвестра полиномов fug
называется матрица
а
п
0
6
0
Ь
m
0
6
0
Я 1
п -I
а
п
b 1
m-1
b
m
a .
o'
0
m-l
o'
0
a1
a
n
0
bx
b
m
0
ao
at
an-\
a
n
bo
*i
Ci
b
m
0
a°
an-l
0
ft°
<Vi
0
0
a1
0
0
b\
%
a1
>o
*1
0
0
6
ao
0
0
6
bo
в которой имеется m строк, образованных из коэффициентов
а ., и п строк, образованных из коэффициентов b ..
Определение. Результантом полиномов / и g, обозначаемым
Res(/,g) или Res (f,g), если нужно указать переменную,
называется определитель этой матрицы.
Из хорошо известных свойств определителей следует, что
результант принадлежит кольцу /? и что Res(/,g) и Res(g,/)
равны с точностью до знака. Нужно заметить, что хотя
результант задается как определитель, это не лучший способ
его вычисления. Из-за специальной структуры матрицы
Сильвестра можно рассматривать алгоритм Евклида как гауссово
исключение в этой матрице (отсюда и зависимость между
результантом и НОД). Можно также рассматривать метод
субрезультантов как применение тождества Сильвестра (описанного
в разделе "Алгоритм Барейса") к этому исключению. Не
слишком сложно приспособить современные методы (такие, как
метод субрезультантов, описанный в параграфе "Представление
полиномов", или модулярные методы, описанные в главе
"Современные алгоритмы") для вычисления результанта. Эту
проблему обсуждали Коллинз [Collins 1971] и Лоос [Loos
1982]. Приведем сейчас вариант алгоритма Евклида для
вычисления результанта. Через 1с(р) обозначим - старший
коэффициент полинома р(х), через степень(р) - его степень и через
276 Дополнение. Основные сведения из алгебры
остаток(р,д) - остаток от деления р(х) на д(х). Приведем
алгоритм в рекурсивной форме.
алг результант;
вход /,g;
выход г;
п : = степеньA);
m : = CTenenb(g)\
если п > m
то г := (-\)птрезультант^,$)\
иначе а : = lc(f);
если п = О
то г :ч ат\
п
иначе h := ocTaTOK(g,f)\
если h = 0
то л := 0;
иначе р := степень(п)\
выход г;
г := ат ррезультант^,п)\
Положим Л = J]^=0 с •*' и £.=0 для />р. Этот алгоритм
действительно дает нам результант полиномов fug, так как
при п^пг и п * 0 полиномы xlg-xlh (для 0^/<я) суть
линейные комбинации полиномов *'/ (для 0 ^ / < т), а потому
определитель матрицы Сильвестра для полиномов / и g не
меняется при замене Ь. на с. для 0 ^ / < т. Новая матрица
теперь имеет вид q «г где ^ ~ тРеУгольная матрица с
определителем ат~ру & В - матрица Сильвестра для полиномов
/ и h. Из этого алгоритма непосредственно получаем
Предложение 1. Res(/,g) = 0 тогда и только тогда, когда
полиномы fug имеют общий сомножитель.
Теперь легко доказать следующие предложения:
Предложение 2. Если а. - корни полинома f, то
Res(/,g) = am П g(u).
Компьютерная алгебра 277
Предложение 3. Если C. - корни полинома g, то
m
Res(/^) = (-l)m^n «Э ).
m/=l l
Предложение 4. .Res(/,g) = aV lT!= tnm= ^a.- /3.).
Доказательство [Duval 1987a]. Запишем правые части этих
трех предложений в виде
R2(f,g) = amn П g(a.),
m
/?3(/^) = H)mn^ n /(p.),
л m
Ясно, что RJfyg) и RMyg) равны RAf>g)- Три предложения
доказываются одновременно индукцией по целому числу Min(Az,m).
Если поменять местами / и g, то их результант умножается на
(-\)пт и мы получаем RAf>g)- Поэтому можно предположить,
что п^т. Более того, R2(f,g) как результант полиномов / и
g равняется ат при п = О, a /?4(/,g) как результант равен
нулю при я > 0 и h = 0. Остается только рассмотреть случай,
когда т*п>0 и /* * 0. Но тогда R2(f,g) = am~pR2{f,h),
так как g(a.) = /i(a.) для каждого корня а. полинома f, и из
алгоритма видно, что Res(f,g) = am"pRes(/,/i), откуда
получается требуемый результат.
Определение. Дискриминант полинома f, Disc(/) или
Disc (/), равен
а2п~2 П П (a.-a.).
/*'
Предложение 5. Res(/,/') = a Disc(/). Кроме того, Disc(/) € R.
Результанты, какими бы способами они не вычислялись,
часто бывают очень большими. Например, если а. и Ь. - целые
числа, ограниченные А и В соответственно, то результант
меньше (п + l)m/2(m + \)n/2AmBn, но очень часто его
величина имеет такой порядок. Аналогично, если а. и Ь. - полиномы
степеней аир соответственно, то степень результанта
ограничена числом ma + nfi. Пример такого разбухания дает ис-
278 Дополнение. Основные сведения из алгебры
пользование результантов для вычисления примитивных
элементов - см. параграф "Представление алгебраических функций".
А.5. КИТАЙСКАЯ ТЕОРЕМА ОБ ОСТАТКАХ
В данном параграфе мы рассмотрим эту хорошо известную
теорему с алгоритмической точки зрения. Этой теоремой мы
пользуемся в двух случаях: для целых чисел и для полиномов.
Разумеется, эти случаи могут быть обобщены для более
абстрактной ситуации (евклидовы области), но эти обобщения мы
оставим чистым математикам. Прежде всего разберем случай
целых чисел, а затем (более кратко) - случай полиномов.
А. 5.1. Случай целых чисел
Проще разобраться сначала со случаем, когда два модуля
взаимно просты, а затем перейти к общему случаю.
Китайская теорема об остатках (первый случай). Пусть М и
N - два взаимно простых целых числа. Тогда для любой пары
(а,Ь) целых чисел существует целое число с, такое, что
х= a (mod М) и х = Ь (mod N) в том и только том случае,
когда х=с (mod MN).
Доказательство. По теореме из параграфа "Расширенный
алгоритм Евклида" существуют целые числа / и gy такие, что
fM + gN = 1 (здесь используется предположение, что М и N
взаимно просты). Пусть с = а + (b- a)fM.
Если х = с (mod MN), то х = с (mod М). Но с = a (mod M),
поэтому х = a (mod М). Более того,
с = а + (Ь - a)fM =a + (b- a){\ -gN) = a + (b-a) (mod N) = b,
и потому из х = с (mod MN) следует, что х = Ъ (mod N).
Обратно, предположим, что х = a (mod М) и х = Ь (mod N).
Мы показали, что с = а (mod M) и c = b (mod N) и потому
должны выполняться сравнения х = с ^mod M) и (mod AT). Но
утверждение, что х = с (mod M)y эквивалентно утверждению,
что М делит х-с. Аналогично W делит х-с, а поэтому его
делит и MN. Но это эквивалентно тому, что х = с (mod MN).
Следствие. Пусть N.,..., N - попарно взаимно простые
целые числа. Для любого множества а.,...,а целых чисел
Компьютерная алгебра 279
существует целое число с, такое, что для любого i х = а.
(mod N.) тогда и только тогда, когда х = с (mod П*!* N.).
Те же самые методы могут применяться в случае, когда
числа М и N не взаимно просты. Хотя это обобщение
используется редко, приведем его здесь, потому что оно часто
является причиной недоразумений.
Китайская теорема об остатках (обобщенная). Пусть М и N
- два целых числа. Тогда для любой пары (а,Ь) целых чисел
либо a*b (mod НОД(М, N)), в этом случае сравнения
х = a (mod М) и х = b (mod N) одновременно выполняться не
могут,
либо существует целое число с, такое, что х = a (mod M)
и х = b (mod N) тогда и только тогда, когда х = с (mod
НОКЩ АО).
Доказательство. Первый случай, а £ b (mod НОД(М, N)),
совсем прост. Если х = a (mod М), то х = a (mod НОД(Л4, N)).
Аналогично если х = b (mod N), то х= b (mod НОД(Л4, Af)). Но
эти два сравнения противоречат друг другу.
Во втором случае разложим М и N ъ произведения простых
m . п .
чисел: М = П.-пр.г и # = П.сорЛ Разделим теперь множес-
/ *€Рr i i€Pr i Г
тво индексов Р на две части
Q = {/: m . < п .}, /? = {/: m . £ л .}.
т . л .
Пусть М = П.-пр.' и Af = П._п р .' таковы, что
J i€Rr i i€Q r i
Л Л max(m„n.)
MAf = TI p. ' '=HOK(Af, N).
/€P '
Эта теорема (случай взаимно простых модулей) может быть
применена к сравнениям х = a (mod M) и х= b (mod Af), чтобы
доказать существование такого с, что данная система
эквивалентна сравнению х = с (mod Af Af).
Различие между < и ^ не слишком существенно, при
условии, что эти два множества не пересекаются и содержат все
элементы множества Р.
280 Дополнение. Основные сведения из алгебры
Нам нужно доказать, что из этого уравнения следует не
только сравнение х = a (mod Af), но также сравнение х = а
(mod Af) (и аналогично для N). Поэтому предположим, что
выполняется сравнение х = с (mod MN). Отсюда следует, что
х = Ъ (mod N), а значит, вытекает и то же самое соотношение
по модулю всех сомножителей числа N, в частности, по модулю
М = П .eQp . (напоминаем, что т . < п . для i € Q). М также
является сомножителем М и поэтому делит НОД(М, Л"). Посколь-
ку а = 6 (mod НОД(М,#)), получаем, что а = 6 (mod Af). Мы
уже знаем, что х s 6 (mod Af), а значит, * = a (mod Af).
Отсюда, и из того, что х=а (mod Af), заключаем, что х=а
(mod ММ). Но
л \^ ш. т.
ММ = Л р.1 П p.' = Af,
a потому требуемое соотношение по модулю М действительно
выполняется. То же самое верно для N, а значит, теорема
доказана.
А.5.2. Случай полиномов
В данном разделе мы повторим теорему, обсуждавшуюся в
предыдущем разделе, для случая полиномов от одной перемен-
ной (например, х) с коэффициентами, принадлежащими
некоторому полю /С. Ради простоты мы предполагаем, что каждый
модуль - нормированный полином. Процесс вычисления остатка
полинома относительно нормированного полинома очень прост,
если степень этого полинома равна 1 (т.е. он имеет вид
х - А): остаток - это просто значение полинома в точке А.
Китайская теорема об остатках (первый случай). Пусть М и
N - два взаимно простых нормированных полинома. Тогда для
любой пары (а,Ь) полиномов существует полином с, такой, что
Х=а (mod Af) и X=b (mod N) тогда и только тогда, когда
Х=с (mod MN).
Доказательство. Теория параграфа "Расширенный алгоритм
Евклида" остается справедливой и в настоящем случаае,
поэтому доказательство идет тем же путем без каких-либо изме-
Компьютерная алгебра 281
нений. Существуют два полинома / и gy такие, что fM + gN =
= 1, и мы полагаем c=a + (b-a)fM.
Следствие. Пусть N.,... ,N - попарно взаимно простые
полиномы. Для любого множества а.,..., а полиномов
существует полином с, такой, что для любого / Х=а. (mod N.)
тогда и только тогда, когда Х=с (mod П7?, N.).
Китайская теорема об остатках (обобщенная). Пусть М и N
- два полинома. Тогда для любой пары (а,Ь) полиномов
либо a*b (mod HOJ\(M,N)), в этом случае сравнения Х = а
(mod M) и X = b (mod N) одновременно выполняться не могут;
либо существует полином с, такой, что X = a (mod M) и
X = Ь (mod N) тогда и только тогда, когда X = с (mod
HOK(M,N)).
В случае когда все полиномы линейны, этот метод
эквивалентен интерполяции Лагранжа, которая определяет полином р
со значениями а.,...,а в точках Nx,...,Nn, т.е. по модулю
полиномов (х- N^),...,(х- Nп).
Поскольку мы пользовались этим случаем в модулярных
вычислениях, полезно показать, что этот алгоритм чрезвычайно
прост. Предположим, что а - полином над /С, а Ь - значение,
принадлежащее /С, и что нужно решить сравнения X = a (mod M)
и X = b (mod x - v) (где полиномы М и х - v взаимно просты,
т.е. М * 0). Пусть V - элемент поля /С, такой, что оста-
*=v _i
ток от деления VM на x-v равен 1, т.е. V = (M_) .
Тогда решением является
X = Z=a + MV(b - a^v) (mod M(x - v)).
Ясно, что Z = a (mod M), а выбор элемента V обеспечивает,
что Z = b (mod x - v).
Если, кроме того, М имеет вид Щх-v.), то V имеет зна-
чение Tl(v-v) , которое может быть вычислено в /С.
Приложение
REDUCE: СИСТЕМА КОМПЬЮТЕРНОЙ АЛГЕБРЫ
R.I. ВВЕДЕНИЕ
В течение последних двадцати лет в области компьютерной
алгебры был достигнут значительный прогресс, и было создано
обширное программное обеспечение (см. гл. 1).
Из многочисленных систем компьютерной алгебры,
эксплуатирующихся в настоящее время, мы решили привести здесь
подробное описание системы REDUCE. Почему именно REDUCE, хотя
наиболее полной на сегодняшний день является система MACSY-
«МА? Во-первых, REDUCE занимает привилегированное положение:
в течение длительного времени она остается наиболее широко
распространенной системой, установлена более чем в 1000
центров на широком спектре компьютеров. Во-вторых, ее пас-
калеподобный синтаксис легок для изучения и прост для
использования.
Эта система создана А. Херном. Первая ее версия
появилась в 1969 г. Она продолжает развиваться при активном
сотрудничестве общества "продвинутых" пользователей,
значительно обогативших и обогащающих ее библиотеку.
Вот основные возможности, предлагаемые этой системой
пользователю:
- Целая (и рациональная) арифметика "бесконечной
точности", т.е. с произвольным числом цифр.
- Машинная арифметика с плавающей точкой и арифметика с
плавающей точкой "произвольной точности".
- Алгебра полиномов от одной и нескольких переменных:
- вычисление НОД,
- разложение на множители полиномов с целыми
коэффициентами.
Компьютерная алгебра 283
- Алгебра матриц с полиномиальными или символьными
коэффициентами:
- вычисление определителей,
- обращение,
- решение систем линейных уравнений.
- Анализ:
- дифференцирование,
- интегрирование.
- Преобразование выражений:
- упрощение,
- подстановка.
REDUCE с самого начала разрабатывалась как интерактивная
система. Программа поэтому представляется серией команд; в
порядке поступления команд система до перехода к следующему
этапу интерпретирует каждую команду и вычисляет ее
значение. Команды могут представлять собой вызовы функций,
циклы, условные операторы и т.д.
R.l.l. Примеры интерактивного использования
Команды системы REDUCE, оканчиваются на ";" и "$": во
втором случае результаты на печать не выводятся. REDUCE
приглашает к вводу, печатая н\\" для первого ввода и т.д.
Данные, вводимые пользователем, во всех приводимых далее
примерах следуют за этим приглашением
REDUCE 3.3, 28-Jun-87 ...
1: (x+y+z)**2;
2 2 2
X + 2*X*Y + 2*X*Z + Y + 2*Y*Z + Z
2: df((x+y)**3,x,2);
6*(X + Y)
3: int(e**a*x,x);
x) В следующих примерах мы будем опускать этапы открытия
и закрытия диалога.
284 Приложение. REDUCE
А 2
Е *Х
2
4: int(x*e**(a*x)/((a*x)**2+2*a*x+l),x);
А*Х
Е
2
А *(А*Х + 1)
5: for i:=1:40 product i;
815915283247897734345611269596115894272000000000
6: matrix m;
7: m:=mat((a,b),(b,c))$
8: 1/m;
С
MATd.D :=
2
A*C - В
В
МАТЧ 1,2) :=
2
A»C - В
В
MATB,D :=
2
А*С - В
А
МАТB,2) :=
2
А»С - В
9: det(m);
2
А*С - В
10: bye;
Quitting
Эти несколько примеров иллюстрируют "алгебраическую"
моду системы REDUCE. Существует также другая мода, называе-
Компьютерная алгебра 285
мая "символьной" и позволяющая непосредственно выполнять
произвольные инструкции на языке Лисп. Алгебраическая и
символьная моды соответствуют типам данных "алгебраическое
выражение" или "S-выражение языка Лисп".
Система REDUCE написана на языке Лисп и может быть
представлена в виде
REDUCE алгебраическая мода
RLISP инфиксная символьная мода
LISP I префиксная символьная мода
Существуют возможности связей между этими режимами. Но
не нужно забывать, что REDUCE предназначена для работы в
алгебраической моде и что работа в символьной моде требует
весьма основательного знакомства с Лиспом и структурой
REDUCE. Следовательно, в этом дополнении мы ограничиваемся
алгебраической модой языка REDUCE. RLISP описан в работе
[Davenport, Tournier 1983].
R.2. СИНТАКСИС СИСТЕМЫ REDUCE
В этом параграфе мы остановимся на синтаксических
элементах системы REDUCE, а позже перейдем к различным
возможностям, предлагаемым этой системой.
R.2.I. Синтаксические элементы
Программа на языке REDUCE, как уже было сказано, состоит
из набора простых операторов, выполняемых последовательно.
Эти операторы могут быть объявлениями, инструкциями и
выражениями. Выражения могут состоять из чисел, переменных,
операторов, строк (ограниченных символами "), резервируемых
слов и разделителей. Хотя эти синтаксические структуры
являются общими для большинства языков высокого уровня,
отметим следующие отличия:
* • Числа
Целые числа имеют "бесконечную" точность, а числа, не
являющиеся целыми, представляются обычно в виде отношения
двух целых чисел. Можно пользоваться непосредственно машин-
286 Приложение. REDUCE
ными числами с плавающей точкой и числами с плавающей
точкой произвольной точности.
* Переменные
Каждая переменная характеризуется именем и типом. Имя не
должно совпадать с зарезервированным словом, т.е. ключевым
словом языка. Большинство переменных могут по умолчанию
принимать тип, называемый SCALAR. Переменные этого типа
могут принимать в качестве значения произвольное
алгебраическое выражение. При отсутствии такого значения они
принимают в качестве значения свое собственное представление.
Зарезервированы следующие переменные:
Е - основание натуральных логарифмов;
I - квадратный корень из -1 (но может также использоваться
в качестве переменной цикла);
NIL - синоним нуля;
PI - константа я;
Т - синоним для "истинно".
* Операторы
Операторы бывают двух типов:
- префиксные
В систему встроено некоторое количество префиксных
операторов, каждый со своими свойствами. Подробно они описаны
в разделе R.3.I. Пользователь может также создавать новые
операторы со своими свойствами (см. R.2.3.4).
- инфиксные
Инфиксные операторы системы суть: := OR AND NOT NEQ = >=
> < <= . +-*/**, кроме того, пользователь может также
создавать новые операторы (см. раздел R.2.3.4).
R.2.2. Выражения
Поскольку REDUCE - система компьютерной алгебры,
основное ее назначение - выполнять операции над выражениями.
R.2.2.I. Различные типы выражений
Различные виды выражений, используемые в системе REDUCE,
- это:
* скалярные выражения (т.е. выражения с алгебраическими
значениями), над которыми можно выполнять действия +, -, *,
Компьютерная алгебра 287
/ и ** (часто можно вместо ** пользоваться символом Л);
• эквациональные выражения вида А+В=С, которые можно
использовать в качестве аргументов в функциях типа SOLVE и
SUB (функции подстановок);
• целые выражения, аналогичные целым выражениям в других
языках;
• булевы выражения.
Синтаксические правила последних достаточно стандартны: ^
<выражение> <оператор отношения> <выражение>
<булева функция> (<аргументы>)
<булево выражение> <логический оператор> <булево выражение>
Отметим, что операторы типа AND и OR являются ленивыми в
том смысле, что они не вычисляют значения второго
аргумента, если для определения результата («ложно» для AND,
«истинно» для OR) достаточно первого аргумента. Булевы функции
системы:
EVENP(U) определяет, является ли выражение U (которое
должно быть целым выражением) четным числом;
FIXP(U) определяет, является ли выражение U целым;
FREE0F(U,V) определяет, содержит ли выражение U ядро1' V;
NUMBERP(U) определяет, является ли U числом;
0RDP(U,V) определяет, расположено ли ядро U до ядра V.
R.2.2.2. Упрощение выражений
Как уже упоминалось (см. [Moses 1971] и гл. 2), - это
основная задача компьютерной алгебры. Некоторые операции
(например, приведение общих членов) выполняются всегда.
Другие управляются различными переключателями, которые мож-
но устанавливать командой ON <имя-переключателя> и
отключать командой OFF <имя-переключателя>. Имеется много таких
' Ядро - это простая переменная или экземпляр
оператора, для которого не определено никакой подстановки,
например sin (а). См. также обсуждение в начале § 2.7.
В одной команде можно использовать несколько имен
переключателей, разделяя их запятыми.
• 288 Приложение. REDUCE
переключателей; упрощением выражений управляют следующие:
ЕХР обеспечивает разложение выражений при вычислении их
значений и по умолчанию включен (выключение его может
приводить к отсутствию канонической формы, как видно из
следующего примера:
1: off exp;
2: а:=(х+1)**2;
2
А := (X + 1)
3: Ь:=х**2+2*х+1;
2
В := X + 2*Х + 1
4: if (a=b) then 1 else 0;
0
и поэтому не рекомендуется начинающим пользователям);
GCD вынуждает систему сокращать рациональные выражения.
при вычислении их значений на наибольший общий делитель (по
умолчанию этот ключ выключен и должен быть включен, если
пользователь хочет быть уверенным в получении канонической
формы при рациональных вычислениях, как видно на следующем
примере:
1: (х**2-1)/(х-1)**2;
2
X - 1
2
X - 2*Х + 1
2: on gcd;
3: (х**2-1)/(х-1)**2;
X + 1
X - 1
однако простые множители часто отслеживаются, даже при
отключенном GCD);
Компьютерная алгебра 289
LCM вынуждает систему вычислять истинные наименьшие
общие кратные при работе с дробями, даже если отключен GCD,
обеспечивая таким образом большую часть возможностей GCD, и
обычно включен;
MCD вынуждает систему приводить суммы рациональных
выражений к общему знаменателю и по умолчанию включен; при его
выключении результаты работы системы могут не иметь не
только канонического, но даже нормального вида, как
показывает следующий пример:
1: 1/(х-1)-1/(х+1)-2/(х**2-1);
О
2: off mcd;
3: 1/(х-1)-1/(х+1)-2/(х**2-1);
2-1 ' 1 -1 -1
- B*(Х - 1) + (X +. 1) - (X - 1) )
и начинающим также не рекомендуется изменять состояния
этого ключа.
FLOAT вынуждает систему выполнять вычисления с плавающей
точкой в соответствии с встроенной в машину точностью. Он
не должен использоваться по умолчанию, поскольку это
приводит к потере канонической формы, некорректному вычислению
наибольших общих делителей и т.д. (см. параграф
"Представление дробей" в гл. 2). Следующий пример иллюстрирует
некоторые из возникающих проблем:
1: on float;
2: CЛ10)»(х+1/ЗП0 - C*х+1П0;
9 8 7 6
- 0.137781*(Х + 3.28571*Х + 4.71428*Х + 3.88888*Х +
5 4 3
2.03703*Х + 0.703702*Х +0.160493*Х +
2
0.0233195*Х + 0.00195962*Х + 7.25786е-05)
3: gcd((x-l/9),(x+B/3)*x+l/9)/45);
1
176—19
290 Приложение. REDUCE
В результате вычислений оператора 2: должен был полу-
читься 0, а оператора 3: - значение (*+1/3) .
BIGFL0AT вынуждает «систему выполнять вычисления с
плавающей точкой "произвольной точности". Число используемых
десятичных знаков устанавливается оператором PRECISION, как
показано в следующем примере:
1: on bigfloat;
2: precision 40;
40
3: 1/3;
0.333 33333 33333 33333 33333 33333 33333 33333 33
Замечания, сделанные выше для случая on float о потере
канонической формы и т.д., также применимы в данном случае.
R.2.2.3. Списочные выражения
Список1 * - это последовательность выражений (которые
сами могут быть списками). Списки печатаются в виде
элементов, заключенных в скобки, как в следующих примерах:
1: 1:={а,{Ь,с},1>;
L := {А,<В,С},1>
2: second 1;
{В, О
Части списка можно выделять с помощью операторов FIRST,
SECOND, THIRD и REST. Новый элемент может быть добавлен в
начало списка с помощью инфиксного оператора "."
(эквивалентного лисповской функции CONS). Имеются также функции
APPEND (ровно с двумя аргументами) и REVERSE, пример работы
которой приведен ниже:
Эти возможности поддерживаются системой REDUCE,
начиная с версии 3.3.
Компьютерная алгебра 291
3: reverse l;
{1,{В,С>,А>
R.2.3. Объявления
R.2.3.I. Простые переменные
Как уже говорилось, переменные, тип которых не объявлен,
имеют тип SCALAR, и совпадают со своими значениями. Внутри
блока переменные могут, быть явно описаны как имеющие тип
SCALAR или тип INTEGER. Оба объявления дают переменной
новую привязку, распространяющуюся на этот блок и подавляющую
любую другую (даже глобальную) привязку, как это принято в
блочно-структурированных языках. Они также обнуляют эти
переменные. Следовательно, пример на следующей странице
(отметим, что приглашение появляется в каждой строке
многострочной команды) работает, как в большинстве других
блочно-структурированных языков.
Различие между этими переменными состоит в том, что
переменные типа INTEGER могут принимать только целые
значения. Поэтому с ними можно работать более эффективно, чем с
переменными общего вида, поскольку +, например, может
непосредственно интерпретироваться (или компилироваться) как
лисповская функция PLUS, а не как сложение произвольных
выражений языка REDUCE.
Можно объявлять, что переменные зависят от другой
переменной, что часто требуется для дифференцирования, линейных
операторов и т.д. Такие зависимости вводятся с помощью
объявления DEPEND, как в следующем примере:
depend a,x,y;
который утверждает, что переменная а зависит от переменных
х и у. Зависимость может быть снята объявлением N0DEPEND,
так что после
nodepend а,у;
а будет зависеть только от х. Следует отметить, что
зависимость является глобальным свойством, не подчиняющимся
блочной структуре.
292 Приложение. REDUCE
Пример блочной структуры
1: begin
1: scalar a;
1: а:=1;
1: begin
1: scalar a;
1: а:=х;
1: write a;
1: end;
1: write a;
1: end;
X
• 1
R.2.3.2. Асимптотические объявления
Как уже упоминалось в разделе "Ряды Тейлора: простой
метод" гл. 2, часто бывает полезно иметь возможность
автоматически отбрасывать слагаемые, вес которых превышает
заданный, что мы можем понимать как своего рода "малость".
Для этого в языке REDUCE имеется две команды:
• WEIGHT, аргументы которой - это список разделяемых
запятыми соотношений <ядро>=<явное положительное целое чис-
ло>, означающих, что ядро должно рассматриваться именно с
этим весом (целое число должно быть явно заданным целым
числом или индексом цикла FOR, значением которого является
такое число);
♦ WTLEVEL, аргументом которой должно быть явное целое
положительное число (по умолчанию, если не выполнено ни
одной команды WTLEVEL, оно равно 2), указывающее наименьший
суммарный вес монома, при котором он отбрасывается (или
даже не вычисляется).
Необходимо отметить важный момент реализации: в текущих
версиях системы REDUCE переменная с весом не может
использоваться в качестве ядра (например, в операторах SUB или в
следующем операторе WEIGHT). Это свойство "весомости"
переменной может быть снято (как и многие другие!) оператором
CLEAR.
Компьютерная алгебра 293
R.2.3.3. Объявления массивов
Массивы (всегда являющиеся массивами объектов типа
SCALAR) объявляются оператором ARRAY, например
array vA0),uB,4);
который описывает одномерный массив с одиннадцатью
элементами (нумеруемыми от 0 до 10) и двумерный массив с
пятнадцатью элементами (первый индекс меняется от 0 до 2, второй
- от 0 до 4). При объявлении элементы массивов обнуляются.
Объявления массивов могут появляться в любом месте
программы, но действуют глобально. Массив может быть
переобъявлен, в таком случае все предыдущие значения теряются и все
элементы заново обнуляются.
Следует отметить, что поскольку массивы являются
глобальными, массив нельзя передать процедуре в качестве
параметра. Пользователям, испытавшим в связи с этим ранее
неудобства, следует подумать, не лучше ли рассматривать их
программы в терминах списков (см. выше).
R.2.3.4. Объявления операторов
• Префиксные операторы
Они объявляются с помощью объявления OPERATOR, например,
operator f,g;. Такое объявление позволяет использовать их в
качестве "произвольных функций", как, например, в выражении
f(l)+g(a,b). В интерактивном режиме, когда встречается
неизвестная функция, пользователь всегда опрашивается, не
нужно ли объявить ее оператором в указанном смысле.
* Инфиксные операторы
Они объявляются с помощью объявления INFIX, но для них
должна быть задана приоритетность с помощью команды
PRECEDENCE, например
1: infix cross;
2: precedence cross,/;
объявляет CROSS инфиксным оператором, приоритет которого
непосредственно ниже приоритета / (поэтому аыше приоритета
*), как демонстрирует следующий пример:
294 Приложение. REDUCE
3: a*b cross c/d;
В CROSS OA
D
• Линейные операторы
Операторы могут быть объявлены линейными (как функция
своего первого аргумента) по отношению ко второму аргументу
с помощью объявления LINEAR. Например, преобразования
Лапласа можно начать вводить следующим образом:
1: operator laplace;
2: linear laplace;
3: laplace(l+a/s+2/s**2,s);
1 1
2*LAPLACE( ,S) + LAPLACE ( — ,S)*A + LAPLACEA,S)
2 S
S
При работе линейных операторов действует объявление
DEPEND (см. выше), вступающее в силу в момент, когда
используется laplace (или любой линейный оператор).
* Симметрия и операторы
Операторы могут быть объявлены симметричными или
антисимметричными с помощью объявлений SYMMETRIC и
ANTISYMMETRIC. Для их работы аргументы должны быть упорядочены в
соответствии с внутренним порядком системы REDUCE. Оператор
е... можно задать следующей последовательностью:
1: operator eps;
2: antisymmetric eps;
в результате которой имеют место следующие спецификации:
3: eps(l,2,l);
О
4: epsC,2,l);
EPSC,2,D
Компьютерная алгебра 295
5: eps(l,2,3);
- EPSC,2,D
• Некоммутативные операторы
Как уже упоминалось в гл. 2 (§ 2.8), REDUCE позволяет
объявлять некоторые операторы некоммутативными с помощью
объявления N0NC0M. Например,
1: operator u;
2: noncom и;
3: u(a)*u(b)-u(b)*u(a);
U(A)*U(B) - U(B)*U(A)
R.2.3.5. Объявления процедур
Синтаксис:
[<тип>] PROCEDURE <имя> [<параметры>]; <команда>
где <тип> принимает одно из следующих значений: ALGEBRAIC,
SYMBOLIC или INTEGER;
<параметры> :: = ( <имя> [, <имя>] * )
а тело состоит из единственной команды (которая может быть
блоком, см. ниже). В алгебраической моде по умолчанию
принимается тип ALGEBRAIC, его можно опускать: если в теле
содержатся только целые вычисления, то целая процедура :бо-
лее эффективна, например
6: integer procedure factorial n;
6: if n=0 then 1 else n*factorial(n-l);
FACTORIAL
R.2.4. Команды
• REDUCE по существу не имеет строгого различия между
"утверждениями" и "выражениями", которое мы находим в языках
типа Паскаль. Большинство "утверждений" являются по
существу выражениями и выдают значение, которое может
подвергаться дальнейшей обработке (как в Алголе-68). Мы будем описы-
296 Приложение. REDUCE
вать их как утверждения, но будем указывать также их
значения.
R.2.4.1. Оператор присваивания
<lsh> := <выражение>;
где lsh может быть простой переменной, элементом массива
или экземпляром оператора , например
1: sec(O);
SEC(O)
2: sec@):=l;
SEC(O) := 1
3: sec(O);
1
Возвращаемое значение - это значение <выражения>, таким
образом, допустимо
а:=Ь:=х+у;
R.2.4.2. Групповые команды
Несколько команд может быть объединено в одну путем
построения группы: .
« [<утверждение>]* <выражение> »
значение которой совпадает со значением последнего
выражения. Отметим различие между командой
<< а:=х; Ь:=у >>
значение которой равно Y, и командой
<< а:=х; Ь:=у; >>
значение которой равно 0 из-за (нулевого) выражения в конце.
R.2.4.3. Условные операторы
IF <булево выраженио THEN <выражение>
IF <булево выражение> THEN <выражение> ELSE <выражение>
1 В частности, см. обсуждение оператора PART в разделе
R.3.2.2.
Компьютерная алгебра 297
Возвращаемое значение равно значению выполняемой ветви
(или 0, если такой ветви нет). Заметим, что выражение
if x<y then 1; else 0;
недопустимо, поскольку ; завершает условную команду.
Желаемый эффект достигается командой
if x<y then 1 else 0;
R.2.4.4. Команды повторения
Оператор FOR позволяет повторять вычсления, придавая
значения переменной из числового интервала или списка:
FOR <перем> := <нач> STEP <шаг> UNTIL <конец> <действие>
<выраж>
для числового интервала и
FOR EACH <перем> IN <список> <действие> <выраж>
для списков. Конструкция STEP 1 UNTIL может быть заменена
на ":".
Различные допустимые виды <действия>: DO, PRODUCT, SUM,
COLLECT и JOIN. В результате выполнения DO вычисляется
значение <выраж> и выводится результат; значение всего цикла
равно 0. В результате выполнения SUM все значения
складываются и результат выдается в качестве значения цикла,
аналогично PRODUCT приводит к их перемножению. В результате
COLLECT цикл FOR возвращает список, содержащий все значения
<выраж>. В результате JOIN цикл FOR возвращает список,
состоящий из всех значений <выраж> (которые также могут быть
списками), соединенных вместе (подобно APPEND в Лиспе).
REDUCE допускает также
WHILE <булево выражение> DO <команда>
и его разновидность
REPEAT <команда> UNTIL <булево выражение>
Значение всегда нулевое.
R.2.4.5. Блоки
Синтаксис совсем прост:
BEGIN [<объявление>]* <команда>* END
298 Приложение. REDUCE
Однако следует отметить некоторые моменты. Единственные
объявления, подчиняющиеся правилам блочной структуры, - это
объявления простых переменных (см. R.2.3.1); все остальные
действуют глобально. В частности, нельзя объявлять
процедуры внутри блока. Значение блока равно нулю, если только не
выполнялась команда RETURN <выражение>, а в таком случае
значение выражения становится значением блока.
Внутри блоков можно вводить метки с помощью конструкции
<метка>: перед командой. Меткой может быть любой
идентификатор (но не число). Эти метки могут использоваться
командами GO TO (или GOTO) при условии, что GO TO находится в
том же блоке, что и метка, а не внутри другого блока.
Другими словами, GO TO не может использоваться для выхода из
блока или входа в него.
R.3. ВСТРОЕННЫЕ ВОЗМОЖНОСТИ
В предыдущем параграфе мы обсуждали синтаксис языка
REDUCE; сейчас мы опишем основные алгебраические
возможности, включенные в систему REDUCE ко времени выхода
английского перевода данной книги. Однако справочником по этому
предмету должно оставаться пособие по имеющейся в вашем
распоряжении версии системы REDUCE.
R.3.1. Префиксные операторы
R. 3.1.1. Числовые операторы
REDUCE понимает операторы MIN и МАХ, примененные к
произвольному количеству числовых выражений. Имеется также
оператор ABS, вычисляющий абсолютные значения.
R. 3.1.2. Математические операторы
REDUCE уже определил префиксные операторы COS, SIN, TAN,
СОТ, ASIN, ACOS, ATAN, SQRT, EXP, LOG, SINH, COSH, TANH,
ASINH, ACOSH, ATANH, ERF, DILOG и EXPINT. Уже известны
некоторые правила упрощения; кроме того, пользователь может
определить дополнительные правила с помощью предложения LET
(описанного в R.3.3.2). Установка переключателя on numval;
приводит к тому, что экземпляры этих операторов с числовыми
аргументами вычисляются с плавающей точкой.
Компьютерная алгебра 299
R.3.1.3. Дифференцирование
Дифференцирование выполняет оператор DF. Первый аргумент
- это выражение, которое нужно продифференцировать,
следующие выражения должны быть ядрами (в этом случае они
являются "переменными", относительно которых выполняется
дифференцирование) или числами (указывающими, как часто
предыдущее дифференцирование должно выполняться). Так, df(a,x,2,y);
вычисляет
д3а
дх2ду
Этот оператор принимает во внимание зависимости (см.
предложение DEPEND в разделе 2.3.1) и новые правила,
введенные с помощью оператора LET.
1: operator f,g,h;
2: for all x,y,let
2: df(f(x,y),x)=g(x,y),
2: df(f(x,y),y)=x*h(x,y);
3: df(f(a,b),a)*df(f(a,b),b);
G(A,B)*H(A,B)*A
R. 3.1.4. Интегрирование
Оператор интегрирования в языке REDUCE - это INT, первый
аргумент этого оператора - подынтегральное выражение, а
второй - переменная интегрирования. Используется
"параллельный" алгоритм или метод Риша - Нормана - Фитча
[Davenport 1982]. Приведем пару примеров (время вычислялось на
компьютере SUN 3/75).
1: int(l/(l-x**4),x);
2*ATAN(X) - L0G(X - 1) + L0G(X + 1)
4
Time: 357 ms
2: int(x**3*sin(x**2),x);
2 2 2
SIN(X ) - C0S(X )*X
2
300 Приложение. REDUCE
Time: 391 ms
3 int(l/(a*e**(m*x)+b*e**(-m*x)),x);
M*X
SQRT(B)*SQRT()*ATAN( )
SQRT(B)*SQRT(A)
A*B*M
Time: 2839 ms
R.3.1.5. Разложение на множители
REDUCE может разлагать на множители полиномы с целыми
коэффициентами от одной или нескольких переменных.
Обращение может быть двух типов:
ГАСТОК^Е(<выражение>)
при этом выдается список всех сомножителей (первый может
быть числовым содержанием) или
ГАСТ(Ж^Е(<выражение>,<простое число>)
использующее простое число как "подсказку" в процессе
модулярной редукции (детали используемого алгоритма см. в гл.
4). Кратные множители повторяются в списке соответствующее
число раз. В управляющем режиме on ifactor; целое
содержание также будет разложено в произведение простых чисел.
Можно производить разложение по модулю простого числа и
получать описание выполняемых алгоритмом шагов - детали см.
в пособии по языку.
R.3.I.6. Результанты
REDUCE может вычислять результант двух выражений.
Синтаксис:
КЕ5иЬТАНТ(<выражение>,<выражение><ядро>);
где третий аргумент - это "неизвестная", которую нужно
исключить.
R.3.I.7. Решение систем уравнений
Оператор SOLVE может быть использован для решения одного
полиномиального уравнения или системы линейных уравенений.
Синтаксис:
Компьютерная алгебра 301
50ЬУЕ(<выражение>,<переменная>);
где <выражение> - или простое выражение, или список
выражений, а <переменная> - либо простая переменная, либо список
переменных, представляющий "неизвестные", относительно
которых система должна быть разрешена. Если второй аргумент
опущен, то уравнение (система) решается относительно всех
появляющихся ядер.
1: solve(x**3+x**2+4=0,x);
SQRTG)*I - 1
{Х= у
2
SQRTG)*I + 1
Х= ,
2
Х=-2>
2: solve({x-3*y=2, x-y=l), <х,у>);
1 1
{{Х=—,Y= }}
2 2
Могут использоваться различные режимы - детали
читатель найдет в пособии по языку REDUCE.
R.3.2. Работа с выражениями
Прежде всего напомним определение текущего результата,
который обозначается WS. В качестве значения он имеет
последний вычисленный результат. Можно получить доступ к
другим результатам, пользуясь обозначением УБ<число>, что в
качестве результата дает результат вычислений с индексом
<число>.
R. 3.2.1. Вывод выражений
Мы уже говорили, что завершение предложения символом "$"
в отличие от ";" блокирует распечатку результата. С другой
стороны, можно распечатать результат, воспользовавшись
предложением WRITE. Это предложение берет список выражений,
разделенных запятыми, и распечатывает результаты.
Формат вывода можно менять разными способами. Порядок, в
302 Приложение. REDUCE
котором распечатываются переменные, можно изменить с
помощью предложения ORDER.
order x,y,z;
упорядочивает х перед д перед z перед всеми остальными
переменными или ядрами во всех последующих распечатках.
Стандартное упорядочение (по умолчанию) зависит от версии
Лиспа, на которой реализован REDUCE.
1: p:=(x+y-z)**2;
2 2 2
Р := X + 2*X*Y - 2*X*Z + Y - 2*Y*Z + Z
2: order z,y,x;
3: p;
2 2 2
Z - 2*Z*Y - 2*Z*X + Y + 2*Y*X + X
Предложение FACTOR записывается аналогично, но приводит
к тому, что все члены, содержащие некоторую данную степень
данного ядра распечатываются с вынесенной за скобки этой
степенью. Например, предыдущий пример можно продолжить
следующим образом:
4: factor z;
5: р;
2 2 2
Z - B*Z)*(Y + Z) + Y + 2*Y*X + X
Команда REMFAC используется для того, чтобы отменить
действие объявления FACTOR.
Имеется также много ключей, управляющих форматом вывода
выражений. Следует отметить, что они не влияют на
внутреннюю форму в отличие от таких переключателей, как MCD.
ALLFAC печатает простые мультипликативные множители в
обычном виде и, как правило, включен.
DIV находит знаменатель рациональных выражений для
простых множителей, которые затем делит на знаменатель.
По умолчанию выключен.
Компьютерная алгебра 303
LIST распечатывает каждое слагаемое суммы на отдельной
строке (хорош при использовании бумаги). Обычно
выключен.
RAT используется с командой FACTOR и распечатывает
знаменатель каждого разлагаемого на множители члена
(после сокращения, если оно возможно). Обычно
выключен.
RATPRI распечатывает дроби в виде ^, если и Л, и В
помещаются в одной строке. По умолчанию включен.
REVPRI распечатывает в возрастающем, а не в убывающем
порядке. Обычно выключен.
NAT предполагает "естественный", или математический,
стиль распечатки. Обычно включен, но может быть
выключен, чтобы получить распечатку в форме,
совместимой с входным синтаксисом.
FORT приводит к распечатке выражений в форме, совместимой
с форматом Фортрана. С этим режимом ассоциированы
несколько управляющих параметров - детали см. в
пособии по системе.
Часто бывает полезнее иметь возможность видеть общую
"структуру" сложного выражения, чем видеть его отдельные
части как таковые. Предложение STRUCTR выявляет эту
внутреннюю структуру. Например,
1: (l+e'Mloglxmog log х)Г5;
5*L0G(L0G(X))*L0G(X) 4*L0G(L0G(X))*L0G(X)
E + 5*E + 10*
3*L0G(L0G(X))*L0G(X) 2*L0G(L0G(X))*L0G(X)
E + 10*E + 5*
L0G(L0G(X))*L0G(X)
E + 1
2: structr ws;
5 4 3 2
ANSI + 5*ANS1 + 10*ANS1 + 10*ANS1 + 5*ANS1 +1
where
L0G(L0G(X))*L0G(X)
ANSI := E
304 Приложение. REDUCE
Эта команда может использоваться также в режиме FORT,
например,
3: on fort;
4г structr ws*
ANSl=E*i(L0G(L0G(X))*LOG(X))
ANS=ANSl**5+5.*ANS1**4+10.*ANS1**3+10.*ANSl**2+5. *
ANS1+1.
Снова различные режимы и дополнительные возможности
можно найти в пособии по системе.
R.3.2.2. Части выражений
Оператор C0EFF возвращает список коэффициентов полинома
относительно названного ядра.
1: coeff(x**3+(x-y)**2-l,x);
2
<Y - 1, - 2*Y,1,1>
С помощью оператора C0EFFN можно найти только п-й
коэффициент. Это эффективнее вычисления всего списка и затем
выделения нужного члена.
2: coeffn((x+y)**3-2*x**2,x,2);
3*Y - 2
Различные части рациональных функций и полиномов можно
выделять разными операторами:
NUM выделяет числитель рациональной функции;
DEN выделяет знаменатель рациональной функции;
DEG выделяет степень полинома относительно данного
ядра;
LC0F аналогично выделяет старший коэффициент;
LTERM выделяет старший член (коэффициент, умноженный на
переменную, возведенную в наивысшую степень);
REDUCT выделяет остаток (все, кроме старшего члена);
MAINVAR выделяет главную переменную полинома.
Оператор PART выделяет часть выражения. Он работает с
печатной формой выражения (располагая информацией о
положении всех переключателей, описанных в предыдущем разделе о
выходном формате). Синтаксис этого оператора:
Компьютерная алгебра 305
PARK<выражением , <целое>]*).
Выражение мысленно распечатывается (в соответствии с
флагами управления печатью, описанными в R.3.2.1), а затем
поочередно каждое <целое> п используется для выделения п-то
аргумента текущего оператора высшего уровня в этом
выражении. Отрицательное целое выделяет |я|-й аргумент с конца.
1: x:=a+b+c*d+e+f;
X := А + В + OD + Е + F
2: part(x,2);
В
3: part(х,-2);
Е
4: part(x,3,l);
С
5: part(x,0);
PLUS
Если оператор PART используется в левой части оператора
присваивания, то значение оператора присваивания равно
результату замены указанной части выражением, стоящим в
правой части.
6: part(x,2):=g*h;
А + G*H + OD + E + F
7: х;
А + В ■+ OD + Е + F
Читатель может убедиться, что первоначальное выражение
не изменилось.
R.3.3. Подстановки
В системе REDUCE возможны два вида подстановок:
локальные подстановки, выполняющиеся только в обрабатываемой ко-
176—20
306 Приложение. REDUCE
манде или выражении, и глобальные подстановки,
воздействующие на все последующие вычисления до тех пор, пока не будет
дана команда их отмены.
R. 3.3.1. Локальные подстановки
Эти подстановки выполняются с помощью оператора SUB,
имеющего вид
SUB( [<ядро>=<выражения>, 3*<выражения>)
который вычисляет значение последнего выражения, а затем
параллельно заменяет каждое ядро, встречающееся в левой
части уравнения, соответствующей правой частью. Например,
1: sub(x=x+l, y=cos(u), x*y+u*sin(x));
SIN(X + 1)*U + C0S(U)*X + COS(U)
2: z:=a*(x-y)**2+2*b*x+log(y);
2 2
Z := LOG(Y) + A*X - 2*A*X*Y + A*Y + 2*B*X
3: zp:=sub(x=y, y=u+l, z);
2 2
ZR := L0G(U + 1) + A*U - 2*A*U*Y + 2*A*U + A*Y - 2*A*Y + A
2*B*Y
4: % Ho z не изменился
4: z;
2 2
LOG(Y) + A*X - 2*A*X*Y + A*Y + 2*B*X
Родственным оператором является инфиксный оператор
WHERE, имеющий вид
<выражение^НЕИЕ<уравн> [,' <уравн> 3 *.
В алгебраической моде операторы WHERE и SUB обладают
одинаковыми возможностями, за исключением того, что WHERE
может выполнять подстановки только для идентификаторов, а
не для произвольных ядер.
R.3.3.2. Глобальные подстановки
Эти подстановки, вводимые предложениями LET, выполняются
во всех выражениях, содержащих левую часть правила подста-
Компьютерная алгебра 307
новки, с момента, когда это правило введено, и до тех пор,
пока оно не переопределено или не отменено командой CLEAR.
1: operator f,g;
2: let g(x)=x**2,
2: f(x,y)=x*cos(y);
3: df(g(u),u); % это правило подействало только на g(x)
DF(G(U),U)
4: f(x,y);
C0S(Y)*X
5: f(a,b); % это правило подействало только на f(x,y)
F(A,B)
Если мы хотим выполнить подстановку в выражения,
содержащие произвольные переменные, а не только переменные с
конкретными именами, то мы должны перед предложением LET
поставить конструкцию FOR ALL.
6: for all x,y let f(x,y)=log(x)-y;
7: f(a,b);
LOG(A) - В
Формально такое предложение записывается в виде
[FOR ALL <перем>[,<перем>]*] LET <правило>[,<правило>]*
где <правило> определяется конструкцией
< л. ч. >=< выражение^
Л.ч. может иметь различную форму; наиболее простая - это
ядро. В этом случае ядро всегда заменяется выражением,
стоящим в правой части. Если л.ч. имеет вид а**п (где п - явно
заданное целое число) , то правило применяется ко всем
С другими формами экспонент нужно быть более
осторожными. Например, в результате подстановки let a**b=c;
выражение а**B*Ь5; упрощается до 0, поскольку его внутреннее
ь 2
представление имеет вид (а ) , в то время как a**(b*d); не
упрощается, поскольку его внутреннее представление имеет
308 Приложение. REDUCE
степеням а, показатель которых не менее п. Если л.ч. имеет
вид а*Ь (где а и b - ядра или степени ядер, или
произведения степеней ядер), то заменяется только а*Ь, но не а и b в
отдельности. Если л.ч. имеет вид а+b (где а и b - ядра или
степени ядер, или произведения степеней ядер), то
заменяется а+b, а также первое из слагаемых а и b относительно
порядка, принятого в системе REDUCE (например, а), неявно
будет рассматриваться как (a+b)-b, и первое слагаемое будет
заменено.
С помощью ограничения SUCH THAT можно на переменные,
фигурирующие в конструкции FOR ALL, накладывать некоторые
условия, например
1: operator laplace,factorial;
2: for all x,n such that fixp n and n>0 let
2: laplace(x**n,x)=factorial(n)*t**(-n-l);
3: laplace(y**2,y);
FACTORIALS)
3
7
4: laplace(y**(-2),y);
1
LAPLACEC ,Y)
2
Y
Правило можно отменить командой CLEAR. Чтобы отменить
правило с предусловием, необходимо воспользоваться тем же ,
самым предусловием с теми же именами переменных. Мы уже
видели, что CLEAR отменяет также объявления WEIGHT, а в
действительности оно восстанавливает многие другие свойства.
В отличие от SUB и WHERE правила LET применяются
последовательно до тех пор, пока подстановки возможны. Хотя это
часто оказывается полезным (например, при линеаризации
тригонометрических функций - см. § 2.7 гл. 2), это означает,
что на левую часть правила не должно быть ссылок в правой
части.
Компьютерная алгебра 309
1: let x+x+1;
2: х;
***** Simplification recursion too deep1*
3: let y=z;
4: y;
Z
5: let z=y;
6: ^ 2)
***** Binding stack overflow, restarting... J
R.4. МАТРИЧНАЯ АЛГЕБРА
Объявление MATRIX позволяет объявить, что переменные
будут принимать не обычные скалярные значения, а матричные.
Матрицы могут вводиться с помощью оператора МАТ, например,
1: matrix m;
2: m:=mat((a,b),(b,c));
M(l,l) := A
M(l,2) := В
MB,l) := С
МB,2) := D
REDUCE позволяет вычислять обратные матрицы,
определители матриц, транспонированные матрицы, следы, например,
3: т**(-1);
D
МАТA,1) :=
A*D - В*С
В-
МАТA,2) :=
A*D - В*С
Рекурсия упрощения слишком глубокая
Переполнение стека связи, повторный старт
310 Приложение. REDUCE
МАТB,1» :=
МАТB,2) :=
4: det(m);
A*D - В»С
5: tp(m);
MATd.D : =
MATA,2) :=
MATB,D : =
MATC2.2) :=
6: trace m;
A + D
A*D - B»C
A
A*D - B*C
A
С
В
D
R. 5 ЗАКЛЮЧЕНИЕ
REDUCE - это мощная система компьютерной алгебры,
доступная на широком классе компьютеров, от IBM PC до
суперЭВМ, но элементарные ее возможности не представляют
трудности для использования. Подробное описание (и многие
режимы и возможности, для которых у нас не нашлось здесь места)
содержатся в пособии по системе.
ЛИТЕРАТУРА
Данная книга дает только краткий обзор компьютерной
алгебры. Прежде чем привести список всех работ, упоминавшихся
в этой книге, назовем несколько книг и периодических
изданий общего направления, которые могут пополнить знания
читателя в данной области. Математика и алгоритмы работы с
целыми числами и плотными полиномами тщательно
рассматриваются Кнутом [Knuth 1981]. В сборнике под редакцией Бухбер-
гера и др. [Buchberger et al. 1982] описаны некоторые
математические аспекты компьютерной алгебры и приведены многие
доказательства, опущенные нами. Эти две книги необходимы
специалистам, которые хотят создавать свою собственную
систему.
Некоторые статьи по компьютерной алгебре и ее
приложениям появились в трудах конференций по компьютерной алгебре.
Конференции в Северной Америке организуются группой SIGSAM
(the Special Interest Group on Symbolic and Algebraic
Computation of the Association for Computing Machinery) и их
труды публикуются ассоциацией ACM под названием SYMSAC,
например SYMSAC 76 (Yorktown Heights), SYMSAC 81 (Snowbird)
и SYMSAC 86 (WaterlooI \ Труды Европейских конференций с
1979 года публикуются издательством Springer-Verlag в серии
В июне 1989 года в США состоялась весьма
представительная международная конференция "Компьютеры и
математика", в работе которой компьютерной алгебре отводилось
видное место. К этой конференции был подготовлен сборник [47].
- Прим. перев.
312 Литература
Lecture Notes in Computer Science. Детали приводятся в
следующей таблице1 \
Конференция
EUROSAM 79
EUROCAM 82
EUROCAL 83
EUROSAM 84
EUROCAL 85
EUROCAL 87
Место
Марсель
Марсель
Кингстон на Темзе
Кембридж
Линц
Лейпциг
LNCS
72
144
162
174
203 и 204
3782)
Для каждой системы компьютерной алгебры лучшим
справочным пособием, естественно, является описание этой системы.
Но эти пособия часто слишком длинны, и трудно обозреть все
возможности и ограничения этих систем. Поэтому Journal of
Symbolic Computation (выпускаемый издательством Academic
Press) содержит описания систем, представляет новые
применения компьютерной алгебры, а также исследовательские
статьи в этой области.
Другой журнал, специализирующийся в области компьютерной
алгебры, - это SIGSAM Bulletin, выпускаемый уже
упоминавшейся нами группой SIGSAM. Это весьма неформальный журнал,
содержащий наряду с научными статьями задачи, объявления о
' На конференции EUROCAL-87, состоявшейся в июне 1987 г.
в Лейпциге, в связи с тем что в организации и проведении
европейских конференций по компьютерной алгебре принимают
активное участие представители других частей света, было
принято решение называть в дальнейшем подобные конференции
Международными симпозиумами по символьным и алгебраическим
вычислениям (ISAAC). Симпозиум ISAAC-88 совместно с 6-й
международной конференцией по прикладной алгебре,
алгебраическим алгоритмам и кодам, исправляющим ошибки (ААЕСС-6),
проходил в Риме в июле 1988 г. Симпозиум ISAAC-89 совместно
с 7-й международной конференцией по прикладной алгебре,
алгебраическим алгоритмам и кодам, исправляющим ошибки
(ААЕСС-7), проходил в Портленде 17-19 июля 1989 г. Труды
конференций EUROCAL-87 и ISAAC-88/AAECC-6 опубликованы в
серии Lecture Notes in Computer Science (№ 378 и 358),
труды конференции ISSAC-89 опубликованы издательством АСМ-
PRESS. - прим. перев.
Добавлено при переводе.
Компьютерная алгебра 313
конференциях, научные отчеты, новые версии систем и т.д.
Во Франции имеется группа компьютерной алгебры GRECO,
организующая ежегодные конференции. Труды этих конференций,
наряду с другими интересными статьями публикуются в обзоре
CALSYF, редактируемом Миньоттом из Страсбургского
университета. Это позволяет следить за деятельностью французов в
данной области.
[Abbott et al. 1985] Abbott J.A., Bradford R.J. & Davenport
J.H, A Remark on Factorisation. SIGSAM Bulletin 19
A985), 2, pp. 31-33,37.
[Abbott et aL 1987] Abbott J.A., Bradford R.J. & Davenport
J.H, A Remark on Sparse Polynomial Multiplication. To
appear.
[Abdali et aL 1977] Abdali S.K., Caviness B.F. & Pridor
A., Modular Polynomial Arithmetic in Partial Fraction
Decomposition. Proc. 1977 MACSYMA Users' Conference,
NASA publication CP-2012, National Technical
Information Service, Springfield, Virginia, pp. 253-261.
[Aho et al.y 1974] Aho A.V., Hopcroft J.E & Ullman J.D. The
Design and Analysis of Computer Algorithms. Addison-
. Wesley, 1974. [Имеется перевод: Ахо А., Хопкрофт Дж.,
Ульман Дж. Построение и анализ вычислительных
алгоритмов. - М.: Мир, 1979.]
[Allen et aL 1978] Allen J.R., The Anatomy of LISP.
McGraw-Hill, New York, 1978.
[Arnon 1985] Arnon D.S., On Mechanical Quantifier
Elimination for Elementary Algebra and Geometry: Solution of
a Nontrivial Problem. Proc EUROCAL 85, Vol. 2
[Springer Lecture Notes in Computer Science Vol. 204, Sprin-
ger-Verlag, 1985], pp. 270-271.
[Arnon, Smith 1983] Arnon D.S. & Smith S.F., Towards
Mechanical Solution of the Kahan Ellipse , Problem I. Proc.
EUROCAL 83 [Springer Lecture Notes in Computer Science
162, Springer-Verlag, Berlin, Heidelberg, New York,
1983], pp. 36-44.
[Arnon et aL 1984a] Arnon D.S., Collins G.E. & McCallum
314 Литература
S., Cylindrical Algebraic Decomposition I: The Basic
Algorithm. SIAM J. Сотр. 13 A984), pp. 865-877.
[Arnon et al 1984b] Arnon D.S., Collins G.E. & McCallum
S., Cylindrical Algebraic Decomposition I: An
Adjacency Algorithm for the Plane. SIAM J. Сотр. 13 A984),
pp. 878-889.
[Bareiss 1968] Bareiss E.H., Sylvesters Identity and Mul-
tistep Integerpreserving Gaussian Elimination. Math.
Сотр. 22 A968), pp. 565-578.
[Bateman, Danielopoulos 1981] Bateman S.O.,Jr., & Danielo-
poulos S.D., Computerised Analytic Solutions of Second
Order Differential Equations. Computer J. 24 A981),
pp. 180-183.
[Berlekamp 1967] Berlekamp E.R., Factoring Polynomials over
Finite Fields. Bell System Tech. J. 46 A967), pp.
1853-1859.
[Borodin et al. 1985] Borodin A., Fagin R., Hopcroft J.E. &
Tompa M., Decreasing the Nesting Depth of an
Expression Involving Square Roots. J. Symbolic Сотр. 1
A985), pp. 169-188.
[Brent 1970] Brent R.P., Algorithms for Matrix
Multiplication. Report CS 157, Computer Science Department,
Stanford University, March 1970. (Результаты описаны в
книге [Knuth 1981], с. 482.)
[Brown 1969] Brown W.S., Rational Exponential Expressions
and a Conjecture concerning 71 and e. Amer. Math.
Monthly 76 A969), pp. 28-34.
[Brown 1971] Brown W.S., On Euclid's Algorithm and the
Computation of Polynomial Greatest Common Divisors. J.
ACM 18 A971), pp. 478-504.
[Buchberger 1970] Buchberger В., Ein algorithmisches Krite-
rium fur die Losbarkeit eines algebraischen Glei-
chungssystems. Aequationes Mathematicae 4 A970), pp.
374-383.
[Buchberger 1976a] Buchberger В., Theoretical Basis for the
Reduction of Polynomials to Canonical Forms. SIGSAM
Bulletin 39 (Aug. 1976), pp. 19-29.
Компьютерная алгебра 315
[Buchberger 1976b] Buchberger В., Some Properties of
Grobner-Bases for Polynomial Ideals. SIGSAM Bulletin
40 (Nov. 1976), pp. 19-24.
[Buchberger 1979] Buchberger В., A Criterion for Detecting
Unnecessary Reductions in the Construction of Groebner
Bases. Proceedings of the 1979 European Symposium on
Symbolic and Algebraic Computation [Springer Lecture
Notes in Computer Science 72, Springer-Verlag, Berlin,
Heidelberg, New York, 1979], pp. 3-21.
[Buchberger 1981] Buchberger В., H-Bases and Grobner-Bases
for Polynomial Ideals. CAMP-Linz publication 81-2.0,
University of Linz, Feb. 1981.
[Buchberger 1983] Buchberger В., A Note on the Complexity
of Computing Grobner-Bases. Proc. EUROCAL 83 [Springer
Lecture Notes in Computer Science 162, Springer-Ver-
lag, Berlin, Heidelberg, New York, 1979], pp. 137-145.
[Buchberger 1985] Buchberger В., A Survey on the Method of
Groebner bases for Solving Problems in Connection with
Systems of Multivariate Polynomials. Proc. 2nd RIKEN
Symposium Symbolic & Algebraic Computation (ed. N.
Inada & T. Soma), World Scientific Publ., 1985, pp.
69-83.
[Buchberger et al. 1982] Buchberger В., Collins G.E. &
Loos R. (editors), Symbolic & Algebraic Computation.
Computing Supplementum 4, Springer-Verlag, Wien, New
York, 1982. [Имеется перевод: Компьютерная алгебра.
Символьные и алгебраические вычисления. - М.: Мир,
1986.]
[Capelli 1901] Capelli A., Sulla riduttibilita della fun-
zione xn-A in campo qualunque di rationalita. Math.
Ann. 54 A901), pp. 602-603.
[Cauchy 1829] Cauchy A.-L., Exercises de Mathematiques Qua-
trieme Annee. De Bure' Freres, Paris, 1829. CEuvres,
Ser. II. Vol. IX, Gauthier-Villars; Paris, 1891.
[Char et al. 1985] Char B.W., Geddes K.O., Gonnet G.H.,
Watt S.M., Maple user's guide. Watcom Publications,
Waterloo 1985.
316 Литература
[Cherry 1983] Cherry G.W., Algorithms for Integrating
Elementary Functions in Terms of Logarithmic Integrals
and Error Functions. Ph. D.Thesis, Univ. Delaware,
August 1983.
[Cherry 1985] Cherry G.W., Integration in Finite Terms with
Special Functions: the Error Function. J. Symbolic
Сотр. 1 A985), pp. 283-302.
[Cherry, Caviness 1984] Cherry G.W. & Caviness B.F.,
Integration in Finite Terms with Special Functions: A
Progress Report. Proc. EUROSAM 84 [Springer Lecture Notes
in Computer Science 174, Springer-Verlag, Berlin,
Heidelberg, New York, Tokyo, 1984], pp. 351-359.
[Chou, Collins 1982] Chou T.-W. & Collins G.E., Algorithms
for the solution systems of linear Diophantine
equations. SIAM J. Сотр. 11 A982), pp. 687-708.
[Collins 1971] Collins G.E., The Calculation of
Multivariate Polynomial Resultants. J. ACM 18 A971), pp. 515-
532.
[Collins 1975] Collins G.E., Quantifier Elimination for
Real Closed Fields by Cylindrical Algebraic
Decomposition. Proc. 2nd GI Conf. Automata Theory and Formal
Languages (Springer Lecture Notes in Computer Science
33), pp. 134-183.
[Collins, Loos 1982] Collins G.E. & Loos R., Real Zeros of
Polynomials. Symbolic & Algebraic Computation
(Computing Supplementum 4) (ed. B.Buchberger, G.E.Collins &
R.Loos) Springer-Verlag, Wien, New York, 1982, pp. 83-
94. [Имеется перевод: Коллинз Дж., Лоос Р.,
Вещественные нули полиномов. - В кн.: Компьютерная алгебра.
Символьные и алгебраические вычисления. - М.: Мир,
1986, с. 112-126.]
[Coppersmith, Davenport 1985] Coppersmith D. & Davenport
J.H., An Application of Factoring. J. Symbolic Сотр. 1
A985), pp. 241-243
[Coppersmith, Winograd 1982] Coppersmith D. & Winograd S.,
On the Asymptotic Complexity of Matrix Multiplication.
SIAM J. Сотр. 11 A982), pp. 472-492.
Компьютерная алгебра 317
[Coppersmith et al. 1986] Coppersmith D., Odlyzko A.M. &
Schroeppel R., Discrete Logarithms in GF(p). Algorith-
mica 1 A986), pp. 1-15.
[Coxeter 1961] Coxeter H.S.M., Introduction to Geometry.
Wiley, New York, 1961.
[Davenport 1981] Davenport J.H., On the Integration of
Algebraic Functions. Springer Lecture Notes in Computer
Science 102, Springer-Verlag, Berlin, Heidelberg, New
York, 1981. [Имеется перевод: Дэвенпорт Дж.
Интегрирование алгебраических функций. - М.: Мир, 1985.]
[Davenport 1982] Davenport J.H., On the Parallel Risch
Algorithm (I). Proc. EUROCAM,82 [Springer Lecture Notes
in Computer Science 174, Springer-Verlag, Berlin,
Heidelberg, New York, 1982], pp. 144-157.
[Davenport 1984a] Davenport J.H., Integration algorithmique
des fonctions elementairement transcendantes sur une
coubre algebrique. Annales de l'lnstitut Fourier 34
A984), pp. 271-276.
[Davenport 1984b] Davenport J.H., y'+fy = g. Proc. EURO-
SAM 84 [Springer Lecture Notes in Computer Science
174, Springer-Verlag, Berlin, Heidelberg, New York,
Tokyo, 1984], pp. 341-350.
[Davenport 1984c] Davenport J.H., Solutions of Inhomoge-
neous Differential Equations. preprint, Journees
educations differentielles dans le champ complexe,
June 1984. To appear in the SIGSAM Bulletin.
[Davenport 1985a] Davenport J.H., Closed. Form Solutions of
Ordinary Differential Equations. Proc. 2nd RIKEN
Symposium Symbolic & Algebraic Computation (ed. N. Inada
& T. Soma), World Scientific Publ., 1985, pp. 183-195.
[Davenport 1985b] Davenport J.H., Computer Algebra for
Cylindrical Algebraic Decomposition. TRITA-NA-8511,
NADA, KTH, Stockholm, Sept. 1985.
[Davenport 1985c] Davenport J.H., On the Risch Differential
Equation Problem. SIAM J. Сотр. 15 A986), pp. 903-918.
[DavenpOTt 1986] Davenport J.H., On a "Piano Movers"
Problem. SIGSAM Bulletin 20 A986), 1&2, pp. 15-17.
318 Литература
[Davenport, Heintz 1987] Davenport J.H. & Heintz J., Real
Quantifier Elimination is Doubly Exponential. To
appear in J. Symbolic Сотр.
[Davenport, Padget 1987] Davenport J.H. & Padget J. A., On
Number Bases for Symbolic Computation. To appear.
[Davenport, Tournier 1983] Davenport J.H. & Tournier E.,
Definition syntaxique de RLISP. Rapport Interne, IMAG,
1983.
[Delaunay 1960] Delaunay Ch., Theorie du mouvement de la
lune. Extract from the Comptes Rendus de TAcademie
des Sciences, Vol LI.
[Delia Dora, Tournier 1981] Delia Dora J. & Tournier E.,
Formal Solutions of Differential Equations in the
Neighborhood of Singular Points (Regular and
Irregular). Proceedings of the 1981 ACM Symposium on
Symbolic and Algebraic Calculation, ACM Inc., New York,
1981, pp. 25-29.
[Delia Dora, Tournier 1984] Delia Dora J. & Tournier E.,
Homogeneous Linear Differential Equations (Frobenius-
Boole Method). Proc. EUROSAM 84 [Springer Lecture
Notes in Computer Science 174, Springer-Verlag, Berlin,
Heidelberg, New York, Tokyo, 1984], pp. 1-12.
[Delia Dora, Tournier 1986] Delia Dora J. & Tournier E.,
Solutions formelles asymptotiques d'equations recurrentes li-
neaires: methode de Pincherle-Ramis. Research report,
IMAG, Grenoble.
[Delia Dora et al 1982] Delia Dora J. Dicrescenzo С &
Tournier E., An Algorithm to Obtain Formal Solutions
of a Linear Homogeneous Differential Equation at an
Irregular Singular Point. Proc. EUROCAM 82 [Springer
Lecture Notes in Computer Science 144, Springer-
Verlag, Berlin, Heidelberg, New York, 1982], pp. 273-
280.
[Delia Dora et al. 1985] Delia Dora J. Dicrescenzo С &
Duval D., About a new Method for Computing in
Algebraic Number Fields. Proc. EUROCAL 85, Vol. 2 [Springer
Lecture Notes in Computer Science 204, Springer-
Компьютерная алгебра 319
Verlag, Berlin, Heidelberg, New York, Tokyo, 1985],
pp. 289-290.
[Dicrescenzo, Duval 1984] Dicrescenzo С & Duval D.,
Computations on Curves. Proc. EUROSAM 84 [Springer Lecture
Notes in Computer Science 174, Springer-Verlag,
Berlin, Heidelberg, New York, Tokyo, 1984], pp. 100-107.
[Dicrescenzo, Duval 1985] Dicrescenzo С & Duval D.,
Algebraic Computation on Algebraic Numbers. Computers and
Computing (ed. P. Chenin, С Dicrescenzo, F. Robbert),
Masson and Wiley, 1985, pp. 54-61.
[Duval 1987a] Duval D., An algorithmic proof of the
resultant formula. To appear (also in [Duval 1987b]).
[Duval 1987b] Duval D., Di verses questions relatives au
Calcul Formel avec des nombers algebriques. These
d'Etat, Universite I de Grenoble, April 1987.
[Dubreuil 1963] Dubreuil P., Algebre. Gauthier-Villars,
Paris, 1963.
[Ehrhard 1986] Ehrhard Т., Personal communication, March
1986.
[Fitch 1974] Fitch J.P., CAMAL Users' Manual. University of
Cambridge Computer Laboratory, 1974.
[Fitch 1985] Fitch J. P., Solving Algebraic Problems with
REDUCE. J. Symbolic Сотр. 1 A985), pp. 211-227.
[Gebauer, Kredel 1984] Gebauer P. & Kredel, K, Note on
"Solution of a General System of Equations". S1GSAM
Bulletin 18 A984) 3, pp. 5-6.
[Giusti 1984] Giusti M., Some Effectivity Problems in
Polynomial Ideal Theory. Proc. EUROSAM 84 [Springer
Lecture Notes in Computer Science 174, Springer-Verlag,
Berlin, Heidelberg, New York, Tokyo, 1984], pp. 159-
171.
[Gregory, Krishnamurthy 1984] Gregory R.T. & Krishnamurthy
E.V., Methods and Applications of Error-free
Computation. Springer-Verlag, New York, 1984, pp. 159-171.
[Имеется перевод: Грегори Р., Кришнамурти Е.
Безошибочные вычисления. Методы и. приложения. - М.: Мир,
1988.]
320 Литература
[Griesmer et al. 1975] Griesmer J.H., Jenks R.D. & Yun
D.Y.Y., SCRATCHPAD User's Manual. IBM Research
Publication RA70, June 1975.
[Hadamard 1893] Hadamard J., Resolution d'une Question
Relative aux Determinants. Bull, des Sci. Math. B) 17
A893), pp. 240-246. CEuvres, CNRS, Paris, 1968, Vol.1,
pp. 239-245.
[Hearn 1987] Hearn A.C., REDUCE-3 User's Manual, version
3.3, Rand Corporation Publication CP78 G/78)y 1987.
[Heindel 1971] Heindel L.E., Integer Arithmetic Algorithm
for Polynomial Real Zero Determination. J. ACM 18
A971), pp. 535-548.
[Hermite 1872] Hermite C, Sur Fintegration des fractions
rationelles. Nouvelles Annales de Mathematiques, 2
Sen, 11 A872), pp. 145-148. Ann. Scientifiques de
l'Ecole Normale Superieure, 2 Ser 1 A872), pp. 215-
218.
[Hilali 1982] Hilali A., Contribution a l'etude de points
singuliers des systemes differentiels lineaires. These
de trousieme cycle, IMAG, Grenoble, 1982.
[Hilali 1983] Hilali A., Characterization of a Linear
Differential System with a Regular Singularity. Proc.
EUROCAL 83 [Springer Lecture Notes in Computer Science
162, Springer-Verlag, Berlin, Heidelberg, New York,
1983], pp. 68-77.
[Hilali 1987] Hilali A., Solutions formelles de systemes
differentiels lineaires au voisinage de points
singuliers. These d'Etat, Universite I de Grenoble, June
1987.
[Horowitz 1969] Horowitz E., Algorithm for Symbolic
Integration of Rational Functions. Ph. D. Thesis, Univ. of
Wisconsin, November 1969.
[Horowitz 1971] Horowitz E., Algorithms for Practical
Fraction Decomposition and Rational Function Integration.
Proc. Second Symposium on Symbolic and Algebraic
Manipulation, ACM Inc., 1971, pp. 441-457.
[Ince 1953] Ince F.L., Ordinary Differential Equations. Do-
Компьютерная алгебра 321
ver Publications, 1953. [Имеется перевод более раннего
издания: Айне Э.Л., Обыкновенные дифференциальные
уравнения. - Харьков: ОНТИ, 1939.]
[Jenks 1984] Jenks R.D., A Primer: 11 Keys to New
SCRATCHPAD. Proc. EUROSAM 84 [Springer Lecture Notes in
Computer Science 174, Springer-Verlag, Berlin,
Heidelberg, New York, Tokyo, 1984], pp. 127-147.
[Johnson 1974] Johnson S.C., Sparse Polynomial Arithmetic.
Proc. EUROSAM 74 (SIGSAM Bulletin Vol. 8, No. 3, Aug.
1974, pp. 63-71).
[Kahrimanian 1953] Kahrimanian H.G., Analytic
differentiation by a digital computer. M.A. Thesis, Temple U.,
Philadelphia, Pennsylvania, May X953.
[Kaltofen et al. 1981] Kaltofen E., Musser D.R.. &
Saunders B.D., A Generalized Class of Polynomials that are
Hard to Factor.. Proceedings of the 1981 ACM Symposium
on Symbolic and Algebraic Computation, ACM Inc., New
York, 1981, pp. 188-194.
[Kaltofen et ai 1983] Kaltofen E., Musser D.R. &
Saunders B.D., A Generalized Class of Polynomials that are
Hard to Factor. SIAM J. Сотр. 12 A983), pp. 473-483.
[Knuth 1969] Knuth D.E., The Art of Computer Programming,
Vol II, Semi-numerical Algorithms, Addison-Wesley,
1969. [Имеется перевод: Кнут Д. Искусство
программирования для ЭВМ. Т. 2.-М.: Мир, 1977.]
[Knuth 1973] Knuth D.E., The Art of Computer Programming,
Vol I, Fundamental Algorithms, 2nd Edn., Addison-
Wesley, 1973. [Имеется перевод: Кнут Д. Искусство
программирования для ЭВМ. Т. 1. - М.: Мир, 1976.]
[Knuth 1981] Knuth D.E., The Art of Computer Programming,
Vol II, Semi-numerical Algorithms, 2nd Edn., Addison-
Wesley, 1981.
[Kovacic 1977] Kovacic J. J., An Algorithm for solving
Second Order Linear Homogeneous Differential Equations.
Preprint, Brooklyn College, City University of New York.
[Kovacic 1986] Kovacic J. J., An Algorithm for solving
Second Order Linear Homogeneous Differential Equations.
176—21
322 Литература
J. Symbolic Сотр. 2 A986), pp.3-43
[Krishnamurthy 1985] Krishnamurthy E.V., Error-free
Polynomial Matrix Computations. Springer-Verlag, New-York,
1985.
[Landau 1905] Landau E., Sur Quelques Theoremes de M. Pet-
rovitch Relatifs aux Zeros des Fonctions Analytiques.
Bull. Soc. Math. France 33 A905), pp. 251- 261
[Lang 1965] Lang S., Algebra. Addison-Wesley, Reading,
Mass., 1965. [Имеется перевод: Ленг С, Алгебра. - М:
Мир, 1968.]
[Lauer 1982] Lauer M., Computing by Homomorphic Images.
Symbolic & Algebraic Computation (Computing Supplemen-
tum 4) (ed. B. Buchberger, G.E. Collins & R. Loos)
Springer-Verlag, Wien, New York, 1982, pp. 139-168.
[Имеется перевод: Лауэр М. Вычисления с помощью
гомоморфных образов. - В кн.: Компьютерная алгебра.
Символьные и алгебраические вычисления. - М.: Мир,
1986, с. 178-211.]
[Lauer 1983] Lauer M., Generalized p-adic Constructions.
SIAM J. Comp 12 A983), pp. 395-410.
[Lazard 1983] Lazard D., Grobner Bases, Gaussian
Elimination and Resolution of Systems of Algebraic Equation.
Proc. EUROCAL 83 [Springer Lecture Notes in Computer
Science 162, Springer-Verlag, Berlin, Heidelberg, New
York, 1983], pp. 146-157.
[Lazard 1987] Lazard D., Quantifier Elimination: Optimal
Solution for 2 Classic Examples. To appear in J.Symbo-
lic Сотр.
[Lenstra et at. 1982] Lenstra A.K., Lenstra H.W., Jr. &
Lovasz L., Factoring Polynomials with Rational
Coefficients. Math. Ann. 261 A982), pp. 515-534.
[Lipson 1976] Lipson J.D., Newton's Method: a great
Algebraic Algorithm. Proceedings of the 1976 ACM Symposium
on Symbolic and Algebraic Computation, ACM Inc., New
York, pp. 260-270.
[Loos 1982] Loos R., Generalized Polynomial Remainder
Sequences. Symbolic & Algebraic Computation (Computing
Компьютерная алгебра 323
Supplementum 4) (ed. В. Buchberger, G.E. Collins & R.
Loos), Springer-Verlag, Wien, New York, 1982, pp. 115-
137. [Имеется перевод: Лоос Р. Обобщенные
последовательности полиномиальных остатков. - В кн.:
Компьютерная алгебра. Символьные и алгебраические вычисления. -
М.: Мир, 1986, с. 151-171.]
[McCallum 1985a] McCallum S., An Improved Projection
Algorithm for Cylindrical Algebraic Decomposition.
Computer Science Tech. Report 548, Univ. Wisconsin at
Madison, 1985.
[McCallum 1985b] McCallum S., An Improved Projection
Algorithm for Cylindrical Algebraic Decomposition. Proc.
EUROCAL 85, Vol. 2 [Springer Lecture Notes in Computer
Science 204, Springer-Verlag, Berlin, Heidelberg, New
York, Tokyo, 1985], pp. 277-278.
[McCarthy et ai 1965] McCarthy J., Abrahams P.W.,
Edwards W., Hart T.P. & Levin M., The LISP 1.5
Programmers Manual. M.I.T. Press, 1965.
[Macmillan, Davenport 1984] Macmillan R.J., Davenport J.H.,
Factoring Medium-Sized Integers. Computer J. 27
A984), pp. 83-84.
[Marti et ai 1978] Marti J.B., Hearn A.C, Griss M.L. &
Griss C, The Standard LISP Report. Report UCP-60,
University of Utah, Jan. 1978. SIGSAM Bulletin 14
A980), 1, pp. 23-43.
[Mauny 1985] Mauny J. В., These de troisieme cycle, Paris
VII, Sept. 1985.
[Mayr, Mayer 1982] Mayr E. & Mayer A., The Complexity of
the Word Problem for Commutative Semi-groups and
Polynomial Ideals. Adv. in Math. 46 A982), pp. 305-329.
[Mignotte 1974] Mignotte % M., An Inequality about Factors of
Polynomials. Math. Сотр. 28 A974), pp. 1153-1157.
[Mignotte 1981] Mignotte M., Some Inequalities About
Univariate Polynomials. Proceeding of the 1981 ACM
Symposium on Symbolic and Algebraic Computation, ACM Inc.,
New York, 1981, pp. 195-199.
[Mignotte 1982] Mignotte M., Some Useful Bounds. Symbolic &
324 Литература
Algebraic Computation (Computing Supplementum 4) (ed.
B. Buchberger, G.E. Collins & R. Loos), Springer-
Verlag, Wien, New York, 1981, pp. 259-263. [Имеется
перевод: Миньотт М. Некоторые полезные неравенства. -
В кн.: Компьютерная алгебра. Символьные и
алгебраические вычисления. - М.: Мир, 1986, с. 151-171.]
[Mignotte 1986] Mignotte M., Computer versus Paper and
Pencil. CALSYF 4, pp. 63-69.
[Moses 1966] Moses J., Solution of a System of Polynomial
Equations by Elimination. Comm. ACM 9 A966), pp. 634-
637.
[Moses 1967] Moses J., Symbolic Integration. Ph.D. Thesis &
Project MAC TR-47, M.I.T., 1967.
[Moses 1971a] Moses J., Algebraic Simplification - A Guide
for the Perplexed. Comm. ACM 14 A971), pp. 527-537.
[Moses 1971b] Moses J., Symbolic Integration, the stormy
decade. Comm ACM 14 A971), pp. 548-560.
[Musser 1978] Musser D.R., On the Efficiency of a
Polynomial Irreducibility Test. J. -ACM 25 A978), pp. 271-
282.
[Najid-Zejli 1984] Najid-Zejli H., Computation in Radical
Extensions. Proc. EUROSAM 84 [Springer Lecture Notes
in Computer Science 174, Springer-Verlag, Berlin,
Heidelberg, New York, Tokyo, 1984], pp. 115-122.
[Najid-Zejli 1985] Najid-Zejli H., Extensions algebriques:
cas general et cas des radicaux. These de troisieme
cycle, IMAG, Grenoble, 25.6.85.
[Nolan^ 1953] Nolan J., Analytic differentiation on a
digital computer. M.A.Thesis, Math. Dept., M.I.T.,
Cambridge, Massachusetts, May 1953.
[Norman 1975] Norman A.C., Computing with Formal Power
Series. ACM Transactions on Mathematical Software 1
A975), pp. 346-356.
[Norman 1982] Norman A.C., The Development of a Vector-
based Algebra System. Proc. EUROCAM 82 [Springer
Lecture Notes in Computer Science 144, Springer-Verlag,
Berlin, Heidelberg, New York, 1982], pp. 237-248.
Компьютерная алгебра 325
[Norman, Davenport 1979] Norman А. С. & Davenport J.H.,
Symbolic Integration - the Dust Settles? Proceedings of
the 1979 European Symposium on Symbolic and Algebraic
Computation [Springer Lecture Notes in Computer
Science 72, Springer-Verlag, Berlin, Heidelberg, New
York, 1979], pp. 398-407.
[Norman, Moore 1977] Newman A.C. & Moore P.M.A.,
Implementing the new Risch Integration Algorithm. Proc. Symp.
advanced computing methods in theoretical physics,
Marseilles, 1977, pp. 99-110.
[Ostrowski 1946] Ostrowski A.M., Sur Tintegrabilite ele-
mentaire de quelques classes d'expressions. Comm.
Math. Helvet. 18 A946), pp. 283-308.
[Pearce, Hicks 1981] Pearce P.D., & Hicks R.J., The
Optimization of User Programs for an Algebraic Manipulation
System. Proceedings of the 1981 ACM Symposium on
Symbolic and Algebraic Computation, ACM Inc., New York,
1981, pp. 131-136.
[Pearce, Hicks 1982] Pearce P.D., & Hicks R.J., The
Application of Algebraic Optimisation Techniques to
Algebraic Mode Programs for REDUCE. SIGSAM Bulletin 15
A981/2), 4, pp. 15-22.
[Pearce, Hicks 1983] Pearce P.D., & Hicks R.J., Data
Structures and Execution Times of Algebraic Mode
Programs for REDUCE. SIGSAM Bulletin 17 A983), 1, pp.
31-37.
[Probst, Alagar 1982] Probst D. & Alagar V.S., An Adaptive
Hybrid Algorithm for Multiplying Dense Polynomials.
Proc. EUROCAM [Springer Lecture Notes in Computer
Science 144, Springer-Verlag, Berlin, Heidelberg, New
York, 1982], pp. 16-23.
[Puiseux 1850] Puiseux M.V., Recherches sur les fonctions
algebriques. J. Math. Pures et Appliquees 15 A850),
pp. 365-480.
[Ramanujan 1927] Ramanujan S., Problems and Solutions. In
Collected Works (ed. G.H. Hardy, P.V. Secha Ayar &
B.M. Wilson), C.U.P., 1927
326 Литература
[Ramis, Thomann 1980] Ramis J.P. & Thomann J., Remarques
sur l'utilisation numerique des series de factoriel-
les. Seminaire d'analyse numerique, Strasbourg No.
364, 1980.
[Ramis, Thomann 1981] Ramis J. P. & Thomann J., Some
Comments about the Numerical Utilization of Factorial
Series Methods in the Study of Critical Phenomena.
Springer-Verlag, Berlin, Heidelberg, New York, 1981.
[Richard 1986] Richard F., Representation graphiques de
solution d'equations differentielles dans le champ
complexe. Rapport de recherche, IRMA, Strasbourg.
[Richards, Whitby-Strevens 1979] Richards M. & Whitby-
Strevens C, BCPL, The Language and its Compiler.
C.U.P., 1979.
[Richardson 1968] Richardson D., Some Unsolvable Problems
Involving Elementary Functions of a Real Variable. J.
Symbolic Logic 33 A968), pp. 511-520.
[Risch 1969] Risch R.H., The Problem of Integration in
Finite Terms. Trans. A.M.S. 139 A969), pp. 167-189.
[Risch 1979] Risch R.H., Algebraic Properties of the
Elementary Functions of Analysis. Amer. J. Math. 101
A979), pp. 743-759.
[Rosenlicht 1976] Rosenlicht M., On Liouville's Theory of
Elementary Functions. Pacific J. Math 65 A976), pp.
485-492.
[Rothstein 1976] Rothstein M., Aspects of Symbolic
Integration and Simplification of Exponential and
Primitive Functions. Ph. D. Thesis, Univ. of
Wisconsin, Madison, 1976 (Xerox University Microfilms
77-8809.)
[Sasaki, Murao 1981] Sasaki T. & Murao H., Efficient
Gaussian Elimination Methods for Symbolic Determinants and
Linear Systems. Proceedings of the 1981 ACM Symposium
on Symbolic and Algebraic Computation, ACM Inc., New
York, 1981, pp. 155-159.
[Sasaki, Murao 1982] Sasaki T. & Murao HL, Efficient
Gaussian Elimination Method for Symbolic Determinants and
Компьютерная алгебра 327
Linear Systems. ACM Transactions on Mathematical
Software 8 A982), pp.277-289.
[Saunders 1981] Saunders B.D., An Implementation of
Kovacic's Algorithm for Solving Second Order Linear
Homogeneous Differential Equations. Proceedings of the
1981 ACM Symposium on Symbolic and Algebraic
Computation, ACM Inc., New York, 1981, pp. 105-108.
[Schwarts, Sharir 1983a] Schwarts J.T. & Sharir M., On the
"Piano Movers" Problem II. General Techniques for
Computing Topological Properties of Real Algebraic
Manifolds. Advances Appl. Math. 4 A983), pp. 298-351.
[Schwarts, Sharir 1983b] Schwarts J.T. & Sharir M., On the
"Piano Movers" Problem II. Coordinating the Motion of
Several Independent Bodies: The Special Case of
Circular Bodies Moving Amidst Polygonal Barriers. Int.. J.
Robot. Res. 2 A983), pp. 46-75.
[Singer 1981] Singer M.F., Liovillian Solution of я-th
Order Homogeneous Linear Differential Equations. Amer.
J. Math. 103 A981), pp. 661-682.
[Singer 1985] Singer M.F., Solving Homogeneous Linear
Differential Equations in Terms of Second Order Linear
Differential Equations. Amer. J. Math. 107 A985), pp.
663-696.
[Singer, Davenport 1985] Singer M.F. & Davenport J.H.,
Elementary and Liovillian Solution of Linear Differential
Equations. Proc. EUROCAL 85 [Springer Lecture Notes in
Computer Science 204, Springer-Verlag, Berlin,
Heidelberg, New York, Tokyo, 1985], pp. 595-596.
[Singer, Davenport 1986] Singer M.F. & Davenport J.H.,
Elementary and Liovillian Solution of Linear Differential
Equations. J. Symbolic Сотр. 2 A986), pp.237-260.
[Singer et al. 1981] Singer M.F., Saunders B.D. & Caviness
B.F., An Extension of Liouville's Theorem on
Integration in Finite Terms. Proceedings of the 1981 ACM
Symposium on Symbolic and Algebraic Computation, ACM
Inc., New York, 1981, pp. 23-24.
[Singer et al. 1985] Singer M.F., Saunders B.D. & Caviness
328 Литература
B.F., An Extension of Liouvi lie's Theorem on
Integration in Finite Terms. SIAM J. Сотр. 14 A985) pp. 966-
990.
[Slagle 1961] Slagle J., A Heuristic Program that Solves
Symbolic Integration Problems in Freshman Calculus.
Ph. D. Dissertation, Harvard U., Cambridge, Mass. May
1961.
[Smit 1981] Smit J., A Cancellation Free Algorithm, with
Factoring Capabilities, for the Efficient Solution of
Large Sparse Sets of Equations. Proceedings of the
1981 ACM Symposium on Symbolic and Algebraic
Computation, ACM Inc., New York, 1981, pp. 146-154.
[Strassen 1969] Strassen V., Gaussian Elimination is not
Optimal. Numer. Math. 13 A969), pp. 354-356.
[Tarski 1951] Tarski A., A Decision » Method for Elementary
Algebra and Geometry. 2nd ed., Univ. California Press,
Berkeley, 1951.
[Tournier 1987] Tournier E., Solutions formelles d'equa-
tions differentielles: Le logiciel de calcul formel
DESIR. These d'Etat, Universite I de Grenoble, April
1987.
[Trager 1976] Trager B.M., Algebraic Factoring and Rational
Function Integration. Proceedings of the 1976 ACM
Symposium on Symbolic and Algebraic Computation, ACM
Inc., New York, 1976, pp. 219-226.
[Trager 1985] Trager B.M., On the Integration of Algebraic
Functions. Ph.D. Thesis, Dept. of Electrical
Engineering & Computer Science, M.I.Т., August 1985.
[Viry 1982] Viry G., Factorisation des polynomes a plu-
sieurs variables. RAIRO Inform. Theor. 12 A979), pp.
209-223.
[van der Waerden 1949] van der Waerden,B.L., Modern
Algebra. Frederick Ungar, New York, 1949. [Имеются
переводы: ван дер Варден Б. Л. Современная алгебра, т. 1,2
(пер. 2-го изд. 1937, 1940 гг.). - М.: ГОНТИ, 1947;
Б. Л. ван дер Варден Б. Л. Алгебра. - М.: Наука, 1976
(пер. изд. 1971 г.).]
Компьютерная алгебра 329
[Wang 1978] Wang P.S., An Improved Multivariable Polynomial
Factorising Algorithm. Math. Сотр. 32 A978), pp.
1215-1231.
[Wang 1980] Wang P.S., The EEZ-GCD Algorithm. SIGSAM
Bulletin 14 A980), 2, pp. 50-60.
[Wang 1981] Wang P.S., A p-adic Algorithm for Univariate
Partial Fractions. Proceedings of the 1981 ACM
Symposium on Symbolic and Algebraic Computation, ACM Inc.,
New York, 1981, pp. 212-217.
[Wang 1983] Wang P.S., Early Detection of True Factors in
Univariate Polynomial Factorisation. Proc. EUROCAL 83
[Springer Lecture Notes in Computer Science 162,
Springer-Verlag, Berlin, Heidelberg, New York, 1983],
pp. 225-235.
[Wang et al. 1982] Wang P.S., Guy M.J.T. & Davenport,J.H.,
p-adic Reconstruction of Rational Numbers. SIGSAM
Bulletin 16 A982), pp. 2-3.
[Wasow 1965] Wasow W., Asymptotic Methods for Ordinary
Differential Equations. Kxeiger Publ. Co., New York,
1965.
[Watanabe 1976] Watanabe S., Formula Manipulation Solving
Linear ODEs II. Publ. RIMS Kyoto Univ. 11 A976), pp.
297-337.
[Watanabe 1981] Watanabe S., A Technique for Solving
Ordinary Differential Equations Using Riemann's
p-functions. Proceedings of the 1981 ACM Symposium on
Symbolic and Algebraic Computation, ACM Inc., New
York, 1981, pp. 36-43.
[Wilkinson 1959] Wilkinson J.H., The Evaluation of the
Zeros of Illconditioned Polynomials. Num. Math. 1
A959), pp. 150-166, 167-180.
[Winograd 1968] Winograd S., A New Algorithm for Inner
Product. IEEE Trans. Computers C-17 A968), pp. 693-694.
[Winston, Horn 1981] Winston P.H. & Horn B.K.P., LISP.
Addison-Wesley, 1981. (The 2nd ed., 1984 is written for
Common LISP.)
[Wunderlicht 1979] Wunderlicht M.C., A Running-Time Analy-
330 Литература
sis of Brillhart's Continued Fraction Factoring
Algorithm. In: Number Theory Carbondale 1979 (ed. M.B.
Nathanson) [Springer Lecture Notes in Mathematics 751,
Springer- Verlag, BerHn, Heidelberg, New York, 1979],
pp. 328-342.
[Yun 1974] Yun D.Y.Y, The Hensel Lemma in Algebraic
Manipulation. Ph. D. Thesis & Project MAC TR-138, M.I.T.,
1974 [reprinted Garland Publishing Co., New York,
1980].
[Yun 1976] Yun D.Y.Y, On Square-free Decomposition
Algorithms. Proceedings of the 1976 ACM Symposium on
Symbolic and Algebraic Computation, ACM Inc., New York,
1976, pp. 26-35.
[Yun 1977] Yun D.Y.Y, On the Equivalence of Polynomial Gcd
and Squarefree Factorisation Algorithms. Proc. 1977
MACSYMA User's Conference NASA publication CP-2012,
National Technical Information Service, Springfield,
Virginia, pp. 65-70.
[Zassenhaus 1969] Zassenhaus H., On Hensel Factorisation.
J. Number Theory 1 A969), pp. 291-311.
[Zippel 1979] Zippel R.E., Probabilistic Algorithm for
Sparse Polynomials. Proceedings of the 1979 European
Symposium on Symbolic and Algebraic Computation
[Springer Lecture Notes in Computer Science 72, Sprin-
ger-Verlag, Berlin, Heidelberg, New York, 1979], pp.
216-226.
[Zippel 1985] Zippel R.E., Simplification of Expressions
Involving Radicals. J. Symbolic Сотр. 1 A985), pp.
189-210.
Дополнительная литература
1. Абрамов С. А. Задачи компьютерной алгебры, связанные с
поиском полиномиальных решений линейных
дифференциальных и разностных уравнений. - Вестн. МГУ, сер. 15,
1989, № 3, с. 56-60.
Добавлена переводчиком.
Компьютерная алгебра 331
2. Абрамов С А. Рациональные решения линейных
дифференциальных и разностных уравнений с полиномиальными
коэффициентами. - Журн. выч. мат. и мат. физ., 1989, т. 29,
№ И, с. 1611-1620
3. Аналитические вычисления на ЭВМ и их применение в
теоретической физике. - ОИЯИ, ДИ-80-13, Дубна, 1980.
4. Аналитические вычисления на ЭВМ и их применение в
теоретической физике. - ОИЯИ, Д11-83-511, Дубна, 1983.
5. Аналитические вычисления на ЭВМ и их применение в
теоретической физике. - ОИЯИ, ДИ-85-791, Дубна, 1985.
6. IV Международное совещание по аналитическим вычислениям
на ЭВМ в физических исследованиях (сборник аннотаций).
- ОИЯИ, ЕИ-90-204, Дубна, 1990.
7. Арайс Е.А., Яковлев Н.Е. Автоматизация аналитических
вычислений в научных исследованиях. - Новосибирск:
Наука, 1985.
8. Бухбергер Б. Базисы Гребнера. Алгоритмический метод в
теории полиномиальных идеалов. - В кн.: Компьютерная
алгебра. Символьные и алгебраические вычисления. - М.:
Мир, 1986, с. 331-372.
9. Вычислительная математика и вычислительная техника,
вып.З. - Харьков: ФТИНТ АН УССР, 1972.
10. Гельфонд А. О. Трансцендентные и алгебраические числа. -
М.: Гостехиздат, 1952.
11. Гердт В.П., Григорьев Д.Ю. Обзор: Алгоритмы, системы и
применения компьютерной алгебры. - В кн.: Компьютерная
алгебра. Символьные и алгебраические вычисления. - М.:
Мир, 1986, с. 373-383.
12. Гердт В. П., Тарасов О. В., Шйрков Д. В. Аналитические
вычисления на ЭВМ в приложении к физике и математике.
- УФН, 1980, т. 130, вып. 1, с. 113-147.
13. Глушков В.М., Бондарчук В.Г., Гринченко Т.А. Аналитик -
алгоритмический язык для описания процессов с
использованием аналитических преобразований. - Кибернетика,
1971, № 3, с. 102-134.
14. Григорьев Д.Ю. Разложение многочленов над конечным
полем и решение систем алгебраических уравнений. - Зап.
332 Литература
науч. семинаров. Ленингр. отд-ние Мат. ин-т АН СССР,
1984, т. 137, 20-79.
15. Григорьев Д.Ю. Эффективные алгоритмы для символьного
решения систем полиномиальных уравнений и неравенств.
- В [5] с. 202-207.
16. Григорьев Д.Ю. Сложность разрешения теории первого
порядка алгебраически замкнутых полей. - Изв. АН СССР,
Сер. мат., 1986, т. 50, № 5, с. 1106-1120.
17. Григорьев Д.Ю., Чистов А. Л. Быстрое разложение
многочленов на неприводимые и решение систем алгебраических
уравнений. - Докл. АН СССР, 1984, т. 275, № 6, с.
1302-1306.
18. Грошева М.В., Ефимов Г. Б. О системах аналитических
вычислений на ЭВМ. - В [30] с. 5-29.
19. Грошева М.В. Прикладные и эксплуатационные возможности
систем аналитических вычислений. - В [30] с. 30-37.
20. Турин Н.И., Скоморохов А. Г. Аналитические вычисления в
системе REDUCE. Справ, пособие. - Минск: Наука и
техника, 1989.
21. Еднерал В.Ф., Крюков А.П., Родионов А.Я- Язык
аналитических вычислений REDUCE. - М.: Изд-во МГУ, 1988.
22. Закс М.Б. Аналитические преобразования на ЕС ЭВМ. -
Саратов: Изд-во Саратов, ун-та, 1981.
23. Климов Д.М., Руденко В.М. Методы компьютерной алгебры в
задачах механики. - М.: Наука, 1989.
24. Кондратьева М.В., Панкратьев Е.В., Серов Р.Е.
Вычисления в дифференциальных и разностных модулях. - В [5]
с. 208-213.
25. Кондратьева М.В., Панкратьев Е.В. Алгоритмы вычисления
характеристических многочленов Гильберта.. - В [30] с.
129-146.
26. Латышев В.Н. Конструктивная теория колец. Стандартные
базисы. - М.: Изд-во МГУ, 1988.
27. Люстерник Л.А. Абрамов А.А, Шестаков В.И., Шура-Бура
М.Р. Решение математических задач на автоматических
цифровых машинах. - М.: Изд-во АН СССР, 1952.
28. Малашонок Г. И. Система линейных уравнений над коммута-
Компьютерная алгебра 333
тивным кольцом. - Львов: ФМИ АН УССР, 1986 (препринт
№114).
29. Михалев А. В., Панкратьев Е.В. Компьютерная алгебра.
Вычисления в дифференциальной и разностной алгебре. -
М.: Изд-во МГУ, 1989.
30. Пакеты прикладных программ. Аналитические
преобразования. - М.: Наука, 1988.
31. Панкратьев Е.В. Компьютерная алгебра. Факторизация
многочленов. - М.: Изд-во МГУ, 1988.
32. Системы для аналитических преобразований в механике.
Тезисы докладов Всесоюзной конференции. - Горький:
ГГУ, 1984.
33. Теория и практика автоматизированных систем
аналитических преобразований. Тезисы . докладов республиканской
научной конференции. - Вильнюс: Лит. НИИНТИ, 1984.
34. Чистов А.Л. Алгоритм полиномиальной сложности для
разложения многочленов и нахождения компонент
многообразия в субэкспоненциальное время. - Зап. науч.
семинаров. Ленингр. отд-ние Мат. ин-т АН СССР, 1984, т. 137,
с. 124-188.
35. Akritas A.G. Elements of computer algebra with
applications. New York: Wiley, 1989.
36. Boyle A. Caviness B.F. (eds) Future directions for
research in symbolic computation. Report of a workshop
on symbolic and algebraic computation. April 29-30
1988 Washington, DC. Published by the Society for
industrial and applied mathematics Philadelphia, 1989.
.37. Bronstein M., Davenport J.H., Trager B.M. Symbolic
integration is algorithmic! Препринт доклада на
конференции Computers and Mathematics, Portland, 15 June
1989.
38. Carra' Ferro G. Some properties of the lattice points
and their application to differential algebra,
Communication in Algebra. 15 A987), pp. 2625-2632.
39. Carra' Ferro G. Grobner Bases* and Differential Algebra,
Lect. Notes Comput. Sci. 356, Springer-Verlag, 1989,
pp. 129-140
334 Литература
40. Chou Shang-Ching Mechanical geometry theorem proving.
Dordrecht: D.Reidel Publishing Company, 1987.
41. Chudnovsky D.V., Jenks R.D. (eds) Computer algebra.
Lect. Notes in Pure and Applied Math. 113, New York:
Dekker, 1989.
42. Davenport J.H. (ed.) EUROCAL'87 European Conference on
Computer Algebra. Leipzig, GDR, June 2-5, 1987.
Proceedings, Lect. Notes Comput. Sci. 378, Springer-
Verlag, 1989.
43. Davenport J.H., Trager B. Scratchpad's Theory of
Algebra. I: Basic Commutative Algebra. To appear in Proc.
DISCO-90 (Springer LNCS).
44. Galigo A., Traverso С Practical determination of the
dimension of an algebraic variety. In [47] pp. 46-52.
45. Girding L., Tambour T. Algebra for computer science.
New York: Springer-Verlag, 1988.
46. Gianni (ed.) Symbolic and Algebraic Computation.
International Symposium ISSAC88, Rome, Italy, July 1988,
Proceedings, Lect. Notes Comput. Sci. 358, Springer-
Verlag 1989.
47. Kaltofen E., Watt S.M. (eds) Computers and Mathematics,
New York: Springer, 1989.
48. Kondrat'eva M.V., Pankrat'ev E.V. A recursive algorithm
for computation of the Hitbert polynomial. In [42] pp.
365-375.
49. Mignotte M. Mathematiques pour le calcul formel, Paris:
Presses Univ. Fr., 1989.
50. Moller H.M., Mora F. New constructive methods in
classical ideal theory, J. Algebra. 100 A986),№ 1, pp.
138-178.
51. Mora F., Moller H.M. The computation of the Hilbert
function. Lect. Notes Comput. Sci. 162, Springer-
Verlag, 1983, pp. 157-167.'
52. Pankrat'ev E.V. Computations in differential and
difference modules. Acta Applicandae Mathematicae 16
A989), pp. 167-189.
53. Pohst M. (ed.) Algorithmic methods in algebra and num-
Компьютерная алгебра 335
ber theory. London: Academic Press, 1987.
54. Pohst M., Zassenhaus H. Algorithmic algebraic number
theory. Cambridge: Cambridge University Press, 1989.
55. Rand R.H., Armbruster D. Perturbation methods,
bifurcation theory and computer algebra. Appl. Math. Sci. 65,
New York: Springer, 1988.
56. Rayna G. REDUCE. Software for Algebraic Computation.
New York: Springer, 1989.
57. Sharpe D. Rings and factorization. Cambridge: Cambridge
University Press, 1987.
58. Proceedings of the ACM-SIGSAM 1989 International
Symposium on Symbolic and Algebraic Computation ISSAC89
July 17-19, 1989 Portland, Oregon. New York: ACM
Press, 1989.
59. Tangora (ed) Computer in algebra. Lect. Notes in Pure
and Appl. Math. Ill, 1988.
60. Tournier E. (ed.) Computer Algebra and Differential
Equations. Academic Press, 1989.
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ
кдамара граница (borne de Hadamard) 184
алгебраическая функция (fonction algebrique) 101, 104
алгебраическое выражение (expression algebrique) 101
— расширение (extension algebrique) 77
— число (nombre algebrique) 101
алгоритм Барейса (methodes de Bareiss) 83, 100, 115
— ьерлекэмпа (algorithme de Berlekamp) 188
— Бухбергера (~ ~ Buchberger) 133
— Гензеля, квадратичный вариант (~ quadratique de Hensel)
198, 201
линейный вариант (~ lineaire de ~) 197
— Евклида (~ d'Euclide) 94
расширенный (~ ~ etendu) 271, 273
— изоляции вещественных корней полинома (~ d'isolement des
racines reelles) 146
— модулярного НОД (~ de p.g.c.d. modulaire) 180
— Ньютона (~ ~ Newton) 199
— разложения полиномов на множители (~ ~ factorisation)
202, 203
— Фробениуса (~ ^ Frobenius) 256
— Цассенхауза (~ ^ Zassenhaus) 193
базис редуцированный (base reduite) 130
— стандартный (Грёбнера) (~ standard (de Grobner)) 129
Барейса алгоритм (methodes de Bareiss) 83, 100, 115
Безу тождество (identite de Bezout) 272
Бесселя уравнение (equation de Bessel) 261
Берлекэмпа алгоритм (algorithme de Berlekamp) 188
— теорема (theoreme ae Berlekamp) 190
Брауна метод (methode de Brown) 86
Бухбергера алгоритм (algorithme de Buchberger) 133
— критерий (critere de Buchberger) 136
Ванга метод (methode de Wang) 211
вариация (variation) 143
взрыв комбинаторный (explosion combinatoire) 194, 210
вложенный радикал (radical imbrique) 101, 103
внутреннее представление (representation interne) 97
вполне редуцированный полином (polynome completement
reduit) 129
Компьютерная алгебрп 337
выражение алгебраическое (expression algcbrique) 101
вычисления ленивые (evalution paresseuse) 124
— матричные, (calcul matriciel) 38
— неявные (~ implicite) 112
— явные (~ explicate) 112
Гаусса исключение (elimination de Gauss) 100, 118
— лемма (lemme de Gauss) 188
Гензеля алгоритм, квадратичный вариант (algorithme quadra-
tique de Hensel) 198, 201
— — линейный вариант (~ lineaire de ~) 197
— лемма (lemme de ~) 195, 198
Гильберта матрица (matrice de Hilbert) 39
— теорема неприводимости (theoreme d'irreductibilite de ~)
207
главная переменная (indeterminee principale) 95
Горовица метод (methode de Horowitz) 221
граница Адамара (borne de Hadarnard) 184
[рёбнера базис (base de Grobner) 12§
Дискриминант (discriminants) 155, 277
дифференцирование (derivation) 47
— формальное (derivation formelle) 215
дроби простейшие (elements simples) 273
дробь правильная (fraction propre) 274
Дэвенпорта теорема (theoreme de Davenport) 240, 245
Евклида алгоритм (algorithme d'Euclide) 94
расширенный (~ ~ etendu) 271, 273
— последовательность (suite ~) 93
естественное представление (representation naturelle) 86
задача интегрирования (probleme d'integration) 217
— планирования движения (de planification du mouvement) 159
идеал (ideal) 126
— нульмерный (~ de dimension zero) 130
изолированный корень (racine isolee) 140
изолирующий интервал (intervalle d'isolement) 140
инвариантное разбиение (decomposition invariante) 149
интегрирование (integration) 61
— алгебраических функций (~ de fonctions, algebriques) 239
— логарифмических функций (~ ^ ~ logarithmiques) 226
— неэлементарных функций (~ ~ ~ non elementaires) 240
— рациональных функций (~ ~ ~ rationelles) 217
— смешанных функций (~ ^ ~ mixtes) 236
— формальное (^ formelle) 215
— экспоненциальных функций (~ de fonctions exponentielles)
231
интервал изолирующий (intervalle d'isolement) 140
176—22
338 Предметный указатель
иррегулярная особенность (singularite irreguliere) 258
исключение Гаусса (elimination de Gauss) 100, 118
каноническое представление, (representation canonique) 85
китайская теорема об остатках (theorerne chiriois des rcstes) 278, 21
— — — — обобщенная (~ ~ ~ ~ generalise) 279, 281
класс эффективный (class effect if) 21/
Кнута метод (methode de-Knuth) 190
— неравенство (inegalite de Knuth) 144
Ковачина теорема (Theorerne de Kovacic) 247
комбинаторный взрыв (explosion combinatoire) 194, 210
компактное представление (representation compacte) 86
композиция (composition) 52
компонента нолуалгебраическая (cornposante semi algebrique) 148
корень изолированный (racine isolee) 140
Koiuu неравенство (inegalite de Cauchy) 144
коэффициент старший (coefficient principal) 205, 209, 210
Крамера правило (methode de Cramer) 114, 118
критерий Ьухбергера (critere de Buchberger) 136
— Мюссе (~ ~ Musser) 204
Ландау - Миньотта неравенство (inegalite de Landau - Mig-
nofte) 164
Ланцоша метод (methode de Lanczos) 118
Лапласа преобразование (transformation de Laplace) 64
лексикографический порядок (ordre lexicographique) 95, 127
лемма Гаусса (lemme de Gauss) 188
— Гензеля ( Hensel) 195, 198
— о разложении (~ ~ Decomposition) 227, 232
— Puma ( Risch) 244, 245
ленивые вычисления (evalution paresseuse) 124
линейное рекуррентное уравнение (equation recurrente
lineaire) 257
линейные уравнения (equations lineaires) 187
Лисп (LISP) 20
лиувиллева образующая (generateur liouvillien) 246
— функция (fonction liouvillienne) 247
Лиувилля принцип (principe de Liouville) 226
логарифм (logarithme) 111
Лорана ряды (series de Laurent) 124
малая теорема Ферма (petit theorerne de Fermat) J89
матрица Гильберта (matrice de Hilbert) 39
— обратная (~ inverse) 184
— плотная (~ dense) 113
— разреженная (~ creuse) 117
— Сильвестра (^ de Sylvester) 171, 275
матричные вычисления (calcul matriciel) 38
метод Брауна (methode de Brown) 86
— Ванга (~ - Wang) 211
— Горовица (~ ~ Horowitz) 221
— Кнута (- - Knuth) 190
— Ланцоша (~ ~ Lanczos) 118
Компьютерная алгсори 339
метол наивный (methode naive) 218
— Нормана (~ de Norman) 122
— одношаговый (~ "d'un pas") lfG
— Островского (~ d'Ostrowski)
— повторного исключения (~ de 1'elimination repetee) 138
— последовательных приближений (~ d'approximation rcpetee)
119
— сопряженных градиентов (~ des gradients conjugues) 118
— Эрмита (~ de Hermite) 220
Мечина формула (formule de Mechain) 28
многогранник Ньютона (polygone de Newton) 254
многообразие полуалгебраическое (variete semi-algebrique) 148
множители паразитические (facteurs parasites) 209
модулярный ИОД (p.g.c.d modulaire) 168
моном (monome) 95
— старший (~ principal) 128
Мора пример (example de Mora) 137
Морли теорема (theoreme de Morley) 56
Мюссе критерий (critere de Musser) 204
наивный метод (methode naive) 218
некоммутативное умножение (multiplication non commutative)
52
некоммутируютие переменные (indeterminees non-commutatives)
112
неравенство Кнута (inegalite de Knuth) 144
— Коши (~ ~ Cauchy) 144
— Ландау - Миньотта (^ ~ Landau - Mignotte) 164
неявные вычисления (calcul implicite) 112
НОД модулярный (p.g.c.d. modulaire) 168
— полиномов (~ des polynomes) 92
норма полинома (norme du polynome) 106
нормальное представление (representation normale) 85
Нормана метод (methode de Norman) 122
нули плохие (zeros mauvais) 209
нульмерный идеал (ideal de dimension zero) 130
Ньютона алгоритм (algorithme de Newton) 199
— многогранник (polygone de ~) 254
обобщенный полином (polynome generalise) 232
образующая идеала (generateur d un ideal) 127
— лиувиллева (~ liouvillien) 246
— элементарная (~ elementaire) 225
обратная матрица (matrice inverse) 184
одношаговый метод (methode "d'un pas") 116
определитель (determinant) 41
особенность иррегулярная (singularite irreguliere) 258
— регулярная (~ reguliere) 258
Островского метод (methode d'Ostrowski)
отмеченное разбиение (decomposition marquee) 149
паразитические множители (facteurs parasites) 209
— решения (solutions ~) 138
340 Предметный указатель
переменная главная (indeterminee prinoipale) 95
переменные некоммутируютие (indeterminees non-commutatives)
112
плотная матрица (matrice dense) 113
плотное представление (representation dense) 87
плохая редукция (mauvaise reduction) 178
плохие нули (zeros mauvais) 209
подстановка (substitution) 48, 54, 91
поле лиувиллевых функций (corps de fonctions liouvillien—
nes) 247
— элементарных функций (~ ~ ~ elementaires) 225
полином обобщенный (polynome generalise) 232
— вполне редуцированный (~ cornpletement reduit) 129
— примитивный (~ primitif) 174
— редуцированный (~ reduit) 128
— Уилкинсона (~ de Wilkinson) 146
— характеристический (~ caracteristique) 41
полиномы эквивалентные (polynomes equivalents) 127
полуалгебраическая компонента (composante semi-algebrique)
148
полуалгебраическое многообразие (variete semi-algebrique)
148
порядок лексикографический (ordre lexicographique) 95, 127
— общей степени, затем лексикографический (~ de degre
total, puis lexicographique) 96, 127
— общей степени, затем обратный лексикографический (~ ~ ~
~ ~ inverse lexicographique) 96, 127
последовательности примитивные (suites primitives) 93
последовательность Евклида (suite d'Euclide) 93
—г полиномиальных остатков (~ de restes de polynomes) 93
— — субрезультантов (~ des polynomes sous-resultants) 93
— Штурма (~ de Sturm) 142
правила перезаписи (regies de reecriture) 109
— упрощения (~ ~ simplification) 108
правило Крамера (methode de Cramer) 114, 118
правильная дробь (fraction propre) 274
представление (representation) 85
— вещественного алгебраического числа (~ d'un nombre
algebrique reel) 147
— внутреннее (~ interne) 97
— дробей (~ des fractions) 83
— естественное (^ naturelle) 86
— каноническое (~ canoniaue) 85
— компактное (~ compacte) 86
— нормальное (~ normale) 85
— плотное (~ aense) 87
— полиномов (^ des polymomes) 84
— разреженное (^ creux) 87
— распределенное (~ distribuee) 97
— рациональных функций (~ des fonctions rationelles) 98
— регулярное (~ reguliere) 84
— рекурсивное (^ recursive) 31, 71, 97
— целых чисел (~ des entiers) 79
преобразование Лапласа (transformation de Laplace) 64
пример Мора (example de Mora) 137
примитивная часть (partie primitive) 174
Компьютерная алгебра 341
примитивные последовательности (suites primitives) 93
примитивный полином (polynome primitif) 174
— элемент (element primitif) 107
принцип Лиувилля (principe de Liouville) 226
— модулярных вычислений (~ ~ Calcul Modulaire) 185
проблема Puma (probleme de Risch) 242
простейшие дроби (elements simples) 273
простой радикал (radical simple) 101
Пуассона ряды (series de Poisson) 125
Пюизо ряды (~ ~ Puiseux) 124
радикал вложенный (radical imbrique) 101, 103
— простой (~ simple) 101
разбиение (decomposition) 149
— инвариантное (~ invariante) 149
— отмеченное (~ marquee) 149
— цилиндрическое (~ cylindrique) 150, 151
разбухание промежуточных данных (croissance des donnees
intermediaires) 80
разложение на множители полиномов (factorisation des
polynomes) 187
целых чисел (factorisation des entiers) 82
— — свободные от квадратов множители (decomposition sans
facteurs multiples) 270
разностные уравнения (equations aux differences) 260
разреженная матрица (matrice creuse) 117
разреженное представление (representation creux) 87
распределенное представление (representation distribuee) 97
расширение алгебраическое (extension algebrique) 77
рациональная функция (fonction rationnelle) 98
рациональное число (nombre rationnel) 83
регулярная особенность (singularite reguliere) 258
регулярное представление (representation reguliere) 84
редукция (reduction) 127
— плохая (mauvaise reduction) 178
— хорошая (bonne reduction) 167, 178
редуцированный базис (base reduite) 130
— полином (polynome reduit) 128
результант (resultants) 34, 183, 274, 275
рекурсивное представление (representation recursive) 31,
71, 97
решения паразитические (solutions parasites) 138
Ричардсона теорема (theoreme de Richardson) 217
Puma лемма (lemme de Risch) 244, 245
— проблема (probleme de ~) 242
— теорема (theoreme de ~) 239
ряды Лорана (series de Laurent) 124
— Пуассона (~ ~ Poisson) 125
— Пюизо (~ ~ Puiseux) 124
— Тейлора ( Taylor) 47, 119, 122, 124
— Фурье (~ ~ Fourier) 124
свойство Черна - Россера (propriete de Church - Rosser) 129
Сильвестра матрица (matrice de Sylvester) 171, 275
342 Предметный указатель
Сильвестра тождество (identite de Sylvester) 116
Сингера теорема (theoreme de Singer) 249
Сингера - Дэвенпорта теорема (~ ~ Singer - Davenport) 250
сложение дробей (addition des tractions) 83
— полиномов (~ ~ polynomes) 88
содержание полинома (contenu d'un polynome) 174
стандартный базис (base standard) 129
старший коэффициент (coefficient principal) 205, 209, 210
— моном (monome principal) 128
— член (terme principal^ 128
структурная теорема (theoreme de structure) 110
Тейлора ряды (series de Taylor) 47, 119, 122, 124
теорема Берлекэмпа (theoreme de Berlekamp) 190
— Дэвенпорта (~ ~ Davenport) 240, 245
— Ковачича (~ ~ Kovacic) 247
— Морли (~ ~ Morley) 56
— неприводимости Гильберта (~ d'irreductibilite de Hi 1—
bert) 207
— об остатках китайская (~ chinois des restes) 278, 280
обобщенная (~~~~ generalise) 279, 281
— о субрезультантах (~ des sous-resultants) 94
— Ричардсона (~ de Richardson) 217
— Puma (~ - Risch) 239
—'- Сингера (~ ~ Singer) 249
— Сингера - Дэвенпорта (~ ~ Singer - Davenport) 250
— структурная (~ ~ structure) 110
— Ферма малая (petit theoreme de Fermat) 189
— Штурма (~ de Sturm) 143
тождество Безу (identite de Bezout) 272
— Сильвестра (~ ~ Sylvester) 116
точность (precision) 23
трансцендентная функция (fonction transcendente) 108
Уилкинсона полином (polynome de Wilkinson) 146
умножение дробей (multiplication des fractions) 83
— некоммутативное (~ non commutative) 52
— полиномов (~ des polynomes) 88
упрощение (simplification) 47, $4
— формул (~ aes formules) 53
уравнение линейное рекуррентное (equation recurrente
lineaire) 257
— Фредгольма (~ de Fredholm) 66
— характеристическое (~ caracteristique) 259
уравнения линейные (equations lineaires) 187
— разностные (~ aux differences) 260
Ферма малая теорема (petit theoreme de Fermat) 189
формальное дифференцирование (derivation formelle) 215
формула Мечина (iormule de Mechain) 28
Фредгольма уравнение (equation de Fredholm) 66
Фробениуса алгоритм (algorithme de Frobenius) 256
Компьютерная алгебра 343
функция алгебраическая (fonction algebrique) 101, 104
— лиувиллева (~ liouviIIienne) 247
— рациональная (~ rationnelle) 98
— типа Е над полем К (~ de type Е sur un corp К) 241
— типа L над полем К (~ ~ ~ Z, sur un corp /v) 241
— трансцендентная (~ transcendente) 108
— элементарная (~ elementaire) 225
Фурье ряды (series de Fourier) 124
характеристический полином (polynome caracteristique) 41
характеристическое уравнение (equation caracteristique) 259
хорошая редукция (bonne reduction) 167, 178
Цассенхауза алгоритм (algorithme de Zassenhaus) 193
цилиндрическое разбиение (decomposition cylindrique) 150, 151
часть примитивная (partie primitive) 174
Черна -- Россера свойство (propriete de Church - Rosser) 129
число алгебраическое (nombre algebrique) 101
— рациональное (~ rationnel) 83
— с плавающей точкой (~ flottant) 83
— с плохой редукцией (~ de mauvaise reduction) 167
— с хорошей редукцией (~ ~ bonne reduction) i67
— р-адическое (~ p-adique) 199
член старший (terme principal) 128
Штурма последовательность (suite de Sturm) 142
— теорема (theoreme de ~) 143
экспонента (exponentielle) 111
эквивалентные полиномы (polynomes equivalents) 127
элемент примитивный (element primitif) 107
элементарная образующая fgenerateur elementaire) 225
— функция (fonction ~) 225
элиминация кванторов (elimination des quantificateurs)
156, 157
Эрмита метод (methode de Hermite) 220
явные вычисления (calcul explicite) 112
ядро (noyau) 108
AlPi 6
AMP 69
bignum 80
CAMAL 84
CoCoa 6
DESIR 261
FROBENIUS 260
LISP 20
344 Предметный указатель
MACSYMA 5, 21
MAPLE 6, 69
muMATH 6, 21, 69
MATHEMATICA 6
NEWTON 260
р-адическое число (nombre p-adique) 199
REDUCE 5, 21, 282
RLISP 59
.S-полином (S-polyn6me) 133
SAC-2 7
SCRATCHPAD 5, 21, 70, 75
SHARE 69
SMP 69, 83
ОГЛАВЛЕНИЕ
От редактора перевода и переводчика 5
Предисловие авторов к русскому изданию 9
Предисловие 10
Глава 1. Как пользоваться системой компьютерной алгебры 20
1.1. Введение 20
1.2. Общие сведения о системах компьютерной алгебры 21
1.3. Синтаксис ассоциированных языков . 22
1.4. Области, охватываемые существующими системами 23
1.5. Компьютерная алгебра на примере 24
1.5.1. Простые операции с числами 24
1.5.2. Полиномы и рациональные функции .... 30
1.5.3. Матричные вычисления 38
1.5.4. Дифференцирование - ряды Тейлора ... 47
1.5.5. Упрощение формул 53
1.5.6. Интегрирование 61
1.6. Доступность системы MACSYMA 69
1.7. Другие системы 69
Глава 2. Проблема представления данных 79
2.1. Представление целых чисел 79
2.2. Представление дробей 83
2.3. Представление полиномов 84
2.3.1 Канонические и нормальные представления 85
2.3.2 Плотные и разреженные представления . . 87
2.3.3 НОД 92
2.4. Полиномы от нескольких переменных 95
346 Оглавление
2.5. Представления рациональных функций 98
2.6. Представление алгебраических функций 101
2.6.1. Простые радикалы 101
2.6.2. Вложенные радикалы 103
2.6.3. Алгебраические функции общего вида . . 104
2.6.4. Примитивные элементы 107
2.7. Представление трансцендентных функций .... 108
2.8. Представления матриц 112
2.8.1. Плотные матрицы 113
2.8.2. Алгоритм Барейса 115
2.8.3. Разреженные матрицы 117
2.9. Представления рядов 119
2.9.1. Ряды Тейлора: простой метод 119
2.9.2. Ряды Тейлора: метод Нормана 122
2.9.3. Другие ряды 124
Глава 3. Полиномиальное упрощение 126
3.1. Упрощение полиномиальных уравнений ...... 126
3.1.1. Редукция полиномов *. 127
3.1.2. Стандартные базисы (Гребнера) 129
3.1.3. Решение системы полиномов 130
3.1.4. Алгоритм Бухбергера 133
3.1.5. Сравнения с другими методами 137
3.2. Упрощение систем вещественных полиномов . . . 139
3.2.1. Случай IR1 140
3.2.1.1. Изоляция корней 142
3.2.1.2. Вещественные алгебраические числа 147
3.2.2. Общий случай (некоторые определения) 148
3.2.2.1. Разбиение пространства DRn ... 149
3.2.3. Цилиндрические разбиения 150
3.2.3.1. Случай пространства IR 153
3.2.3.2. Общий случай 155
3.2.4. Приложения цилиндрического разбиения . 156
3.2.4.1. Элиминация кванторов 156
3.2.4.2. Робототехника 159
Глава 4. Современные алгоритмы 162
4.1. Модулярные методы 162
Компьютерная алгебра 347
4.1.1. НОД при одной переменной 162
4.1.1.1. Соответствие модулярное целое 165
4.1.1.2. Вычисление НОД 167
4.1.1.3. Стоимость алгоритма 171
4.1.2. НОД при нескольких переменных 174
4.1.2.1. Плохая редукция 178
4.1.2.2. Алгоритм 179
4.1.2.3. Стоимость приведенного алгоритма 181
4.1.3. Другие применения модулярных методов . 183
4.1.3.1. Вычисление результанта 183
4.1.3.2. Вычисление определителей .... 183
4.1.3.3. Обращение матрицы 184
4.1.3.4. Другие приложения 187
4.2. р-адические методы 187
4.2.1. Разложение полиномов от одной переменной 187
4.2.1.1. Алгоритм Берлекэмпа 188
4.2.1.2. Соотношение модулярное - целое . 191
4.2.2. Лемма Гензеля - линейный вариант . . . 195
4.2.2.1. Лемма Гензеля - квадратичный
вариант 198
4.2.2.2. Лемма Гензеля - уточнение
алгоритма 200
4.2.2.3. Алгоритм разложения на множители 202
4.2.2.4. Старший коэффициент 205
4.2.3. Разложение для нескольких переменных . 206
4.2.3.1. Алгоритм 207
4.2.3.2. Старший коэффициент 210
4.2.4. Другие применения /?-адических методов . 212
4.2.4.1. НОД с помощью р-адического
алгоритма 212
Глава 5. Формальное интегрирование и дифференциальные
уравнения 215
5.1. Формальное интегрирование 215
5.1.1. Введение 215
5.1.2. Интегрирование рациональных функций . . 217
5.1.2.1. Наивный метод 218
5.1.2.2. Метод Эрмита 220
348 Оглавление
5.1.2.3. Метод Горовица . 221
5.1.2.4. Логарифмическая часть 222
5.1.3. Интегрирование более сложных функций . 224
5.1.4. Интегрирование логарифмических функций 226
5.1.4.1. Лемма о разложении 227
5.1.4.2. Полиномиальная часть ...... 228
5.1.4.3. Рациональная и логарифмическая
части 230
5.1.5. Интегрирование зкспоненциальных функций 231
5.1.5.1. Лемма о разложении 232
5.1.5.2. Обобщенная полиномиальная часть 234
5.1.5.3. Рациональная и логарифмическая
части 235
5.1.6. Интегрирование смешанных функций . . . 236
5.1.7. Интегрирование алгебраических функций . 239
5.1.8. Интегрирование неэлементарных функций . 240
5.2. Алгебраические решения О.Д.У. 242
5.2.1. Уравнения первого порядка 242
5.2.1.1. Проблема Риша 242
5.2.1.2. Теорема Дэвенпорта .245
5.2.2. Уравнения второго порядка 246
5.2.3. Уравнения произвольного порядка .... 249
5.2.3.1. Однородные уравнения 249
5.2.3.2. Неоднородные уравнения ..... ,249
5.3. Асимптотические решения О.Д.У 251
5.3.1. Мотивация и история 251
5.3.2. Классификация особенностей 252
5.3.3. Программа для решения О.Д.У. в регулярной
особенности 256
5.3.4. Общая структура программы 258
5.3.5. Несколько примеров применения программы
"DESIR" 261
5.3.5.1. Примеры с уравнением Бесселя . . 261
5.3.5.2. Другой пример 265
Дополнение. Основные сведения из алгебры 269
АЛ. Разложение на свободные от квадратов множители 269
А.2. Расширенный алгоритм Евклида 271
Компьютерная алгебра 349
А.З. Простейшие дроби 273
А.4. Результант 274
А.5. Китайская теорема об остатках 278
А.5.1. Случай целых чисел 278
А.5.2. Случай полиномов 280
Приложение. REDUCE: система компьютерной алгебры . . 282
R.I. Введение 282
R.l.l. Примеры интерактивного использования . 283
R.2. Синтаксис системы REDUCE 285
R.2.1. Синтаксические элементы 285
Числа 285
Переменные 286
Операторы 286
R.2.2. Выражения 286
R.2.2.I. Различные типы выражений .... 286
R.2.2.2. Упрощение выражений 287
R.2.2.3. Списочные выражения 290
R.2.3. Объявления 291
R.2.3.I. Простые переменные 291
R.2.3.2. Асимптотические объявления . . . 292
R.2.3.3. Объявления массивов 293
R.2.3.4. Объявления операторов 293
R.2.3.5. Объявления процедур 295
R.2.4. Команды 295
R.2.4.I. Оператор присваивания 296
R.2.4.2. Групповые команды 296
R.2.4.3. Условные операторы 296
R.2.4.4. Команды повторения 297 -
R.2.4.5. Блоки 297
R.3. Встроенные возможности 298
R.3.I. Префиксные операторы 298
R.3.1.1. Числовые операторы 298
R.3.I.2. Математические операторы .... 298
R.3.1-.3. Дифференцирование 299
R.3.1.4. Интегрирование 299
R.3.I.5. Разложение на множители .... 300
R.3.1.6. Результанты 300
350 Оглавление
R.3.1.7. Решение систем уравнений .... 300
R.3.2. Работа с выражениями 301
R.3.2.I. Вывод выражений 301
R.3.2.2. Части выражений 304
R.3.3. Подстановки 305
R.3.3.1. Локальные подстановки 306
R.3.3.2. Глобальные подстановки 306
R.4. Матричная алгебра 309
R.5. Заключение 310
Литература 311
Предметный указатель 336
УВАЖАЕМЫЙ ЧИТАТЕЛЬ!
Ваши замечания о содержании книги, ее
оформлении, качестве перевода и другие просим
присылать по адресу: 120820, Москва, И-110, ГСП, 1-й
Рижский пер., д. 2, издательство «Мир».