guybydefault / SymbolicCalculations

Symbolic calculation system (a. k. a. WolframAlpha) written in Java. Supporting polynomial simplification and comparison, matrix & vector operations.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Symbolic-Calculations

Цель

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

Порядок выполнения:

  • Проанализировать задействуемые в задании предметные области, произвести их декомпозицию, выявить сущности и разработать архитектуру решения
  • Реализовать необходимые структуры данных и модели
  • Реализовать соответствующие варианту задания методы загрузки и сохранения данных
  • Реализовать соответствующий заданию алгоритм
  • Реализовать тестовые сценарии
  • Оформить отчет по работе и продемонстрировать преподавателю для защиты вместе с демонстрацией разработанного решения

Ограничения на способ выполнения:

  • Нужно следовать порядку выполнения
  • Нужно для символьного представления использовать иммутабельную модель данных
  • Нужно использовать аргументы командной строки для передачи входных данных в программу (например, имен файлов, откуда зачитать выражения для обработки)
  • Нельзя использовать функциональные ЯП
  • Нельзя использовать синтаксические конструкции ЯП, реализующие проверки или приведения с заранее известным типом (is, as, cast, match, ...)

Задача

Приведение многочлена к стандартному виду и сравнение.

Дополнительная задача: вычисление выражения в матрицах и векторах (ветка matrix)

Описание реализации

Задача реализована с помощью паттерна Visitor.

Модель строится с использованием четырех типов объектов: Constrant (extends Symbol), Expression (extends Symbol), StringSymbol (extends Symbol), Symbol.

Реализован свой DSL, который содержит: собственные арифметические функции (Plus, BinaryPlus, BinaryTimes, Times, Divide, Power, Minus), логические функции If, Eq, Compare, Not, Less, More, And, Or, While), функции приведения, функции над списками (Generate, Part, Fold, Append, Map, Filter, Length, Concat, CountItem, Contains, Distinct, Group, Range, ListSum).

Ввод и вывод выражений в формате XML.

About

Symbolic calculation system (a. k. a. WolframAlpha) written in Java. Supporting polynomial simplification and comparison, matrix & vector operations.


Languages

Language:Java 100.0%