Понять поведение алгоритма

Известно несколько рекурсивных алгоритмов генерации синусоиды,
например (на RU Latex не поддерживатся??):
a(n+1) = a(n) + c * b(n), b(n+1) = b(n) - c * a(n+1)

Дискуссия Статья

И на Python, и на Wolfram эти алгоритмы работают отлично.
Проблема в том, что они мне нужны для digital sound processing.
Я пользуюсь FlowStone. И надо сказать, до сих пор все довольно сложные математические алгоритмы там работали прекрасно, и на Ruby, и на low-level DSP code.

А вот это ведет себя очень странно. Причем все варианты.
Они все сходятся к нулю.
Рано или поздно. При генерации 25 раз в секунду - в течение неск минут.
И!! Даже с добавкой небольшого шума на каждом шаге - также довольно быстро начинают осциллировать возле нуля.

Почти уверен, что это ошибки округления. Но обычно такие ошибки ведут к расходимости. Так ли это, как исправить алгоритм?


Ответы (0 шт):