AraАлгоритмы и моделируемые объекты

Содержание

Слайд 2

«Arageli» (ARithmetic, Algebra, GEometry, Linear and Integer linear programming) Тип: математическая

«Arageli» (ARithmetic, Algebra, GEometry, Linear and Integer linear programming)

Тип: математическая библиотека
Разработчик:

группа разработчиков под научным руководством Николая Юрьевича Золотых; в разное время в библиотеку сделали свой вклад Е. Агафонов, М. Алексеев, А. Бадер, С. Лялин и А. Сомсиков.
Написана на: C++
Операционная система: Кроссплатформенное программное обеспечение
Тестовая версия: 2.2.9.412 prealpha (17 июля 2010)
Лицензия: GNU GPL
Сайт: arageli.org

Характеристики

Слайд 3

Библиотека поддерживает моделирование следующих алгебраических систем (включая базовое множество применимых операций

Библиотека поддерживает моделирование следующих алгебраических систем (включая базовое множество применимых операций

к каждой из них):
• целые числа неограниченной длины;
• рациональные числа;
• рациональные функции;
• полиномы от одной переменной;
• векторы;
• матрицы;
• конечные поля;
• кольца вычетов (модулярная арифметика);
• алгебраические числа;
• интервальная арифметика.

Алгоритмы и моделируемые объекты

Слайд 4

Алгоритмический состав (некоторые алгоритмы) • алгоритм Евклида для нахождения НОД и

Алгоритмический состав (некоторые алгоритмы)
• алгоритм Евклида для нахождения НОД и коэффициентов

Безу;
• бинарный алгоритм Евклида;
• алгоритм Гаусса для нахождения ступенчатой формы матрицы (в том числе и целочисленный аналог);
• разложение целого числа на простые сомножители ρ-методом Полларда;

Алгоритм Евклида

Слайд 5

• решение задачи линейного программирования симплекс методом (прямой и двойственный, в

• решение задачи линейного программирования симплекс методом (прямой и двойственный, в

строчечной и столбцовой форме; • определение простоты числа различными методами.
Все алгоритмы реализованы как шаблоны.

Определение простоты числа методом Соловея-Штрассена

Слайд 6

Компонентность и многоуровневость • базовые алгебраические структуры; • набор алгебраических алгоритмов;

Компонентность и многоуровневость

• базовые алгебраические структуры;
• набор алгебраических алгоритмов;

параметризуемость;
• дополнительная информация о типе;
• смешанные вычисления;
• подсистема контроля исключительных ситуаций;
• подсистема ввода/вывода;
• контролёры алгоритмов;
• внутреннее документирование в формате doxygen.
Слайд 7

Параметризуемые структуры и алгоритмы Некоторые из основных моделей: big int –

Параметризуемые структуры и алгоритмы

Некоторые из основных моделей:
big int – класс, моделирующий

целое число с произвольным числом бит
rational – класс, моделирующий как рациональные числа, так и рациональные функции rational > - так конструируется рациональная функция
vector – вектор с элементами типа Т
sparse polynom – полином от одной переменной с коэффициентами типа Т sparse polynom > - полином с матричными коэффициентами
Слайд 8

Плюсы и минусы статической параметризации* + быстродействие +отсутствие накладных расходов (затраты

Плюсы и минусы статической параметризации*

+ быстродействие +отсутствие накладных расходов (затраты времени,

памяти)
+своевременная диагностика ошибок -большой объем бинарного кода -для обеспечения гибкости и полной совместимости типов друг с другом требуется сложная и аккуратная реализация классов
Слайд 9

Контролёры алгоритмов Для некоторых алгоритмов требуется организовать более жёсткий контроль. Для

Контролёры алгоритмов

Для некоторых алгоритмов требуется организовать более жёсткий контроль. Для этого

существуют специальным образом оформленные объекты-контролёры, которые передаются в “сложную” функцию как дополнительный параметр. Требования к интерфейсу для типа этого объекта полностью определяются функцией; тип должен поддерживать все методы, которые вызывает для него целевая функция. Вызов любой из них является сигналом от алгоритма контролёру.
Контролёр функции — это механизм передачи дополнительной информации в исполняемую функцию или из нее, в процессе её работы. Тип контролёра всегда задаётся как параметр шаблона.  
Основным критерием, по которому определяется, делать ли некоторую функцию контролируемой или неконтролируемой, является объём промежуточных результатов и предполагаемая продолжительность работы функции.
Функцию, сконструированную так, что она принимает контролёра, будем называть контролируемой функцией.
Слайд 10

Для любой контролируемой функции имеется как минимум две её перегруженные версии:

Для любой контролируемой функции имеется как минимум две её перегруженные версии:

с явно указываемым объектом контролёра и без него. Вторая версия просто вызывает первую с контролёром по умолчанию (idler-контролёр). Т. е. для контролируемой шаблонной функции f у нас есть следующие определения:
Класс ctrl::f idler — это класс контролёра, который ничего не делает (в библиотеке все такие классы находятся в пространстве имён Arageli::ctrl).

template
void f
( /* параметры функции без контроля */,
Ctrler ctrler // контролёр )
{ /* код с вызовами методов контролёра */ }
template
inline void f
( /* параметры функции без контроля */ )
{ f(/* аргументы функции без контроля */, ctrl::f idler()); }

Слайд 11

Обработка ошибок Система контроля и обработки исключительных ситуаций в библиотеке представлены

Обработка ошибок

Система контроля и обработки исключительных ситуаций в библиотеке представлены двумя

механизмами.
Во-первых, это система классов исключений и описание ситуаций, когда они генерируются. Все функции и методы классов сконструированы таким образом, что они не теряют целостности, когда через них проходит исключение.
Во-вторых, механизм обработки ошибок включает в себя отладочные проверки. Это система предикатов в различных частях функций и методов классов библиотеки вместе с кодом, который проверяет их значение.
Реализованная система проверок может работать в одном из двух режимов. В первом режиме происходит аварийная остановка, с выводом в стандартный поток сообщения об ошибке.
Во втором режиме проверочным кодом генерируется исключение с исчерпывающей информацией о не сработавшем предикате.
Слайд 12

Ввод и вывод Существует три основных формата ввода/вывода. Первый способ ввода/вывода

Ввод и вывод

Существует три основных формата ввода/вывода.
Первый способ ввода/вывода —

обратимый; в нём все объекты записываются в виде списков. Для группировки используются скобки, а для отделения элементов при перечислении — запятая.
Второй формат служит только для вывода — формат с выравниванием при выводе на моноширинную консоль. Особенно удобен при выводе структурированной табличной информации, например, матриц и векторов.
Третий формат вывода — это вывод на языке LATEX. Такой способ вывода обычно встречается только в больших математических пакетах, подобных MATLAB и Maple.

Решение квадратного уравнения \(ax^2+bx+c=0\): \begin{equation}\label{eq:solv}
x_{1,2}=\frac{-b\pm\sqrt{b^2-4ac}}{2a} \end{equation}
Можно сослаться на уравнение~\eqref{eq:solv}.

Слайд 13

Примеры программы №1 Найти матрицу, обратную данной: Программа: #include #include #include

Примеры программы №1

Найти матрицу, обратную данной:
Программа:
#include
#include
#include
using namespace

Arageli;
int main ()
{
matrix > A = "((21, 3, 4), (3335, 6, 75), (81, 9, 10))";
std::cout << "A = \n";
output_aligned(std::cout, A, "|| ", " ||", " ");
std::cout << "\ninversion of A = \n";
output_aligned(std::cout, inverse(A), "|| ", " ||", " ");
std::cout
<< "\n\nthe inversion is valid: "
<< std::boolalpha << (A*inverse(A)).is_unit();
  std::cin.get();
}

Вывод программы:
A =
|| 21 3 4 ||
|| 3335 6 75 ||
|| 81 9 10 ||
inversion of A =
|| -205/7792 1/3896 67/7792 ||
|| -27275/23376 -19/3896 11765/23376 ||
|| 9843/7792 9/3896 -3293/7792 ||
the inversion is valid: true

Данная программа находится в стадии разработки, вывод представлен теоретический

Слайд 14

Пример программы № 2 Представление некоторых максимальных значений фундаментальных типов как

Пример программы № 2

Представление некоторых максимальных значений фундаментальных типов как значений

big_int.
Программа:
#include
#include
#include
using namespace Arageli;
int main ()
{
big_int
maxint = std::numeric_limits::max(),
maxfloat = std::numeric_limits::max(),
maxdouble = std::numeric_limits::max();
std::cout
<< "maximum int value is " << maxint
<< "\nmaximum float value is " << maxfloat
<< "\nmaximum double value is " << maxdouble;
std::cin.get();
}

Вывод программы:
maximum int value is 2147483647
maximum float value is 340282346638528859811704183484516925440
maximum double value is 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368

Данная программа находится в стадии разработки, вывод представлен теоретический

Слайд 15

Список использованной литературы https://ru.wikipedia.org/wiki/Arageli http://www.arageli.org/ http://www.arageli.org/documentation http://arageli.org/doc/ArageliUsersGuide.pdf http://arageli.org/doc/Arageli_overview.pdf http://arageli.org/doc/Simple_first_examples.doc

Список использованной литературы

https://ru.wikipedia.org/wiki/Arageli http://www.arageli.org/ http://www.arageli.org/documentation
http://arageli.org/doc/ArageliUsersGuide.pdf
http://arageli.org/doc/Arageli_overview.pdf
http://arageli.org/doc/Simple_first_examples.doc