- •Введение
- •1 Средства для решения задач нелинейных алгебраических уравнений в распределенной вычислительной среде
- •1.1 Понятие распределенных вычислений как способа решения трудоёмких вычислительных задач с использованием нескольких компьютеров
- •1.2 Распределенные вычисления на основе стека
- •1.3 Понятие клиент-серверных систем
- •1.4 Методы и их модификации для решения систем нелинейных уравнений
- •2 Алгоритмы и методы для решения нелинейных алгебраиеских уравнений на основе метода натуральных градиентов
- •2.1 Техническое задание для написания программы для решения систем нелинейных алгебраических уравнений методом натуральных градиентов
- •2.2 Aлгоритм метода натуральных градиентов
- •2.3 Алгоритмы линейного и распределенного решения
- •2.4 Алгоритм синтаксического анализатора, разработанного на основе обратной польской записи
- •2.5 Математическая модель распределенного вычисления Якобиана отображения
- •2.6 Описание основных функций клиент-серверного приложения
- •3 Программный комплекс для решени нелинейных алгебраических уравнений методом натуральных градиентов
- •3.1 Руководство пользователя
- •3.2 Результат исследование зависимости времени нахождения решения от размерности системы и способа решения
- •Заключение
- •Список использованных источников
- •Приложение а
- •Код сервеной части
- •Приложение б
- •Код клиенткой части
- •Приложение в
- •Данные из тестовых файлов
- •Приложение г
2.5 Математическая модель распределенного вычисления Якобиана отображения
Якобиан отображения − определённое обобщение производной для функции одной переменной для отображений из Евклидова пространства в себя. Якобиан выражается как определитель матрицы, составленной из частных производных отображения. Матрица (2.6) из частных производных координатных функций данного отображения в точке называется матрицей Якоби в этой точке. Определитель этой матрицы называется Якобиан. [11, с. 66]
(2.6)
Или компактно (2.7)
(2.7)
В частном случае m=1 матрица Якоби состоит из одной строки: этот вектор в Rn или Cn называется градиентом функции f (в точке (x1,…,xn)) (2.8):
(2.8)
Mатрица Якоби возникает фактически оттуда же, откуда возникает обычная производная: из необходимости исследовать поведение произвольной нелинейной функции.
При больших размерах матрицы Якобиана, то есть при большом количестве искомых неизвестных численных методах вычисления производной удобно разделить матрицу на две равных части. Каждую часть возможно параллельно решить на двух компьютерах. Затем после получениях решений, можно составить единую матрицу.
Пример. Переход элементарной площади dS=dxdy от декартовых координат (x, y) к полярным координатам (r, φ) (2.9):
(2.9)
Матрица Якоби (2.10) имеет следующий вид
(2.10)
А якобиан перехода от декартовых координат к полярным — есть определитель матрицы Якоби (2.11):
(2.11)
Таким образом, элемент площади при переходе от декартовых к полярным координатам будет выглядеть следующим образом (2.12):
(2.12)
2.6 Описание основных функций клиент-серверного приложения
Распределенное приложение состоит из двух модулей: server и client. Модуль server выполняет роль серверной программы. Модуль client выполняет роль клиентской программы. Так как в программе реализована распределенная система, в которой нет необходимости многим клиентам подключаться к серверу для использования общих ресурсов сервера, то сам сервер выполняет роль клиента, который подключается к клиенту (в свою очередь выполняющего роль сервера) для передачи ему части задания для расчета. То есть реализована «гибридная» система, где клиент выполняет роль сервера, переходя в режим прослушки порта и ожидания задания от клиента-сервера. Алгоритм решения задачи распараллелен на две части, которые решают два удаленных компьютера. Структура программного комплекса показана на рисунке 2.1.
Рисунок 2.1 – Структура программного комплекса
Рассмотрим ключевые функции класса PostfixNotationExpression
Таблица 2.1 – Функции класса PostfixNotationExpression
Название |
Параметры |
Описание |
GetPriority |
string s |
Определяет приоритет операций умножения, деления, суммирования, вычитания, а так же скобок |
ConvertToPostfixNotation |
string input |
Перевод выражения в обратную польскую запись |
Result |
string input |
Формирование финального выражения |
Более детально о функции ConvertToPostfixNotation: ее предназначение – по правилам конвертации выражений, производится перевод выражения из инфиксной нотации в постфиксную (форма обратной польской записи). Все операторы следуют за всеми своими операндами, а все скобки удаляются. Если посмотреть на выражение ((A * B) + (C / D)), то в форме обратной польской записи это будет выглядеть как AB * CD / +. Благодаря этой конвертации, написание кода для парсинга выражений и вычисления нелинейного уравнения становится намного проще.
Основные функции серверной части занесены таблицу 2.2.
Таблица 2.2 – Основные функции серверной части
Название |
Параметры |
Описание |
1 |
2 |
3 |
ChangeFun |
ref String s, int numFun |
Заменяем тригонометрические функции на вычисленные выражения |
fYakobi |
int i, int j, double[,] x |
Вычисляем производную по j-ой переменной в i-ой функции. Значение Якобиана [i, j] |
Продолжение таблицы 2.2
1 |
2 |
3 |
Func |
String s,double[,] x |
Значение функции, записанной в строке |
transp |
double[,] A,out double[,] Rez |
Транспонирование матрицы. |
Scal
|
int n, double[,] s1, double[,] s2 |
Возвращает скаляр векторов, записанных в столбцах |
Button1Click |
object sender, EventArgs e |
По нажатию кнопки осуществляется линейное решение |
Button2Click |
object sender, EventArgs e |
По нажатию кнопки осуществляется распределенное решение |
Umn |
int n, int m, int k, double[,] A, double[,] B, out double[,] Rez |
Функция для перемножения матриц |
ОткрытьТестToolStripMenuItemClick |
object sender, EventArgs e |
Функция для запуска окна выбора файла с тестовыми данными |
SendMessageFromSocket |
IPAddress ipAddr, int port, byte[] sendBytes, ref byte[] getBytes |
Функция, в которой происходит соединение с удаленным устройством и отправка данных через сокет |
Здесь в более детальном описании нуждается функция ChangeFun, предназначенная для замены тригонометрические функции на вычисленные выражения. Функция распознает тригонометрические функции («sin», «cos», «ctg», «tg») и убирает лишние скобки, потом сначала решает значения в скобках тригонометрических функций согласно приоритету, затем вычисляет их тригонометрическое значение.
Отправка данных происходит с помощью функции SendMessageFromSo-cket. В этой функции происходит соединение с удаленным устройством. Устанавливается удаленная точка для сокета, соединяется сокет с удаленной точкой, далее отправляются данные через сокет и после получения ответа происходит освобождение сокета.
Основные функции клиентской части класса MainForm – Solve и Button1Click. Первая функция предназначена для решение уравнения при помощи формы обратной польской записи. Функциональная значимость кнопки «Готов» (функция Button1Click) состоит в том, что после ее нажатия происходит установка соединения и передача данных о решении.