Тема: Автоматизация построения алгоритмов интегрирования на основе явных численных схем с согласованными областями устойчивости.
В рамках данной работы требуется разработать адаптивный алгоритм интегрирования, содержащий несколько стадий, контролирующий точность и устойчивость на каждом шаге. Это позволит решать системы дифференциальных уравнений, включая жесткие системы.
Проект состоит из двух частей:
-
Сервер — получает задачу, решает её и возвращает массив точек клиенту.
-
Клиент — это приложение, созданное для тестирования различных решателей.
Структура проекта:
ODEClientServer/
├── Client/ # Клиентская часть приложения
│ ├── Images/ # Изображения
│ ├── Models/ # Модели данных
│ ├── ViewModels/ # Логика представления
│ └── Views/ # Пользовательский интерфейс
│
├── Server/ # Серверная часть приложения
│ ├── contrib/ # Внешние зависимости
│ ├── src/ # Исходный код сервера
│ └── odesolvers-lib/ # Библиотека с решателями ОДУ
│
└── Docker/ # Конфигурация Docker для сборки сервера
Основные возможности:
-
Сервер:
- Принимает запросы от клиента;
- Решает задачу заданным решателем;
- Возвращает результаты вычислений клиенту.
-
Клиент:
- Выбирает готовую систему ОДУ из списка;
- При необходимости меняет коэффициенты задачи;
- Выбирает решатель;
- Отправляет запрос серверу на решение задачи;
- Получает решение и строит график.
- Убедитесь, что в системе установлен Docker;
- Для запуска сервера достаточно ввести команду:
docker run -it -d -p 7777:7777 --rm alexey123789/ode-server:latest
- Чтобы убедиться, что сервер работает, введите в браузере следующий адрес:
В случае успеха появится сообщение
http://127.0.0.1:7777
Server is working fine!
Note
Если необходимо выполнить сборку сервера из исходного кода, то обратитесь к инструкции в папке Docker/.
- Требования:
- Windows 7, 10/11;
- .NET 8.0 и выше.
- Для запуска клиента запустите
.exe
файл из разделаReleases
репозитория.
Note
Если необходимо выполнить сборку клиента из исходного кода, то рекомендуется открыть проект в Visual Studio 2022
или JetBrains Rider
с установленными компонентами для работы с WPF
на C#
.
Пункт меню | Подпункты |
---|---|
Файл | ![]() |
Настройки | ![]() |
Текст | ![]() |
Справка | ![]() |
- Сохранить результаты в виде текста (
.xlsx
,.txt
) - Сохранить графики как изображение (
.jpg
) - Ось X
- Ось Y
- Увеличить масштаб
- Уменьшить масштаб
- Сбросить масштаб
- Очистить поле с графиками
Xmin-Xmax
- диапазон по оси XYmin-Ymax
- диапазон по оси Y- Статус подключения к серверу
- Вызов справки
- О программе
Для тестирования решателей было добавлено три задачи:
Задача | Параметры |
---|---|
Уравнение Ван дер Поля | ![]() |
Принужденный осциллятор | ![]() |
Система Робертсона | ![]() |
-
Явный метод Эйлера — простейший метод на основе формулы явного метода Эйлера для прогноза, а трапеций — для коррекции.
-
RK21 — основан на двухстадийной формуле типа Рунге-Кутта с контролем точности.
-
RK23S — трехстадийный метод типа Рунге-Кутты с контролем точности и устойчивости.
-
STEKS — пятистадийный метод четвертого порядка точности типа Рунге-Кутта с контролем точности и устойчивости.
-
DISPD — метод, состоящий из двух схем, с переменным порядком и шагом, адаптирующийся к изменению поведения решения.
-
DISPF — алгоритм переменного порядка и шага на основе численных формул первого, второго и пятого порядков точности.
Пункт меню Подпункты Описание параметров метода DISPF
(появляется при нажатии на знак подсказки)
Note
Более подробно можно прочитать в документации к библиотеке решателей в Server/src/odesolvers-lib/doc/.
- Метод:
GET
- Путь:
/
- Ответ:
Server is working fine!
- Метод:
POST
- Путь:
/solve
- Тело запроса (
JSON
):{ "Method": "Метод решения", "Equation": "Имя задачи", "Parameters": { "t0": 0.0, "t1": 10.0, "tolerance": 1e-5, "y0": [1.0, 0.0] } }
- Ответ:
- Формат: потоковый
JSON
с использованиемTransfer-Encoding: chunked
- Структура:
{ "status": "success | error", "results": [ {"t": 0.0, "values": [1.0, 0.0]}, {"t": 0.1, "values": [0.99, -0.1]} ] }
- Особенности:
- Данные отправляются чанками по мере вычисления
- При ошибке возвращается
HTTP 500
с описанием
- Формат: потоковый
Данный проект распространяется под лицензией MIT. Подробнее см. файл LICENSE.