python/scipy、numpy、sympy 中是否有等同于 Mathematicas RootApproximant 函数的函数?
Is there an equivalent to Mathematicas RootApproximant function in python / scipy, numpy, sympy?
我正在 python 或 python 库中寻找与 Mathematicas RootApproximant 函数等效的函数:
https://reference.wolfram.com/language/ref/RootApproximant.html
基本上,这个函数求一个数值的代数根,例如
RootApproximant[1.414213] -> sqrt(2)
谢谢!
您可能正在寻找 mpmath.identify()
:
In [295]: import mpmath as mpm
In [296]: mpm.identify(1.414213)
Out[296]: 'sqrt(((4-sqrt(0))/2))'
In [297]: mpm.identify(3.141592/2)
Out[297]: '(2**(157/183)*3**(67/183)*5**(152/183))/(7**(59/61))'
In [298]: mpm.identify(3.141592/2,['pi'])
Out[298]: 'pi*((4-sqrt(0))/8)'
它显然不像 Mathematica 的实现那样清晰明了,但我相信它胜过任何手动尝试完成这项工作。而且这些功能肯定是不同的(而且更稀缺),所以如果它符合您的需要,您应该查看手册。
查看 sympy.nsimplify
(内部使用 mpmath.identify
)
>>> nsimplify(1.414213, tolerance=1e-6)
√2
我正在 python 或 python 库中寻找与 Mathematicas RootApproximant 函数等效的函数: https://reference.wolfram.com/language/ref/RootApproximant.html
基本上,这个函数求一个数值的代数根,例如
RootApproximant[1.414213] -> sqrt(2)
谢谢!
您可能正在寻找 mpmath.identify()
:
In [295]: import mpmath as mpm
In [296]: mpm.identify(1.414213)
Out[296]: 'sqrt(((4-sqrt(0))/2))'
In [297]: mpm.identify(3.141592/2)
Out[297]: '(2**(157/183)*3**(67/183)*5**(152/183))/(7**(59/61))'
In [298]: mpm.identify(3.141592/2,['pi'])
Out[298]: 'pi*((4-sqrt(0))/8)'
它显然不像 Mathematica 的实现那样清晰明了,但我相信它胜过任何手动尝试完成这项工作。而且这些功能肯定是不同的(而且更稀缺),所以如果它符合您的需要,您应该查看手册。
查看 sympy.nsimplify
(内部使用 mpmath.identify
)
>>> nsimplify(1.414213, tolerance=1e-6)
√2