ПредишенСледващото

Дискретни намотка функция е (т) и г (т). определено на снимачната площадка на числа Z. нарича следното:

Кръгов намотка на дискретни не-периодична функция е с периодична функция грама се нарича следното:

Дискретен намотка има много различни приложения - умножение на полиноми, произволна точност аритметика, обработка на сигнали. Кръгов намотка не е комутативен - една от функциите е периодичен сигнал, и друг - от не-периодичен сигнал в отговор. Операнди конвенционален намотка твърде често има различни значения, но комутативен на операции - резултат гънка на мозъка не се променя от Първообразът на функциите е и ж.

подаване на данни

Домейн на функциите е и ж е на цялата поредица от числа, но на практика ние трябва да се справят с данни с ограничена дължина. Това е най-удобно, когато е и г са различни от нула само за неотрицателна т. Изчислителна съчетания ALGLIB пакетни решаване на този конкретен проблем - извивките на две функции различна от нула само за не-отрицателни стойности на аргумента. Това позволява да се използва прост кореспонденция между функцията и аргумент индекс масив, който съхранява своята стойност: F (т = l) = f_array [Ь] 0 ≤ I

Ако функции е и г са различни от нула и положителни и отрицателни стойности на аргумента, че е възможно да се използва фактът, че преместването на един от извивките аргументи резултат също се подлага на срязване в същата посока от същото количество (промяна на два аргумента - сумата от отделните премествания). Просто плъзнете е и ж надясно, докато всички не-нулева стойност, няма да се появи от едната страна на нула, обадете се на подпрограма за навиване, а след това се премести в резултат обратно.

Реализация на конволюция в ALGLIB

Тук, за простота, ние ще приемем, че N ≥ М. т.е. втори операнд е по-дълъг от първия, въпреки че скоростта на алгоритъма не зависи от реда, в който са прехвърлени операнди. Всеизвестно е, че намотка може да се изчисли с помощта на бързо преобразуване на Фурие в даден момент O (N · дневник (N)). Въпреки това, използването на линейна трансформация на Фурие не винаги е оптимално решение - ако един операнд е по-къс от другия, може значително да се ускори изчисления използват други алгоритми. В зависимост от дължината на операнди, ALGLIB пакет можете да използвате следните алгоритми:

  • Ако М е малък - използва алгоритъм с сложност O (М · N)
  • Ако М е по-малко от Н. значително, но е твърде голям, за първи алгоритъм - използва припокриване-добавят алгоритъм, като сложност от О (N · дневник (М)).
  • Ако предишните два алгоритъма не даде печалба в скоростта - се използва на базата на алгоритъм FFT с сложност O (N · дневник (N)) (FFT извършва операнди componentwise продукт на честота обратна FFT).

За изчисление на намотка, с помощта на част от алгоритъма на ALGLIB FFT. Конволюция подпрограма автоматично избира дължината на операнди, допълването им с нули, колкото е необходимо за постигане на оптимална ефективност (изпълнение FFT е силно зависима от дължината на разлагането операнд в основните фактори). По този начин, потребителите ALGLIB не е нужно да се притеснявате за оптималната дължина на операндите.

Ръчно въвеждане

Подкрепете проекта - споделете линка, благодаря!