2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Алгоритм для расчета формул
Сообщение10.09.2010, 18:33 


10/09/10
2
Существует набор несложных формул, которые при подстановке данных вычисляют определенные величины.
Нужно это реализовать программно (я делаю это на PHP).
Для записи формул использую простую запись вида Х1+Х2+Х3. Когда нужно провести расчеты через функцию preg_replace в цикле поочередно заменяю X1, X2 ..на реальные цифры (введенные пользователем, сохраненные ранее - это не важно)
Затем использую функцию
Код:
eval ('$calculation_result ='. $trans_formula.';')

где $trans_formula - текст формулы с подставленными данными.

Этот механизм выглядит как-то примитивно и у меня ощущение, что я пытаюсь заново придумать велосипед. Возможно, существуют какие-то готовые алгоритмы, методики, подходы для реализации этой задачи? Необязательно писать код - хотя бы общий алгоритм. Спасибо.

 Профиль  
                  
 
 Re: Алгоритм для расчета формул
Сообщение11.09.2010, 16:50 
Основатель
Аватара пользователя


11/05/05
4312
У вас такое огромное количество формул, что перевести их в функции нельзя?

 Профиль  
                  
 
 Re: Алгоритм для расчета формул
Сообщение11.09.2010, 19:04 


10/09/10
2
Все дело в том, что пользователи имеют возможность создавать собственные формулы. А потом проводить по ним какие-то расчеты. Если бы все формулы были бы определены наперед, я бы конечно использовал функции.
На других форумах посоветовали использовать обратную польскую нотацию. Если не найду решения лучше - наверное так и сделаю. Однако хотелось бы спросить совета и здесь. Возможно, сам мой подход(сохранение формулы как строки, подстановка значений, интерпретация) неверен и существует какое-то другое решение? Наверняка подобные задачи уже когда-то ставились и были успешно решены.

 Профиль  
                  
 
 Re: Алгоритм для расчета формул
Сообщение11.09.2010, 19:16 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Ну, сам подход, в общем-то, логичен. Но сразу видны проблемы с безопасностью, если формулы пользователей недостаточно проверяются.

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

 Профиль  
                  
 
 Re: Алгоритм для расчета формул
Сообщение22.09.2010, 20:48 
Заслуженный участник


26/07/09
1559
Алматы
Xaositect писал(а):
Обычный подход - делать парсер формул в какое-то внутреннее представление, ту же обратную польскую или дерево, и свой evaluator, принимающий это представление и словарь имя-значение.

Причем, в задаче топикстартера явное промежуточное представление вообще излишне. Достаточно написать простой интерпретатор на основе рекурсивно нисходящего парсера --- например, выделить по вещественнозначной функции на каждое правило грамматики, т.е. как только встретился литерал -- возвращаем его значение, как только встретился арифметический оператор -- парсим (и вычисляем) его операнды и сразу же вычисляем (и возвращаем) результат, ну и т.д.

Лексический анализатор я бы реализовал как конечный автомат в явном виде. Imho, в результате получился бы довольно компактный код, читающийся лучше чем лапша с регулярными выражениями.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group