我正在解决一个大的非线性方程组,我需要高度的数值精度。我目前正在使用sympy.lambdify
将方程组及其雅可比元素的符号表达式转换为向量化函数,将ndarray作为输入并返回ndarray作为输出。
默认情况下,lambdify返回dtype为numpy.float64
的数组。是否可以让它返回一个dtype为numpy.float128
的数组?也许这需要输入dtype为numpy.float128
?
答案 0 :(得分:1)
如果您需要很多精度,可以尝试使用SymPy浮点数,或直接使用mpmath(这是SymPy的一部分),它提供任意精度。例如,sympy.Float('2.0', 100)
创建一个2.0的浮点数,其精度为100位。例如,您可以使用类似sympy.sin(2).evalf(100)
的内容来获取100位sin(2)。这将比numpy慢得多,因为它是任意精度,这意味着它不使用机器浮点数,并且它是用纯Python实现的(而numpy是用Fortran和C编写的)。
答案 1 :(得分:0)
输出只反映输入:
from numpy import float128
from sympy.abc import x
from sympy.utilities import lambdify
f = lambdify(x, x ** 2)
result = f(float128(2))
result
#>>> 4.0
type(result)
#>>> <class 'numpy.float128'>