我有一些代码使用一阶和二阶(iv 和 kv)的修改贝塞尔函数。令人烦恼的是,它们似乎有限制,即 iv(0,713) 和 kv(0,697),分别加 1,分别得到无穷大和 0。这对我来说是一个问题,因为我需要使用高于此的值,通常高达 2000 或更高。当我尝试除以这些时,我最终除以 0 或无穷大,这意味着我要么得到错误,要么得到零,这两者都是我想要的。
我正在使用scipy 贝塞尔函数 http://docs.scipy.org/doc/scipy/reference/special.html#bessel-functions,是否有更好的函数可以处理更小和更大的数字,或者修改Python以处理这些大数字的方法。我不确定这里真正的问题是什么,为什么Python不能解决超过700的问题,是函数还是Python?
我不知道Python是否已经这样做了,但我只需要前5-10位数字*10^x;也就是说我不需要全部 1000 个数字,也许这就是 Python 的计算方式与 Wolfram Alpha 的计算方式相比的问题?
The iv
and kv
Scipy 中的函数或多或少与使用双精度机器浮点所能获得的一样好。正如上面的评论中所指出的,您正在结果从浮点范围溢出的范围内工作。
您可以使用mpmath
库,它具有可调精度(软件)浮点,可以解决这个问题。 (它与 MPFR 类似,但在 Python 中):
In [1]: import mpmath
In [2]: mpmath.besseli(0, 1714)
mpf('2.3156788070459683e+742')
In [3]: mpmath.besselk(0, 1714)
mpf('1.2597398974570405e-746')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)