LINUX.ORG.RU

Ищу библиотеку для вычислений с генерацией формулы

 , , , ,


0

1

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

Прошу подсказать, имеются ли в природе и как называются свободные библиотеки, решающие эту задачу.

Объясняю подробнее, как я вижу эту библиотеку в идеале.

«Математическая нотация» — класс, который объединяет вычисленное значение и формулу. Он может формироваться в результате вычислений или конструироваться из числа. Метод (разумеется, далее все имена методов и свойств условны) «getValue()» выдаёт числовое значение; метод «getExpression()» выдаёт математическое выражение с подстановкой аргументов, в виде строки, в виде какой-нибудь стандартной нотации (TeX, MathML или AsciiMath; метод «getFormula()» — то же самое, но в виде уравнения с отображением результата.

Пример использования библиотеки (для простоты рассмотрим случай, когда выражения формируются в нотации AsciiMath):

// Сформируем компоненты выражения из исходных чисел
Notation number1 = Notation.of( 2 );
Notation number2 = Notation.of( 6 );
Notation number3 = Notation.of( 1.5 );

// Cложим два числа
Notation resultSum = number1.add( number2 );
Number sumNum = resultSum.getValue();  // результат - число 8
String sumExpr = resultSum.getExpression();  // результат - строка "2 + 6"
String sumForm = resultSum.getFormula();  // результат - строка "2 + 6 = 8"

// В идеале, библиотека должна учитывать приоритет операций и расставлять скобки.
Notation resultComp1 = number1.multiply( number2 ).add( number3 );
Number comp1Num = resultComp1.getValue();  // результат - число 13.5
String comp1Expr = resultComp1.getExpression();  // результат - строка "2 * 6 + 1.5"
String comp1Form = resultComp1.getFormula();  // результат - строка "2 * 6 + 1.5 = 13.5"

Notation resultComp2 = number1.multiply( number2.add( number3 ) );
Number comp2Num = resultComp2.getValue();  // результат - число 15
String comp2Expr = resultComp2.getExpression();  // результат - строка "2 * ( 6 + 1.5 )"
String comp2Form = resultComp2.getFormula();  // результат - строка "2 * ( 6 + 1.5 ) = 15"

Notation resultComp3 = number2.add( number3 ).multiply( number1 );
Number comp3Num = resultComp3.getValue();  // результат - число 15
String comp3Expr = resultComp3.getExpression();  // результат - строка "( 6 + 1.5 ) * 2"
String comp3Form = resultComp3.getFormula();  // результат - строка "( 6 + 1.5 ) * 2 = 15"

// Случай с использованием хитрых обозначений
Notation resultRP = number1.add( number2 ).sqrt().pow( number3 );
Number rpNum = resultRP.getValue();  // результат - число 4.75682846001
String rpExpr = resultRP.getExpression();  // результат - строка "sqrt(2+6)^1.5"
String rpForm = resultRP.getFormula();  // результат - строка "sqrt(2+6)^1.5 = 4.75682846001"

Из языков программирования, на котором написана библиотека, предпочтительны те, которые умеют встраиваться в PostgreSQL и на которых могут быть написаны хранимые функции. Годятся Python, Ruby, но на худой конец подойдет и Java.

которые умеют встраиваться в PostgreSQL и на которых могут быть написаны хранимые функции

Вот это вряд ли, а вообще вам нужна maxima или wolfram mathematica наверное...

BattleCoder ★★★★★ ()

Для питона есть весьма годный sympy.

PolarFox ★★★★★ ()
Ответ на: комментарий от BattleCoder

Это слишком круто, символьная алгебра мне не нужна. Да и разбираться с этими пакетами, подозреваю, много времени уйдёт. Конечная цель всей авантюры — в web-приложении сформировать html-страницу с фрагментом математической нотации, которую отображать красиво с помощью библиотек MathJax или KaTeX.

VladimirP ★★★★ ()
Ответ на: комментарий от VladimirP

Как раз Maxima умеет экспорт в tex и html, плюс можно не только генерить статичный текст но и делать интерактивные страницы.

К примеру в wiki можно интегрироваться https://meta.m.wikimedia.org/wiki/User:Mafs/Computer_algebra

http://maxima.sourceforge.net/relatedprojects.html

И она вполне легка к освоению.

alpha ★★★★★ ()
Ответ на: комментарий от VladimirP

Конечная цель всей авантюры — в web-приложении сформировать html-страницу с фрагментом математической нотации, которую отображать красиво с помощью библиотек MathJax или KaTeX.

http://maxima-online.org/

aiqu6Ait ★★★ ()
Ответ на: комментарий от anonymous

Ещё и 502 через раз. :(
Нафиг такое счастье.
Каптча говорит: give reserve

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.