2024-04-27 19:21:35 发布
网友
我正在求解一个大型非线性方程组,我需要很高的数值精度。我目前正在使用sympy.lambdify将方程组及其雅可比矩阵的符号表达式转换为矢量化函数,这些函数以ndarray作为输入并返回ndarray作为输出。在
sympy.lambdify
默认情况下,lambdify返回数据类型为numpy.float64的数组。是否可以让它返回一个dtype为numpy.float128的数组?也许这要求输入的数据类型是numpy.float128?在
numpy.float64
numpy.float128
输出只是反映了输入:
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'>
如果需要很高的精度,可以尝试使用SymPy浮点,或者直接使用mpmath(它是SymPy的一部分),它提供任意精度。例如,sympy.Float('2.0', 100)创建一个精度为100位的2.0浮点。例如,您可以使用sympy.sin(2).evalf(100)来获得100位数的sin(2)。这将比numpy慢很多,因为它是任意精度的,这意味着它不使用机器浮点,而且它是用纯Python实现的(而numpy是用Fortran和C编写的)。在
sympy.Float('2.0', 100)
sympy.sin(2).evalf(100)
输出只是反映了输入:
如果需要很高的精度,可以尝试使用SymPy浮点,或者直接使用mpmath(它是SymPy的一部分),它提供任意精度。例如,
sympy.Float('2.0', 100)
创建一个精度为100位的2.0浮点。例如,您可以使用sympy.sin(2).evalf(100)
来获得100位数的sin(2)。这将比numpy慢很多,因为它是任意精度的,这意味着它不使用机器浮点,而且它是用纯Python实现的(而numpy是用Fortran和C编写的)。在相关问题 更多 >
编程相关推荐