Открытый исходный язык/библиотека/формат представления, который позволяет рассматривать числовые формулы как объекты?

Я ищу способ сохранить серию формул/уравнений в виде текста (чтобы их было легко различить). Более поздние формулы зависят от результатов более ранних.

Я должен иметь возможность оценивать формулы (аналогично Live Worksheets в MathCAD) по числовым результатам, а также программно создавать строковое представление исходной формулы.

Другими словами, я хотел бы иметь возможность обрабатывать сами формулы как данные, а также оценивать формулы.

Я хотел бы иметь текстовый редактор с подсветкой синтаксиса при редактировании формул.

Мой первый подход заключался в том, чтобы иметь файл Python с формулами, хранящимися в виде строк, а затем вызывать eval() для строк. Однако это не позволяет подсвечивать синтаксис формул.

Я предпочитаю Python, но я открыт для других непатентованных решений.

Пример:

a = 73
b = 13
c = 100
d = 20
e = 18

x = a^2 + b / (c - min(d, e))
y = c + sqrt(x * e)

Цель состоит в том, чтобы автоматически генерировать другой код, используя оцененные результаты формул, комментируя этот сгенерированный код самими исходными формулами.


person kostmo    schedule 07.09.2011    source источник
comment
Разве лямбды не сделают работу?   -  person Paul Manta    schedule 07.09.2011
comment
Не уверен, как позже я буду создавать строковое представление лямбда-выражения.   -  person kostmo    schedule 16.09.2011


Ответы (1)


вы можете использовать симпи:

from sympy import *

a,b,c,d,e = symbols("a,b,c,d,e")
x = a**2 + b/(c-min(d,e))
y = c+sqrt(x*e)

values = {a:73,b:13,c:100,d:20,e:18}

print x
print y

print x.subs(values)
print y.subs(values)

print N(x.subs(values))
print N(y.subs(values))

вывод:

a**2 + b/(c - d)
c + (e*(a**2 + b/(c - d)))**(1/2)
426333/80
100 + 3*4263330**(1/2)/20
5329.16250000000
409.717492240913
person HYRY    schedule 07.09.2011