2016-01-08 2 views
4

дана SymPy символической функцией, напримероценка SymPy функции в произвольной точности с плавающей точкой

x=symbols("x") 
h=sin(x) 

когда один называет

h.subs(x, mpf('1.0000000000000000000000000000000000000000000001')) 

SymPy возвращает число с плавающей точкой. Возвращаемое значение не является mpf.

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

ответ

4

Чтобы оценить выражение, используйте expr.evalf(), который принимает в качестве первого аргумента точность (по умолчанию 15). Вы можете заменить выражения, используя expr.evalf(prec, subs=subs_dict).

>>> sin(x).evalf(50, subs={x: Float('1.0')}) 
0.84147098480789650665250232163029899962256306079837 
+0

Спасибо, с небольшим изменением ваш ответ делает то, что я ищу. Мне нужно в целом изменить ваше создание Float ('') на создание mpf (''), но оно также компилируется. –

+0

Второй комментарий: кажется, что симпатичный Float есть? тип mpf. Поэтому мой первый комментарий не был ни здесь, ни там. –

+0

Да, Float - это оболочка вокруг mpf, которая необходима для правильной работы функций SymPy. Если вы хотите работать с функциями и типами mpmath напрямую, другой вариант заключается в использовании 'lambdify (x, sin (x)," mpmath ")', который преобразует выражение SymPy в функцию mpmath, которая затем может быть вызвана с помощью mpf , – asmeurer

Смежные вопросы