LINUX.ORG.RU

Сообщения VladimirP

 

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

Форум — Development

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

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

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

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

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

Форум — Linux-hardware

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

 ,

VladimirP
()

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

Форум — Talks

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

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

 

VladimirP
()

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

Форум — Desktop

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

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

 

VladimirP
()

GRAMPS: успешное прохождение теста

Галерея — Скриншоты

На рисунке представлена программа GRAMPS, предназначенная для ведения родословных и семейных летописей. Она оказалась единственной из всех протестированных программ, справившейся с нашим тестовым примером.

Особенность данного рода монгольских песчанок состоит в том, что одна особь -- Машка -- является одновременно и матерью, и бабкой (в клетке она была оставлена вместе с сыном, остальных раздали; размножение продолжилось). Ни одна windows-программа не выдержала теста.

Вверху основное окно программы, открыт режим "Родословная". Глядя на схему, я сначала подумал, что и GRAMPS не выдержит тест. Видно, что Машка вместе со своими предками изображена дважды. Однако, графический отчет "Дерево отношений" (окно на переднем плане) показал, что схемы строятся правильно.

Справа видно окно помощи, в котором открыта подсказка по отчету "Дерево отношений". Внизу Firefox со страницей-приветствием, оно появляется при загрузке дистрибутива.

Вкратце о дистрибутиве. Это LiveCD "Linux Genealogy Desktop CD 3.0", краткое описание которого находится по адресу http://www.gramps-project.org/wiki/index.php?title=Linux_Genealogy_CD . При загрузке выбран русский язык. Настройки, выполненные после загрузки: добавлена английская раскладка клавиатуры, индикатор раскладки; убраны обои рабочего стола, чтобы уменьшить размер PNG. Замеченный недостаток дистрибутива -- отсутствие поддержки LVM2.

>>> Просмотр (1280x1024, 237 Kb)

VladimirP
()

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