Используемое вами прямое рекуррентное отношение нестабильно.Чтобы понять почему, рассмотрим, что значения BesselJ (n, x) становятся все меньше и меньше примерно в 100 раз *.Вы можете увидеть это, посмотрев на первый член ряда Тейлора для J.
Итак, что вы делаете, вычитаете большое число из кратного несколько меньшего числа, чтобы получить еще меньшее число.Численно это не сработает.
Посмотрите на это так.Мы знаем, что результат порядка 10^-25
.Вы начинаете с чисел, которые имеют порядок 1. Таким образом, чтобы получить хотя бы одну точную цифру, мы должны знать первые два числа с точностью не менее 25 цифр.Мы явно этого не делаем, и рекуррентность фактически расходится.
При использовании того же отношения рекуррентности для перехода назад, от старших к младшим ордерам, стабильно Когда вы начнете с правильных значений для J (20,1) и J (19,1), вы можете также рассчитать все ордера до 0 с полной точностью.Почему это работает?Потому что теперь цифры увеличиваются с каждым шагом.Вы вычитаете очень маленькое число из точного кратного большего числа, чтобы получить еще большее число.