晚上好。
我正在评估第一类经过修饰的Bessel函数的一些(无限)和。我尝试通过仅考虑有限数量的项并使用 mpmath.fsum()函数评估和来估算这些和。我使用mpmath的任意精度计算,因为对于大参数,贝塞尔函数的值可以变得很高。我的代码如下
import mpmath as mpm
# Some initial assignments
x = mpm.mpf(1000)
u = mpm.mpf(1000)
print(mpm.besseli(0, x) * mpm.besseli(0, u) + mpm.fsum([2 * (-1)**m * mpm.besseli(2*m, x) * mpm.besseli(2*m, u) for m in range(1, 199)]))
print(mpm.besseli(0, x) * mpm.besseli(0, u) + mpm.fsum([2 * (-1)**m * mpm.besseli(2*m, x) * mpm.besseli(2*m, u) for m in range(1, 99)]) + mpm.fsum([2 * (-1)**m * mpm.besseli(2*m, x) * mpm.besseli(2*m, u) for m in range(99, 199)]))
print(mpm.besseli(0, x) * mpm.besseli(0, u) + mpm.fsum([2 * (-1)**m * mpm.besseli(2*m, x) * mpm.besseli(2*m, u) for m in range(1, 49)]) + mpm.fsum([2 * (-1)**m * mpm.besseli(2*m, x) * mpm.besseli(2*m, u) for m in range(49, 99)]) + mpm.fsum([2 * (-1)**m * mpm.besseli(2*m, x) * mpm.besseli(2*m, u) for m in range(99, 199)]))
这给出了输出,
0.0
7.13684036512805e+848
2.15550546580361e+847
这显然很奇怪,因为据我了解,这三个值都应相同。
此外,只要x或u值之一很小(例如u = 10),偏差就不会出现或非常小。
有人对这种奇怪的行为有任何想法吗?
非常感谢您的帮助。
亲切的问候。