![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Литература
1.Матрос.Д.Ш.,Поднебесова.Г.Б. «Элементы абстрактной и компьютерной алгебры».-М.,:Академия,2004;
Глава 2
Введение в системы компьютерной алгебры
В первом подразделе главы рассматривается общая постановка задачи аналитических преобразований с помощью компьютера, а также цели и задачи компьютерной алгебры.
Второй подраздел служит своеобразной «связкой» между абстрактностью первой главы и конкретностью последующих подразделов этой. В нем вводится определение асимптотической сложности алгоритмов и показывается, что повышение эффективности алгоритма играет в нашем случае большую роль, чем увеличение быстродействия компьютера.
В качестве демонстрации возможностей систем компьютерной алгебры выбран один из самых распространенных пакетов Mathematica 4.2. В подразделе 2.3. приведены многочисленные примеры важнейших преобразований в рамках этого пакета.
В подразделе 2.4 дан обзор основных результатов по представлению различных типов данных в компьютере.
1. АНАЛИТИЧЕСКИЕ ПРЕОБРАЗОВАНИЯ С ПОМОЩЬЮ КОМПЬЮТЕРА
Численные методы, как правило, приводят к очень большому количеству арифметических действий. Обычно эти вычисления проводятся в системе с плавающей запятой, это влечет за собой погрешности на каждом шаге, которые называют ошибками округления. Происходи: накопление ошибок, что, в свою очередь, становится причиной неустойчивого счета вплоть до остановки самого процесса вычисления из-за выхода за пределы разрядной сетки компьютера. Более того накопление ошибок приводит даже к ситуации, когда потеря точности настолько велика, что результат.
При таких расчетах мы получаем результаты только в некоторых точках. Поэтому широко разрабатываются методы, позволяющие получать результат в виде некоторой формулы, которая дает возможность в дальнейшем достаточно просто вычислять искомое значение практически в любой необходимой точке.
Отметим, что численные расчеты не исключают алгебраических вычислений, так как написание программ сводится к переписыванию формул, на которых основан алгоритм. Вот этот процесс переписывания и вывода формул можно выполнить на компьютере. Увеличение мощности компьютеров само по себе также не решает всех проблем: расчет развития атмосферных процессов с точностью, необходимой для 48-часового прогноза, на наиболее мощных компьютерах требует значительно больше 48 часов. Увеличение производительности в 10 раз мало поможет, поскольку одновременно с уточнением теории потребуется в 2 раза уменьшить шаг сетки, что потребует 8-кратного увеличения объема вычислений.
Приведем два примера из истории великих вычислений XIX века. Во-первых, это расчет Леверье орбиты Нептуна, который был основан на возмущениях орбиты Урана и привел к открытию Нептуна. Во-вторых, это вывод 40 000 аналитических формул, которые были выполнены Делоне для вычисления орбиты Луны и которые потребовали 10 лет для их проверки. Результат не являлся численным, а представлял собой формулу, занимающую 128 страниц его книги. Отметим, что в 70-х годах XX века этот результат был проверен на компьютерах с ошеломляющим итогом: всего лишь одна (!!) ошибка (подготовка программы заняла около года).
Развитие программного обеспечения для использования в алгебраических вычислениях за последние 50 лет показало, что оно должно представлять собой полную систему, выполняющую методы представления нечисловых данных весьма специфической структуры, язык, с помощью которого можно манипулировать с ними, и библиотеку эффективных функций для выполнения необходимых базисных алгебраических операций.
Программы этого класса находят выражения для производных и первообразных различных функций, решают в аналитическом (и численном) виде сложные алгебраические и дифференциальные уравнения, производят всевозможные символьные преобразования математических выражений. Эти системы уже представляют в компьютере знания (а не данные) и поэтому относятся к интеллектуальным программным средствам.
Разработка, развитие и даже использование этих систем постепенно выделились в автономную научную дисциплину, относящуюся, очевидно, к информатике. Если в первых системах применялись достаточно элементарные математические средства, то в современных системах — сложные алгоритмы (некоторые из них будут приведены в этой книге). Таким образом, дисциплина «Компьютерная алгебра» требует наличия знаний в различных областях, что делает ее достаточно трудной в исследовательском и учебном планах. Но, с другой стороны, это сильно обогащает эту дисциплину.
Анализируя различные системы, можно выделить следующие особенности аналитических вычислений на компьютерах [6, 8, 12, 25]:
1)имеется возможность проводить аналитические (и численные) преобразования без погрешностей;
2)в результате не теряется исходная информация о характере исследуемого процесса;
3)на этом этапе аналитических вычислений неустойчивость процесса не проявляется;
4)в ряде случаев наблюдается быстрое разрастание результатов промежуточных вычислений (т.е. объем промежуточных данных в процессе вычислений очень большой);
5)ввиду упомянутого разрастания результатов резко повышаются требования к объему памяти и к быстродействию компьютера;
6)резко повышаются требования к предварительному изучению алгоритма: к оценке его быстродействия, необходимой памяти и к эффективному представлению результата;
7)имеется возможность производить генерацию программ, использующих найденные формулы.
Само понятие «компьютерная алгебра» появилось именно в связи с разработкой и применением систем аналитических вычислений. Основная цель компьютерной алгебры — изучение алгоритмов аналитических преобразований с точки зрения их эффективной реализации на компьютере. В связи с разрастанием промежуточных результатов главная задача компьютерной алгебры — оценка сложности аналитических выражений и длительности аналитических преобразований.
Так как размер символов обычно не трудно оценить, то указанная оценка сложности сводится к оценке числа арифметических действий с входящими в аналитическое выражение символами.
Особенность работы систем компьютерной алгебры состоит в том, что в отличие от численного счета здесь пользователь передоверяет компьютеру много таких функций, которые раньше он выполнял самостоятельно. Таким образом, в еще большей степени, чем при численном счете, утрачивается контроль за проводимыми преобразованиями. Поэтому пользователю необходимо более детально, чем в процессе численного счета, представлять себе работу не только самого программного продукта, но и знать хотя бы основные свойства применяемых алгоритмов: сложность, длина промежуточных результат
Уже имеется целое поколение таких систем — от языка программирования символьных вычислений Reduce до современных интегрированных систем компьютерной алгебры: MathCAD for Windows, Derive, Maple V, Mathematica и др.
Мы выбрали для демонстрации возможностей систем компьютерной алгебры систему Mathematica 4.2. Она создана фирмой Wolfram Research Inc., возглавляемой ее президентом и основным разработчиком программ Стивеном Вольфрамом (Stephen Wolfram). Количество легальных пользователей этой системой к настоящему времени уже превысило 1 млн. чел. Mathematica используется более чем в 50 ведущих университетах мира, в отделениях Госдепартамента США, во многих научных центрах и в других организациях и учреждениях. Помимо научных работников и инженеров она получила признание и у специалистов художественного и гуманитарного профиля.
2. ЭФФЕКТИВНОСТЬ АЛГОРИТМОВ
В последующих главах будут рассмотрены основные эффективные алгоритмы цифровой обработки информации (сигналов и кодов). Цифровые сигналы и коды определены на конечных абелевых группах, образованных ими относительно операций покоординатного сложения, и принимают значения соответственно в бесконечных и конечных полях (кольцах). Поэтому все вычислительные процессы обработки данных в виде сигналов и кодов замыкаются в рамках теории алгебраических структур.
Качество (эффективность) алгоритма обычно оценивают асимптотической сложностью, т. е. порядком роста сложности как функции от числа входов /У при неограниченном росте N без учета мультипликативных констант.
Пример. Если N входных переменных обрабатываются за время cN2, где с — некоторая константа, то асимптотическая сложность этого алгоритма есть 0(N2) (порядка N2).
Алгоритм | Временная сложность | Максимальный размер задачи | |||
1 с | 1 мин | 1 ч | |||
А, | N | 6 - 104 | 3,6- 106 | ||
А, | Nlog2N | 20- 105 | |||
А3 | N2 | ||||
А, | yv3 | ||||
А3 | |||||
Таблица 2.2 | |||||
Алгоритм | Временная сложность | Максимальный размер задачи | |||
до ускорения | после ускорения | ||||
А, | N | S, | 10.У, | ||
А2 | N\og2N | s2 | 105*2 (ПРИ большихS2) | ||
А3 | TV2 | s, | 3,165, | ||
А« | Л" | s< | 2,155, | ||
Aj | 2N | S5 | s5 + 3,3 | ||
В табл. 2.1 [25] даны характеристики пяти алгоритмов различной сложности для решения одной и той же задачи. Под временной сложностью понимается число единиц времени (мс) для обработки входа размером N.
Предположим, что быстродействие компьютера возросло в 10 раз. В табл. 2.2 показано, как при этом возрастут размеры (S1...1S5) задач. Видно, что увеличение быстродействия приводит к расширению входа только для алгоритмов с малой временной сложностью. Например, для алгоритма А5 увеличение размера входа вообще не произошло.
Предположим, что вместо увеличения быстродействия используется более эффективный алгоритм. Тогда при времени решения 1 мин из табл. 2.1 следует, что замена А4 на А3 дает шестикратное увеличение размера задачи, а при замене А4 на А2 — 125-кратное. Комментарии излишни!
Эти простые вычисления показывают, насколько важно иметь максимально эффективные алгоритмы для решения поставленных задач.
В зависимости от порядка сложности и вида результирующих данных алгоритмы компьютерной математики можно отнести к четырем уровням [25]:
1)базовые алгоритмические операции. Считается, что их сложность 0(1), хотя они отличаются по сложности от битовых операций. Например, умножение двух n-разрядных чисел с фиксированной точкой требует О (n2) битовых операций, а сложение — О(п);
2) скалярные алгоритмы с вычислительной сложностью О(п). Этот уровень включает вычисление скалярного произведения «n-мерных векторов, вычисление значения полинома по схеме Горнера, численное интегрирование и дифференцирование;
3) векторные алгоритмы сложности О (). Сюда включаются умножение матрицы на вектор для вычисления линейных преобразований, вычисления свертки векторов (полиномов) и т.д.;
4) алгоритмы сложности O(). Это — матричное произведение, вычисление собственных значений и векторов, обращение матриц, метод наименьших квадратов, решение задач математического программирования, нахождение путей в графе и т.д.
Некоторые и I этих алгоритмов удается улучшить (например, на третьем уровне до оценки O(n )).
Наиболее известные эффективные (быстрые) алгоритмы цифровой обработки данных строятся по стратегии дублирования (принцип «разделяй и властвуй»), которую в общих чертах можно описать так.
Выберем объем задачи и в качестве параметра п разобьем задачу на две подзадачи объемом п/2 каждая той же самой структуры, что и исходная задача. Если решения этих подзадач можно скомбинировать в. решение исходной задачи, то получается эффективный алгоритм. Иными словами, эффективный алгоритм основан на делении задачи пополам и дублировании.
Далее в книге рассматриваются конкретные быстрые алгоритмы цифровой обработки информации, основанные на вышеизложенном принципе.
3. КОМПЬЮТЕРНАЯ АЛГЕБРА НА ПРИМЕРАХ
В данном подразделе рассмотрены такие преобразования, как упрощение выражений, операции с полиномами, вычисление корней уравнений и др. Показаны также возможности системы не только для целочисленных вычислений, но и для символьных. В системе возможно проведение аналитических расчетов — от простых подстановок и сокращений до аналитической обработки математических выражений и функций
3.1. Простые операции с числами
Выражения, которые вычисляются и преобразуются системой Mathematica, записываются с помощью операторов и функций. Для выполнения арифметических операций используются операторы: + (сложение), — (вычитание), * (умножение), / (деление), ^ (возведение в степень). Можно производить вычисления непосредственно с числами или используя оператор присваивания (:=). В наших примерах жирным шрифтом выделено то, что вводится пользователем, и обычным шрифтом — ответ системы.
56*34/8
а:=53
b:=34
с:=25
(а+b^2+с^3)/(3*а-4*с)
В системе возможны целочисленные вычисления. Ниже приведен пример вычисления факториала.
Factorial[7]
100!
9332621544394415268169923885626670049071596826438162146859 9296389521759999322991560894146397615651828625369792082722375 8251185210916864000000000000000000000000
Для представления выражения в виде вещественного числа используется функция N (записывается в виде N[expr], где ехрг —-выражение).
N[100!]
9.33262х10157
Арифметика произвольной точности — N[expr, число цифр результата].
N[Pi,18]
3.14159265358979324
Вычисление сумм и произведений:
(1 +х)2 (2 + х)2(3 + х)2(4 + х)2(5 + х)2
Sum[i^2,{i,1,10}]
Product[k^2,{k,l,5}]
Имеются также функции работы с простыми числами. Можно получить n-е по счету простое число (Prime[n]) или следующее за п простое число (NextPrime [n])
Prime[7]
<<NumberTheory'NumberTheoryFunctions' {в подпакете расширения «Функции теории чисел»}
NextPrime [500]
Комплексные числа задаются в форме:
2 + i3
2 + 3 i
Re[5 + i 4]
Im[5 + 4*i]
3.2. Полиномы и рациональные функции
Над полиномами можно выполнять обычные арифметические операции: сложение, умножение, вычитание и деление. Для получения результата умножения полиномов можно использовать функцию Expand, для получения результата деления — функцию Simplify.
x^4+3*х^3-5*х
- 5 х + 3 х3 + х4
р1:=3*х^4-4*х^2+2*х
р2:=х^2-5*х
pl-p2
- 5 х + х2 + 2 х4 — 4 х5 + 3 х6
Expand[(x-y)^3]
х3 — 3 х2 у + 3 х у2 — у3
Expand[(x^1000+1)*(х^1000-1)]
- 1 + х2000
Simplify[х^2-2*х*у+у^2]
(х - у)2
Simplify[(х^4+3*х^З-2*х^2-6*х)/(х^2+3*х)]
- 2 + х2
3.3. Действия с матрицами
MatrixForm[m] — представление строкового задания матрицы в матричном виде;
Det[m] — вычисление определителя матрицы m;
Transpose[m] — транспонирование матрицы m.
m:={{1,2},{3,7}}
MatrixForm[m]
Det[m]
Transpose [т]
{{1, 3}, {2, 7}}
3.4. Вычисление производных
D|f, х] — возвращает частную производную функции f по переменной х. Возможно вычисление частных производных n-го порядка по х, смешанных и обобщенных производных.
Derivative[nl, n2,...] [f] — основная (общая) форма представления функции, полученной в результате nl-кратного дифференцирования функции f по первому аргументу, n2-кратного дифференцирования функции f по второму аргументу и т.д.
D[a*Cos[x],x]
-a Sin[x]
D[b*x^3+b*x,x]
b + 3 b х2
D[Log[x]*x^2,x]
x + 2 x Log[x]
D[x^2/b*x,x]
Derivative[2] [x*y]
(xy)"
3.5. Интегрирование
Вычисление неопределенных интегралов в символьном виде: Integrate[f, х] — возвращает неопределенный интеграл (первообразную) подынтегральной функции f по переменной х. Можно использовать знак интеграла.
Integrate[a*x^b, х]
- Cos[x]
3.6. Уравнения и системы уравнений
Solve[eqns, vars] — решает уравнение или систему уравнений eqns (equations — уравнения) относительно переменных vars.
SoIve[x^2+2*x- 15==0,х] *
{{х->5}, {х->3}}
Solve[x^2+2*x+15= =0,x]
{{x->-l-i }, {x->-l+i
}}
Возможно решение систем нелинейных уравнений в символьном виде:
Solve[{y==xA2, x==a+b}, {х,у}]
{{y->a2+2ab+b2, x->a+d}}
3.7.Дифференциальные уравнения
DSolve[eqn, у[х], х] — решает дифференциальное уравнение eqn относительно функций у[х] с независимой переменной х.
.
DSolve[Derivative[l] [у] [х]==2*а*х^3, у[х], х]
{{у[х]->ах4/2+С[1]}}
DSolve[y'[x]+y[x]==x, у[х], х]
{{у[х]->-1+х+ С[1]}}
3.8. Функции времени и даты
AbsoluteTime[] — возвращает полное количество секунд, прошедших с 1 января 1900 года;
Date[] — возвращает текущее время;
TimeUsed[] — возвращает полное количество секунд процессорного времени, используемого на данный момент в текущем сеансе Mathematica.
AbsoluteTime[]
3.25378948000000х109
Date[]
{2003, 2, 9, 14, 31, 16}
TimeUsed[]
0.9
4. ПРЕДСТАВЛЕНИЕ ДАННЫХ
В этом подразделе дан обзор имеющихся результатов [6, 8, 12]. Здесь изложены основные трудности, связанные с представлением данных в компьютере. Также кратко рассмотрена фундаментальная проблема наиболее эффективного представления данных в максимально универсальной постановке, т.е. без технических деталей. Многие из рассматриваемых результатов носят характер рецептов, объяснение или доказательство которых в некоторых случаях являются результатами обширных теорий и поэтому выходят за рамки настоящей работы.
4.1. Представление целых чисел
Основная проблема в этом случае состоит в том, что при проведении аналитических преобразований промежуточные результаты требуют значительной памяти, хотя исходные данные невелики.
Обычно в системах рассматриваются точные аналитические преобразования и никакие округления или другие искажения целых чисел недопустимы. Для иллюстрации приведем известный пример (Д. Кнут, В. Браун) вычисления НОД двух полиномов:
а = х8 + х6 - Зх4 - Зх3 + 8х2 + 2х -5;
b= 3x6+5x4-4x2-9x + 21.
Проводя вычисления по алгоритму Евклида, в итоге получим целое число, содержащее 35 десятичных цифр, т.е. 117 бит. Отсюда следует, что полиномы взаимно просты. Полученный ответ (типа да/нет) потребует для хранения 1 бит, исходные данные малы (наибольшее из чисел равно 21), а промежуточные результаты очень велики. Такие проблемы возникают и в других ситуациях, например в задаче интегрирования.
Так же необходимо рассматривать целые числа произвольной длины. Почти все системы компьютерной алгебры допускают такую возможность и для представления выбирают в качестве основания некоторое число N и представляют числа, по аналогии с обычной десятичной системой, относительно этого основания (с помощью «цифр» от 0 до N- 1) с добавлением знакового бита. Например, на 32-битовых компьютерах можно выбрать в качестве N 109, или 230, или 231. Как правило, 232 не используется, чтобы не возникали трудности при сложении, когда сумма уже не умещается в машинное слово.
При таком подходе сложение, вычитание и умножение целых чисел становится, в принципе, простым — используются хорошо известные из школы алгоритмы. Правда, умножение требует специально написанную на машинном языке для этого действия функцию, так как для записи в память произведения необходимы уже два слова.
Деление представляет собой значительные трудности, так как метод, изучаемый в школе, требует угадывания и, следовательно, вообще не является алгоритмом (Д. Кнут предложил достаточно надежный алгоритм получения необходимой цифры).
Теперь разберемся со временем счета. Достаточно очевидно, что для сложения и вычитания требуется время, пропорциональное числу цифр, т.е. 0(п), а для умножения это время — 0(п2). В 1962 г. студент МГУ (ныне профессор) А. А. Карацуба предложил следующий метод умножения, более эффективный, чем общепринятый [11].
Если у нас имеется два 2n-значных числа u= и v=
, то их обычное умножение сводится к четырем умножениям n-значных чисел. Метод Карацубы состоит в следующем.
Запишем наши числа в виде:
U= U0+ ; V= V0+
,
где U1 = (U2n-1... ) l0,
Отсюда легко получить, что
UV=(U0+ )(V0 +
= U0V0(
+ l) + (
- U0)(V0 -
)
+
(
+
).
4fi
Эта формула сводит задачу умножения 2n-значных чисел к переменным операциям умножения n-значных чисел: V0, (
-
)x (U0-
) и
, плюс некоторые операции сдвига (умножение на степень десяти) и сложения. При этом время, затрачиваемое на умножение, можно сократить с величины O(п2) до величины 0(n
), и, конечно, при большом п алгоритм Карацубы гораздо быстрее общепринятого.
Используя быстрое дискретное преобразование Фурье, можно довести это время до 0(n log n log log n). Но фактически это время имеет вид 20(п log п log log n) и эффект возникает только для п порядка нескольких тысяч. В большинстве систем этот алгоритм не используется.
Для вычисления НОД двух целых чисел требуется время 0(n3); достаточно просто оно снижается до 0(п2) и даже до 0(nlog2 nlog log п), но алгоритм, который имеет последнюю оценку, практически не используется.
Отсюда следует, что в реальной практике следует стремиться к работе с числами минимальной длины.
Менее ясна ситуация с разложением числа на множители. Она подробно рассмотрена в соответствующем подразделе третьей главы. Здесь только отметим, что для используемых в криптографии больших чисел эта задача вычислительно неразрешима, т.е. решить ее за обозримое время невозможно.
4.2. Представление дробей
Обыкновенные дроби представляются в виде пары целых чисел: числителя и знаменателя (p/q, q 0). Вообще говоря, не надо заменять их приближенными значениями (например, числом с плавающей точкой), так как это может привести к неверным результатам. Так, если НОД полиномов х3 - 8 и (1/3)х2 - (4/3) равен (1/3)х - (2/3), то НОД полиномов х3 - 8 и 0,333333х2 - 1,33333 равен 0,000001 из-за округления.
Все операции с рациональными числами требуют вычисления НОД, что приводит к большим затратам времени. Если удается каким-то образом избежать таких действий, то это дает серьезную экономию времени. В нашем примере можно ограничиться вычислением НОД полиномов х3 - 8 и х2 - 4, которое не требует применения обыкновенных дробей.
Алгоритмы сложения, умножения и других операций дробей достаточно просты, но и тут можно оптимизировать процесс вычисления. Рассмотрим, например, умножение дробей а/b и с/d, представленных в несократимом виде:
Очевидный способ: вычислить р = ас, q = db и затем сократить на НОД этих чисел.
Однако, используя равенство НОД (p,q) = НОД(a,d)-НОД(b,с), более эффективно вычислить два НОД в правой части равенства, чем один НОД в левой, так как аргументы у них меньше. Отсюда получаем такую последовательность действий для вычисления произведения:
НОД (а,d); НОД(b,с); а' = а / HOД(a,d); b' = b/ НОД (b,c); c’=c/НОД(b,c); d' = d/НОД (a,d); p = а'с'; q = b'd'. Аналогично для сложения
вместо формул p = ad + bc, q = bd с последующим вычислением HOД(p,q) и сокращением на него чисел р и q более эффективна такая последовательность вычислений:
НОД (b,d); q’ = bd/НОД (b,d)\ b' = b/НОД (b,d);
d' = d/HOД(b,d); p' = ad' + b'c;
HOД(p',q'); p = p'/HOД(p',q'); q = q'/НОД(p',q').
Легко видеть, что и в этом случае мы работаем со значениями меньшими, чем при прямых вычислениях.
4.3. Представление полиномов
Именно работа с полиномами, понимаемыми в обобщенном смысле, отличает системы компьютерной алгебры от других систем.
Отметим важный момент — термин «полиномиальные» относится к программным вычислениям, а не просто к типам данным. Например, вычисление
(х~у)(х + у) = х2-у2
является полиномиальным, но им является также и
(cos a-sin b)(cos a + sin b) = cos2a-sin2b,
в котором фактически произведено то же вычисление, но с заменой х на cos а, у — на sin b.
Все системы могут.работать с полиномами произвольного числа переменных. Их можно складывать, вычитать, умножать, делить (по крайней мере, если деление выполняется без остатка), но в действительности самой интересной представляется операция упрощения.
Отметим в связи с этим, что запись (х + 1)(х- 1) не слишком интересна; запись х2 - 1 гораздо более полезна, хотя это, может, и
не имеет принципиального значения. Однако (х - 1) более «простая» запись, чем , но является ли выражение х999 - х998 + х997-... - 1 более «простым», чем
далеко не очевидно (!).
Для того чтобы разобраться с понятием «упрощение», сначала уточним два связанных с ним термина.
Представление математических объектов (в рассматриваемом случае это полиномы) называется каноническим, если две различные записи соответствуют всегда двум различным объектам.
Если совокупность объектов обладает структурой моноида (а почти любая совокупность в компьютерной алгебре является по меньшей мере моноидом), то можно ввести следующее определение.
Представление называется нормальным, если представление нуля моноида единственно.
Любое каноническое представление является нормальным. Таким образом, можно сказать, что упрощение должно давать, по крайней мере, нормальное представление, а если возможно, то и каноническое. В этом случае для определения совпадения двух объектов моноида составляют их разность и смотрят ее представление: если это представление нуля, то элементы считают совпадающими, в противном случае — различными.
Кроме того, желательно, чтобы представление было «регулярным», «естественным» и «компактным» при соответствующем определении этих понятий. Мы не будем развивать эти рассуждения. Ограничимся замечанием, что двум последним требованиям, по-видимому, не удовлетворяет представление целого числа единицами, например, 7 = «1111111».
Существует несколько представлений, отвечающих указанным требованиям, и всякая система компьютерной алгебры располагает, по крайней мере, одним из них.
Для полиномов от одной переменной такие представления с математической точки зрения достаточно очевидны: каждая степень переменной х присутствует не более одного раза, и равенство полиномов сводится к равенству коэффициентов. Но в представлении ситуация не настолько проста.
Представление называется разреженным, если нулевые члены явно в нем не представлены.
Представление называется плотным, если в нем явно представлены все члены.
Обычное математическое представление является разреженным: мы пишем 8х3 + 7 вместо 8x3 + 0х + 7.
Наиболее очевидным компьютерным представлением полинома
+
+... +
+
является его представление таблицей коэффициентов [ ]. Так как в нем записаны все
, то такое представление является плотным. В этом случае для сложения необходимо О(п) операций, а для умножения — 0(п2).
Разреженное представление требует, чтобы каждый ненулевой член был представлен в виде пары: показатель степени и коэффициент, т.е. пара (i,
). Например, полином 8х3 + 7 предстает в виде ((3,8), (0,7)). В этом представлении порядок задается убыванием показателей степеней.
Большинство встречающихся на практике полиномов не являются плотными, и разреженное представление дает существенную экономию. Например, плотный метод потребует миллион умножений для проверки равенства
(x1000 + 1)(х1000 - 1) = x2000 - 1,
а разреженный — всего четыре. Если имеется, например, полином от пяти переменных x5 z3u2v, то его плотное представление содержит 7776 членов, а разреженное — один.
Отметим, что время счета, по крайней мере, для сложения и умножения, является скорее функцией количества членов, чем степени. Хорошо известны соотношения, ограничивающие степень результата, рассматриваемую как функцию от степеней аргументов, но соотношение для количества членов отличается от них. Предположим, что a, b — два полинома степеней па, , содержащие та,
членов. Тогда примитивные операции над ними удовлетворяют ограничениям, представленным в табл. 2.3.
Ограничение, данное для числа членов, при делении является функцией от степени и не зависит от числа членов в аргументах.
Например, =
+... + 1, т.е. полиномы всего из двух слагаемых каждый при делении могут дать полином с каким угодно большим количеством членов.
Таблица 2.3
Операции | Степень результата | Количество членов в результате |
а + b | тах(па, ![]() | та+ ![]() |
а-b | тах(па, ![]() | та + ![]() |
а * b | па+ ![]() | ![]() |
a/b ' | па - ![]() | na ![]() |
НОД(а,b) | min(![]() ![]() | ![]() ![]() |
Подстановка полинома а вместо переменной в полином b | ![]() | na ![]() |
Рассмотрим вопрос о количестве членов в НОД двух полиномов. Показано, что для полинома р = (4х4 + 4х3 -2х2 + 2х+ 1)(84х24 + 28х20 - 10х16 + 4х12 - 2х8 + 2х4 + 1)
полином р2 имеет слагаемых меньше, чем р, а НОД(p2,(p2)’) содержит больше слагаемых, чем каждый из этих полиномов.
В заключение остановимся на проблеме подстановки полинома вместо переменной в другой полином. Время развертывания, например,
выражений (х1000 + 1)2 и отличается в тысячи раз.
4.4. Представление рациональных функций
Большинство вычислений используют не только полиномы, но и их отношения, т.е. рациональные функции. К действиям с рациональными функциями естественно отнести и преобразования вида
так как это то же, что и вычисления
Если представлять рациональную функцию как полином (числитель), деленный на другой полином (знаменатель), то получается нормальное представление, так как функция есть нуль тогда и только тогда, когда ее числитель есть нуль.
Если мы хотим получить каноническое представление, то возникают следующие сложности: например, формулы и
представляют один и тот же элемент, но это разные формулы, так как у них разные области определения. Обратим внимание на то, что эти формулы равны, так как их разность равна
.
Естественно потребовать, чтобы в каноническом представлении не существовало какого-либо общего делителя числителя и знаменателя. Отсюда следует, что каноническое представление есть
. В общем случае приходим к представлению с минимально возможной степенью числителя (то же верно и для знаменателя). Но этого условия мало, что следует из таких примеров:
Для устранения этой неоднозначности большинство существующих систем принимают во внимание следующие правила для рациональных функций с коэффициентами из Q:
1)в выражении не должно быть рациональных коэффициентов (что отбрасывает последние два выражения);
2)никакое целое число не может делить как числитель, так и знаменатель (что отбрасывает третье выражение);
3)старший коэффициент знаменателя выражения должен быть положительным (что отбрасывает второе выражение).
Имеются и другие возможности, но эти правила наиболее распространены и достаточны для получения канонической формы.
4.5. Представление алгебраических функций
Под алгебраическими объектами (числами и функциями) понимают решение полиномиальных уравнений. Например, — алгебраическое число, как решение уравнения
- 3 = 0.
Каждый радикал является корнем алгебраического уравнения, но, как показал Абель, обратное не верно. Более точно, алгебраическое число , являющееся решением уравнения
+
+ l = 0, не может быть выражено в радикалах.
Поэтому различают три класса алгебраи ческих выражений:
1) простые радикалы (например, ,
);
2) вложенные радикалы (например, ,
);
3) общие алгебраические выражения (например, алгебраиче-
ское число , определенное уравнением
+
+ 1 = 0).
Каждый из перечисленных классов содержится в следующем.
Простые радикалы
Первая проблема — однозначность представления, так как, например,
Ее универсальное решение очень сложное. Действительно, если потребовать, чтобы радикалы были лишь в числителе, то следующий пример показывает, что все не так просто:
-
Другие варианты универсального представления еще более спорны.
Вторая проблема — взаимная зависимость радикалов. Она состоит в том, что корни различных степеней могут выражаться один через другой. Рассмотрим . Тогда, так как х4 + 4 = (х2 - 2х + 2) (х2 + 2х + 2), то получаем
Вложенные радикалы
И в этом случае существует проблема однозначности представления, как и в предыдущем.
Вторая проблема — соотношения между радикалами — в настоящее время удовлетворительным образом не решена. Ее сложность подчеркнем рядом примеров:
= 1 +
,
+
,
,
Алгебраические функции общего вида
Не вдаваясь в подробности, отметим, что в этом случае требуется, чтобы полиномы, определяющие алгебраические числа и функции, были неприводимыми (неразложимыми) или допускается, что нельзя гарантировать необходимые результаты, если полиномы не являются неприводимыми.
Когда появляется несколько корней, требуется, чтобы все определяющие их полиномы были неприводимыми не только раздельно, но и вместе. Процесс проверки достаточно трудоемкий и в реальных системах, как правило, не проводится.
4.6. Представление трансцендентных функций
Трансцендентные функции группируются в несколько классов функций, каждый из которых имеет свои правила преобразования и упрощения. Обычно в системах встречаются следующие классы:
1) класс тригонометрических функций;
2) класс экспоненциальных функций;
3) класс логарифмических функций;
4) класс обратных тригонометрических функций. Известно много правил преобразования, таких, как
sin(x + у) = sin х cos у + cos х sin у; (1)
sin x cos y = (sin(x +y) + sin(x-у)); (2)
log(xy) = log x + log y;
log(exp x) = x;
exp(x + y) = exp x * exp y;
sin = 0.
Естественно, что трансцендентные функции могут являться аргументами и коэффициентами рациональных функций, рассмотренных выше, а также входить в алгебраические функции. Преобразования таких функций ничем не отличаются от рассмотренных выше. Однако остаются некоторые ловушки. Во-первых, видим, что из (1) следует sin2x = 2 sin х cos х, но во многих системах это не действует, так как постоянно отслеживать, что 2х = х + х очень дорого. Во-вторых, правила (1) и (2) взаимно обратны, т.е. совместное их применение приведет к зацикливанию.
Все возникающие проблемы обычно связаны с тем, что мы пользуемся общим методом. Имеется различие между знанием некоторых возможных упрощений и знанием не только этих упрощений, но и того, что они являются единственно возможными. Например, нам известны правила
log(fg) = log f+ log g,
exp(f + g) = exp f exp g, (3)
exp(log f) = log(exp f) = f,
но являются ли они единственно возможными упрощениями?
Имеются теоремы, которые точно описывают возможные упрощения.
Структурная теорема Риша, которую приведем в неформальном виде (и без доказательства), утверждает, что правила (3) — единственно возможные упрощения для функций, порожденных операторами ехр и log. Принципы, лежащие в основе этой теоремы, были известны еще со времен Лиувилля, но только для компьютерной алгебры потребовались точные формулировки таких теорем.
Теорема (Риша).
а). Экспоненциальная функция не зависит от экспонент и логарифмов, которые уже введены, тогда и только тогда, когда ее аргумент не может быть представлен в виде линейной комбинации (с рациональными коэффициентами) логарифмов и аргументов экспонент, введенных ранее. Наличие такой комбинации означает, что новая экспонента является произведением степеней введенных ранее экспонент и аргументов логарифмов.
б). Логарифмическая функция не зависит от экспонент и логарифмов, которые уже введены, тогда й только тогда, когда ее аргумент не может быть представлен в виде произведения (с рациональными показателями) экспонент и аргументов логарифмов, введенных ранее. Наличие такого произведения означает, что новый логарифм — линейная комбинация (с рациональными коэффициентами) логарифмов и аргументов экспонент, введенных ранее.
Эта теорема применима только к функциям. Ситуация с числами, определяемыми экспонентами и логарифмами, гораздо менее ясна. Есть предположение (но не доказательство), что теорема и в этом случае остается верна. Неизвестно даже, являются ли независимыми числа е [е = ехр(1)] и [
= (1/i) log(-l)].
4.7. Представление матриц
Матрица имеет вид
А= .
где — некоторые аналитические выражения, i=1,…,n; j=1,…,m.
Это представление можно записать кратко А = .
Если п и т — заданные явно натуральные числа, то и запись матрицы может быть конкретной. Например, если п = 2, т = 3, то возможна запись
A= .
Если же элементы матрицы заданы явно, то ее запись может иметь, например, такой вид:
A= .
Желательно, чтобы система имела все указанные выше представления матриц. Если в записи матрицы присутствует только правая часть, то такое представление называется явным. Если запись матриц осуществлена в односимвольном виде, т.е. левой частью (в наших примерах символом А), то такое представление называется неявным. Наиболее часто употребляется явная запись.
Как известно, умножение матриц не коммутативно. Поэтому в рациональных выражениях с участием неявных представлений матриц требуется специальное объявление, в котором указывается перечень некоммутирующих объектов, неявно представляющих матрицы. Иногда вводится специальный символ для некоммутативного умножения матриц. Но все-таки более удобен вариант с перечнем.
Далее будем иметь дело с явными матричными вычислениями, причем, как и в случае полиномов, здесь присутствует различие плотный — разреженный.
Плотные матрицы
Обычно под плотными матрицами понимают матрицы с большим количеством ненулевых элементов (хотя это определение, очевидно, не строгое). Такие матрицы представляются в виде прямоугольной таблицы или массива, или другим подходящим способом.
Сложение и умножение двух матриц размерами n x n требует O(п2) и O(п3) операций соответственно. Имеются более быстрые алгоритмы, но они эффективны лишь для больших п (алгоритм Штрассена, например, для умножения матриц имеет сложность O(п Iog2 п) и дает 18 %-ный выигрыш лишь при n 100). Поэтому они пока не применяются в системах компьютерной алгебры.
Обращение матриц — это очень громоздкие выражения, и поэтому нужно избегать этой операции. Отметим в качестве примера, что уже для матрицы четвертого порядка определитель, необходимый для вычисления обратной матрицы, займет 3 — 4 строки, а сама обратная матрица — несколько страниц. Положительным моментом в компьютерной алгебре является отсутствие численной неустойчивости, так как вычисления проводятся точно.
При вычислении определителя возникает проблема деления. Согласно определению, определитель матрицы — это сумма (возможно, со знаками минус) произведений элементов матрицы. Таким образом, если эти элементы принадлежат кольцу (например, кольцу целых чисел или полиномов), то определитель также принадлежит кольцу. Но метод исключения Гаусса для вычисления этого определителя требует выполнения делений. Эти деления могут оказаться невыполнимы (например, нельзя делить на 5 или на 2 в кольце вычетов по модулю 10, но тем не менее определитель матрицы определен и равен 1). Даже если деление воз-
можно, могут потребоваться вычисления с дробями, которые, как известно, требуют вычисления НОД, что весьма трудоемко.
При вычислении определителя метод Крамера приводит к О (п n!) операциям вместо O(n3) в алгоритме Гауссова исключения и поэтому относится к неэффективным методам. Однако учет необходимости постоянно вычислять НОД и приводить подобные члены позволяет заключить, что алгоритм Гаусса в ряде случаев по числу операций приближается к методу Крамера.
Для матриц целых чисел или полиномов от одной переменной наиболее эффективным представляется алгоритм Барейса.
Алгоритм Барейса
Барейс предложил семейство методов исключения без использования дробей, т.е. таких, где все необходимые деления выполняются точно. Они часто используются в компьютерной алгебре, если кольцо — область целостности. Эти методы решают проблему нахождения алгоритма, который не требовал бы вычислений с дробями.
Фактически простейший вариант излагаемого метода был известен еще Жордану и
основан на обобщениях тождества Сильвестра. Пусть — определитель вида
В частности, определитель матрицы порядка п, элементы которой есть , равен
Тогда
Так как определители не содержат дробей, определитель в правой части делится на
Продемонстрируем метод Барейса на примере. Рассмотрим мат-
рицу третьего порядка
После исключения с помощью первой строки (без деления) получаем
Второе исключение дает матрицу
, и очевидно, что делит все элементы третьей строки.
Общее соотношение имеет вид
Из которого приведенное выше равенство получается при l=k-1.
Разреженные матрицы
Методы запоминания разреженных матриц с символьными элементами аналогичны методам запоминания различных полиномов; в частности, можно использовать списки вида {()},где
— значение элемента (аналитическое выражение); i,j — номер строки и номер столбца, указывающие положение этого элемента в матрице.
В этом случае сложение выполняется достаточно просто, но умножение становится более сложным, так как в левой матрице надо перебирать все строки, а в правой — все столбцы.
Для вычисления определителя применяется рекурсия, получаемая разложением определителя по строке или столбцу. При большем числе нулевых элементов это дает достаточно компактные выражения.
Обратная матрица для разреженной обычно является плотной, поэтому ее вычислять не следует.
Имеется три основных способа решения систем линейных алгебраических уравнений, применяемых в системах компьютерной алгебры:
1) формулы Крамера. В этом случае основные вычисления — определитель матрицы A хорошо реализуется с использованием предыдущих вычислений. Основной недостаток этого способа — требуется много места для хранения промежуточных результатов;
2) метод Гауссова исключения с переупорядочиванием строк и/или столбцов. В этом случае порядок вычислений 0(п3);
3) итерационные методы, обычно используемые для числовых матриц. Схема их применения в случае, когда элементы матрицы — аналитические выражения, та же: уравнение Ах = b приводят к виду х = Вх + b и применяют итерационный процесс = = В
+ b, п = 0, 1,..начиная с некоторого аналитического выражения х0. Общий критерий сходимости, как обычно, состоит в том, что ||B|| < q< 1, где q — некоторое положительное число, а в качестве нормы допускается любая операторная норма в рассматриваемом конечном пространстве.
Необходимо отметить, что при работе с разреженными матрицами компьютерная алгебра приближается к методам численного анализа.
4.8. Представление рядов
Компьютерная алгебра не ограничивается конечными объектами типа полиномов, а позволяет работать и с некоторыми типами бесконечных рядов. Понятно, что компьютер может иметь дело только с конечным числом объектов, т.е. первых членов ряда.
Ряды Тейлора Эти ряды полезны для разных приложений, особенно когда речь идет о нелинейных задачах, которые становятся линейными при пренебрежении некоторыми величинами. В этом случае можно надеяться, что решение будет представляться в виде ряда Тейлора, причем можно ограничиться достаточно небольшим числом членов, т. е. фактически приходится работать с многочленами. Отличие состоит в том, что необходимо предусмотреть алгоритмы «отбрасывания высших степеней».
Например, в сумме
члены результата при i> min(m,n) нельзя определить чисто как функцию указанных в суммах данных. Для получения этих результатов нужно знать больше членов или
Отметим, что если начальные данные имеют одну и ту же точность, то результат имеет ту же самую точность. В компьютерной алгебре не происходит накопления ошибок в отличии от численного анализа.
Тем не менее в некоторых случаях потеря сложности вполне возможна (это легко увидеть на примере деления, одного ряда на другой или при извлечении корня квадратного из ряда). Для того чтобы избежать этого, необходимо принимать определенные меры предосторожности, хотя сама ситуация здесь гораздо менее сложная, чем в численном анализе: нет постепенной потери точности, порожденной округлением.
В случаях, когда потеря точности встречается часто, обычно применяется метод Нормана: вместо вычисления всех членов с0, ,..,
ряда до их использования формируется общее правило, которое выражает
через предыдущие и промежуточные данные и системе выдается задание вычислять каждый член с, в тот момент, когда он требуется.
Для операций +, -, *, / эти общие правила выглядят так (здесь С = B=
;
):
C=A+B,
C=A-B,
C=A*B, =
C=
.
Последнее равенство выполняется только при 0. Если имеет место равенство нулю, то формула становится немного сложнее. Важно то, что любая функция, определенная линейным дифференциальным уравнением, приводит к аналогичным уравнениям для коэффициентов ряда Тейлора. Легко видеть, что при таком подходе вычисления
потребуют не более O(i2) операций (в случае деления).
Если же предположить, что с/не запоминаются, то вычисления этого коэффициента уже потребуют O() операций.
Ряды Фурье
Ряды Фурье имеют вид
f=
Для систем компьютерной алгебры, основанных на полиномиальных
Дата публикования: 2015-04-07; Прочитано: 1822 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!