Skip to content

Автоматизация построения алгоритмов интегрирования на основе явных численных схем с согласованными областями устойчивости (выпускная квалификационная работа бакалавра)

License

Notifications You must be signed in to change notification settings

Alexey-Sagaydak/ODEClientServer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Выпускная квалификационная работа бакалавра

Тема: Автоматизация построения алгоритмов интегрирования на основе явных численных схем с согласованными областями устойчивости.

Описание

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

Проект состоит из двух частей:

  1. Сервер — получает задачу, решает её и возвращает массив точек клиенту.

  2. Клиент — это приложение, созданное для тестирования различных решателей.

Структура проекта:

ODEClientServer/
├── Client/ # Клиентская часть приложения
│   ├── Images/ # Изображения
│   ├── Models/ # Модели данных
│   ├── ViewModels/ # Логика представления
│   └── Views/ # Пользовательский интерфейс
│
├── Server/ # Серверная часть приложения
│   ├── contrib/ # Внешние зависимости
│   ├── src/ # Исходный код сервера
│   └── odesolvers-lib/ # Библиотека с решателями ОДУ
│
└── Docker/ # Конфигурация Docker для сборки сервера

Основные возможности:

  • Сервер:

    • Принимает запросы от клиента;
    • Решает задачу заданным решателем;
    • Возвращает результаты вычислений клиенту.
  • Клиент:

    • Выбирает готовую систему ОДУ из списка;
    • При необходимости меняет коэффициенты задачи;
    • Выбирает решатель;
    • Отправляет запрос серверу на решение задачи;
    • Получает решение и строит график.

Сборка и запуск

Сервер

  1. Убедитесь, что в системе установлен Docker;
  2. Для запуска сервера достаточно ввести команду:
    docker run -it -d -p 7777:7777 --rm alexey123789/ode-server:latest
  3. Чтобы убедиться, что сервер работает, введите в браузере следующий адрес:
    http://127.0.0.1:7777
    
    В случае успеха появится сообщение Server is working fine!

Note

Если необходимо выполнить сборку сервера из исходного кода, то обратитесь к инструкции в папке Docker/.

Клиент

  1. Требования:
    • Windows 7, 10/11;
    • .NET 8.0 и выше.
  2. Для запуска клиента запустите .exe файл из раздела Releases репозитория.

Note

Если необходимо выполнить сборку клиента из исходного кода, то рекомендуется открыть проект в Visual Studio 2022 или JetBrains Rider с установленными компонентами для работы с WPF на C#.

Описание интерфейса клиента

Описание интерфейса клиента

Меню

Пункт меню Подпункты
Файл Файл
Настройки Настройки
Текст Текст
Справка Справка

Панель инструментов

Панель инструментов

  • Сохранить результаты в виде текста (.xlsx, .txt)
  • Сохранить графики как изображение (.jpg)
  • Ось X
  • Ось Y
  • Увеличить масштаб
  • Уменьшить масштаб
  • Сбросить масштаб
  • Очистить поле с графиками
  • Xmin-Xmax - диапазон по оси X
  • Ymin-Ymax - диапазон по оси Y
  • Статус подключения к серверу
  • Вызов справки
  • О программе

Заполнение информации о задаче

Для тестирования решателей было добавлено три задачи:

Задача Параметры
Уравнение Ван дер Поля Уравнение Ван дер Поля
Принужденный осциллятор Принужденный осциллятор
Система Робертсона Система Робертсона

Выбор метода решения

Методы решения

1. Алгоритмы с контролем точности

  • Явный метод Эйлера — простейший метод на основе формулы явного метода Эйлера для прогноза, а трапеций — для коррекции.

  • RK21 — основан на двухстадийной формуле типа Рунге-Кутта с контролем точности.

2. Алгоритмы с контролем устойчивости

  • RK23S — трехстадийный метод типа Рунге-Кутты с контролем точности и устойчивости.

  • STEKS — пятистадийный метод четвертого порядка точности типа Рунге-Кутта с контролем точности и устойчивости.

3. Алгоритмы переменного порядка и шага

  • DISPD — метод, состоящий из двух схем, с переменным порядком и шагом, адаптирующийся к изменению поведения решения.

  • DISPF — алгоритм переменного порядка и шага на основе численных формул первого, второго и пятого порядков точности.

    Пункт меню Подпункты
    Описание параметров метода DISPF
    (появляется при нажатии на знак подсказки)
    Описание параметров DISPF

Note

Более подробно можно прочитать в документации к библиотеке решателей в Server/src/odesolvers-lib/doc/.

Описание API сервера

1. Проверка работоспособности сервера

  • Метод: GET
  • Путь: /
  • Ответ: Server is working fine!

2. Решение системы ОДУ (асинхронный потоковый режим)

  • Метод: 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.

About

Автоматизация построения алгоритмов интегрирования на основе явных численных схем с согласованными областями устойчивости (выпускная квалификационная работа бакалавра)

Topics

Resources

License

Stars

Watchers

Forks