DynamicSolver is a math system with two general features: modelling dynamic systems and minimizing functions.
branch | AppVeyor |
---|---|
master |
DynamicSolver
Реализовать метод Дормана-Принса для возможности сравнения с ним результатов других методов
Реализовать символьный вывод формул Xn+1 (линейный метод Ньютона)
Пропадают линии на графике КД. Причина неясна, видимо, какая-то проблема именно в части рендера.
Необходимо исследование проблемы, и, возможно, замена фреймворка для работы с графиками на новый.
Разработать семантическую модель, упростить ее построение
Реализовать экстраполяционный метод на базе метода КД.
Интерфейс для системы, реализованной в #5
Возможности:
Разработку желательно начинать после создания шаблона в Visio
Убрать посторонние зависимости, вынести ядро в nuget-пакет
Добавить исполняемые выражения на основе Expression
Реализовать простой графический интерфейс системы моделирования. На данном этапе важнее показать возможности приложения, сложный интерфейс не требуется.
При возможности (если не займет больше часа-двух) добавить показ графиков.
Явная и неявная версия метода средней точки
Реализовать генетичекий алгоритм минимизации функций
Реализовать оптимизатор выражений.
В рамках данной задачи - только тривиальные оптимизации: предподсчет констант, удаление незначимых членов выражения.
Реализовать следующие примитивы:
Обеспечить следующую функциональность:
EMP, EulerCromer, IEuler, LIEuler, LIMP
Реализовать метод Нелдера-Мида
Реализовать полунеявный метод КД.
На интерфейсе показывать два графика (явный Эйлер и КД).
Сделать модуль преобразования синтаксической модели в семантическую. Проработать вопрос перевода переменных.
Реализовать символьный поиск производных (т.е. по выражению 2_x^4 получать дерево выражения 2_4*x^3
Реализовать интерпретатор для выражений. Интерпретированное выражение должно иметь возможность получать аргументы как в виде словаря, так и массивом чисел в определенном порядке.
Во втором случае порядок чисел должен соответствовать порядку имен переменных, отсортированных по имени.
Поддержать следующие функции:
Построение отчета для выбранных решателей, экспорт отчета
Добавить возможность выбирать решатель в интерфейсе. Как для решения системы, так и бэйзлайн для оценки погрешности.
Создать примитивный интерфейс системы минимизации:
Реализовать инфраструктуру системы минимизации функций и реализовать примитивные методы.
Заложить в архитектуру возможность построения цепочек методов, контролировать количество шагов. Подумать про контроль промежуточных результатов: не логгирование, а наблюдение в рантайме. Push-модель (желательно Rx) или events (нежелательно).
Реализовать генетический алгоритм минимизации. Не требуется конфигурируемость, можно представить примитивную рабочую реализацию.
При вводе первым символом цифры происходит падение программы
Реализовать неявный метод Эйлера, затем сделать из него экстраполяционный
Разделить список методов и настройки экстраполяции.
Уменьшить вертикальный размер панели настроек, оставить больше места для графиков.
Сделать рефакторинг парсера, добавить явную токенизацию.
Реализация экстраполяционного метода на базе метода Эйлера
Убрать минимизацию из программы, поскольку этот модуль больше не нужен.
Переработать построение графиков, выделить некоторую модель графиков результата и отдельный контрол для их вывода.
Реализовать стратегию выполнения шага, поддержать внедрение стратегии шага в решатели.
Замерять и выводить время работы метода для возможности сравнения
В выражении такого вида (a - (b - c)) теряются внутренние скобки, в результате выражение становится неправильным: (a - b - c)
Реализовать алгоритм, заменяющий алгоритм Ньютона для решателя КД-методом.
Рефакторинг модулей интерфейса приложения. Переработать использование ReactiveUI, рассмотреть варианты обеспечения более низкой связности элементов интерфейса.
Реализовать ядро системы моделирования.
Реализовать вычисление минимума разными методами одновременно, с отображением результатов каждого метода и сравнением результатов разных методов.
На данном этапе предполагается хардкод методов и их настроек, но желательно заложить возможности для добавления методов в набор используемых методов, поддерживать разные наборы и т.п.
Графический интерфейс реализуется в другой задаче, здесь необходимо ядро и покрытие тестами для подтверждения работы.
Модуль построения семантической модели. Валидация переменных, формирование метаинформации о входных и выходных данных, валидация всей модели.
Убрать устаревший код и реорганизовать проекты.
Реализовать метод Розенброка
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.