Добрый вечер.
Я оцениваю некоторые (бесконечные) суммы модифицированных функций Бесселя первого рода.Я пытаюсь аппроксимировать эти суммы, рассматривая только конечное количество терминов и оценивая сумму, используя функцию 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), отклонения, по-видимому, не возникают или являются чрезвычайно маленькими.
Кто-нибудь имеет какие-либо идеи по этому странномуповедение?
Любая помощь очень ценится.
С уважением.