Konvolúció - algoritmusok könyvtára

Az f (t) és g (t) függvények diszkrét konvolúciója. amelyet a Z egész számkészletben definiáltunk. A következő műveletet nevezzük:

Egy nem periodikus f függvény körkörös diszkrét konvolúciója a periodikus g funkcióval a következő művelet:

A diszkrét konvolúciónak sok különböző alkalmazása van - polinomok sokszorozódása, tetszőleges pontosságú aritmetika, jelfeldolgozás. A körkörös konvolúció nem kommutatív - az egyik függvény egy periodikus jel, a másik egy nem periodikus válasz a jelre. A hagyományos konvolúció operandói gyakran eltérő jelentéssel bírnak, de maga a művelet kommutatív - a konvolúció eredménye nem változik az f és g függvények permutációjától.

Adatok bemutatása

Az f és g függvény definíciójának tartománya az egész számok egésze, de a gyakorlatban korlátozott hosszúságú adatokkal foglalkozunk. Legegyszerűbb, ha az f és g függvények csak a nem negatív t esetén a nullától eltérőek. Az ALGLIB-csomag számítási alprogramjai megoldják ezt a problémát - két olyan függvény konvolúciója, amelyek csak az nullára különböznek negatív értékek esetén. Ez lehetővé teszi számunkra, hogy egyszerű függvényt használjunk a függvény és a tömb indexének között, amelyben az értékeit tároljuk: f (t = i) = f_array [i], 0 ≤ i

Ha a funkciók f és g értéke O-tól eltérő, és pozitív és negatív értékek az érvelés, ez lehet használni azt a tényt, hogy az elmozdulás egyik kanyarulatok érvek eredmény is nyíró azonos irányban azonos mennyiségű (elmozdulás két érv - az egyes ellentételezések összegére). Csak mozgasson f és g-t jobbra mindaddig, amíg az összes nem nulla érték egy nullához csatlakozik, hívja a konvolúció alprogramját, majd tolja vissza az eredményt.

Az ALGLIB konvolúciójának megvalósítása

Itt, az egyszerűség kedvéért feltételezzük, hogy N ≥ M, azaz. A második operandus hosszabb, mint az első, bár az algoritmus sebessége nem függ attól a sorrendtől, amelyben az operandusokat továbbítják. Széles körben ismert, hogy a konvolúció egy gyors Fourier-transzformációval számítható ki O-ban (N · log (N)). Azonban az a lineáris Fourier-transzformáció nem mindig optimális megoldás - ha az egyik operandus rövidebb, mint a többi, nagyban felgyorsítja számításokat más algoritmusok. Az operandusok hosszától függően az ALGLIB csomag a következő algoritmusokat tudja használni:

  • Ha M kicsi - O komplexitású algoritmus (M · N)
  • Ha az M lényegesen kisebb, mint N, de túl nagy ahhoz, hogy az első algoritmust használhassa, az O (N · log (M) komplexitású átfedéses algoritmust használják).
  • Ha az előző két algoritmus nem ad nyereség sebesség - használják alapul FFT algoritmus bonyolultsága O (N · log (N)) (FFT végre operandusok komponensenként termék a frekvencia inverz FFT).

A konvolúció kiszámításához az ALGLIB tartalmazza az FFT algoritmust. Convolution szubrutin automatikusan kiválasztja a hossza az operandusok, kiegészítve azokat nullákkal szükséges az optimális teljesítmény elérése (FFT teljesítmény erősen függ a hossza az operandus bomlás törzstényezős). Így az ALGLIB felhasználóknak nem kell aggódniuk az operandusok optimális hosszától.

Kézi bejegyzések