Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Записка_ПСП_Градиентный спуск C# Клиент-Сервер.docx
Скачиваний:
23
Добавлен:
03.02.2019
Размер:
477.82 Кб
Скачать

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) состоит в том, что после ее нажатия происходит установка соединения и передача данных о решении.