LINUX.ORG.RU

Сообщения VladimirP

 

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

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

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

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

«Математическая нотация» — класс, который объединяет вычисленное значение и формулу. Он может формироваться в результате вычислений или конструироваться из числа. Метод (разумеется, далее все имена методов и свойств условны) «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.

 , , , ,

VladimirP
()

Порекомендуйте чипсет для материнской платы

Выбираю новую «мать» под слот AM3+. Каких-либо сверхтребований нет, но есть необходимость подключать пару параллельных IDEшных устройств. Порекомендуйте, каким способом это решить: взять мать на чипсете AMD 800-й серии с PATA-разъемом на борту или на более современном чипсете 900-й серии (которая, насколько я знаю, контроллера паралельного ATA не имеет) и вставить в PCIe дополнительный контроллер PATA.

 ,

VladimirP
()

[бэкапа не было][LOR] Урал

У кого сохранилась фотография «Урала» из темы http://www.linux.org.ru/gallery/screenshots/3406455 ? Киньте куда-нибудь, а то на radikal её уже нет.

Переставляя систему на нетбуке, как-то позабыл, что и на нём могут лежать уникальные данные, которые надо предварительно сохранить.

 

VladimirP
()

[эмуляция] очень древняя Windows-программа

Нужно запустить старинную программу, которая написана еще для обычной Windows (обычная -- в том смысле, что тогда Windows называлась просто Windows, без добавок в виде года или букв, а версии нумеровались числами). Как это правильно сделать?

Wine, насколько я знаю, эмулирует только Win32, поэтому для данного случая он бесполезен. Два из возможных способов -- это, наверное: 1) DOSEmu+дистрибутив Windows; 2) Виртуалка+OS/2, в которой эмуляция Windows очень хороша. Но вот сомневаюсь, есть ли у меня возможность добыть дистрибутивы OS/2 и Windows.

 

VladimirP
()

RSS подписка на новые темы