Tabele trigonometrice

Tabelele trigonometrice sunt tabele matematice care conțin valori calculate ale funcțiilor trigonometrice. Înainte de existența calculatoarelor de buzunar, aceste tabele erau esențiale pentru navigație, știință și inginerie. Calculul acestor tabele a fost un domeniu important de studiu, care a condus la dezvoltarea primelor dispozitive de calcul mecanice.

Calculatoarele moderne și cele de buzunar generează acum valori ale funcțiilor trigonometrice la cerere, folosind biblioteci speciale de cod matematic. Adesea, aceste biblioteci folosesc intern tabele precalculate și calculează valoarea necesară folosind o metodă de interpolare⁠(d) adecvată. Interpolarea tabelelor simple de căutare a funcțiilor trigonometrice este încă folosită în grafica pe calculator, unde poate fi necesară doar o precizie modestă, însă viteza este adesea primordială.

O altă aplicație importantă a tabelelor trigonometrice și a metodelor de generare a lor este la algoritmul pentru calculul transformatei Fourier rapide⁠(d) (FFT), în care aceleași valori ale funcției trigonometrice (numite „factori Twiddle”[1]) trebuie evaluate de mai multe ori la o transformare dată, în special în cazul uzual în care sunt calculate multe transformări de aceeași dimensiune. În acest caz, apelarea de fiecare dată a rutinelor bibliotecii generice este inacceptabil de lentă. O opțiune este ca rutinele bibliotecii să fie apelate o singură dată, pentru a construi un tabel cu acele valori trigonometrice care vor fi necesare, dar această metodă necesită o memorie semnificativă pentru a stoca tabelul. Cealaltă posibilitate, deoarece este necesară o succesiune obișnuită de valori, este de a folosi o formulă de recurență pentru a calcula valorile trigonometrice din mers. Au fost făcute cercetări importante pentru a găsi relații de recurență precise și stabile pentru a păstra acuratețea FFT (care este foarte sensibilă la erorile trigonometrice).[2]

Calculul la cerere

[modificare | modificare sursă]
O pagină de tabele matematice din 1619

Calculatoarele moderne folosesc tehnici variate pentru a furniza la cerere valori ale funcțiilor trigonometrice pentru unghiuri arbitrare.[3] O metodă comună, în special pe procesoarele de ultimă generație care lucrează în virgulă mobilă, este combinarea unui polinom sau a unei funcții raționale de aproximare (cum ar fi funcția Cebîșev, cea mai bună aproximare uniformă, aproximarea Padé și, de obicei, pentru precizii mai mari sau variabile, serii Taylor și Laurent⁠(d)) cu reducerea intervalului și o căutare în tabel — se caută mai întâi unghiul cel mai apropiat într-un tabel mic și apoi se folosește polinomul pentru a calcula corecția.[4] Menținerea preciziei în timpul efectuării unei astfel de interpolări este netrivială. În același scop sunt folosite și alte metode, precum tabelele precise ale lui Gal⁠(d)[5] și algoritmii de reducere a intervalului Cody și Waite sau a radianilor Payne și Hanek.[6] Pe dispozitivele mai simple, cărora le lipsește o unitate hardware de înmulțire, există un algoritm numit CORDIC⁠(d) (precum și tehnicile aferente) care este eficient, deoarece folosește doar deplasări și adunări. De obicei, din motive de performanță, astfel de metode sunt implementate în hardware.

Polinomul particular utilizat pentru aproximarea unei funcții trigonometrice este generat din timp folosind un algoritm de aproximare minimmax.

Pentru calculele cu precizie foarte mare, când convergența dezvoltării în serie devine prea lentă, funcțiile trigonometrice pot fi aproximate prin media aritmetico-geometrică⁠(d), care ea însăși aproximează funcția trigonometrică printr-o integrală eliptică (complexă).[7]

Funcțiile trigonometrice ale unghiurilor care sunt multipli raționali ai sunt numere algebrice. Valorile pentru a/b·2π pot fi găsite cu formula lui Moivre de la n = a până la a b-a rădăcină a unității, care este și o rădăcină a polinomului xb − 1 în planul complex. De exemplu, cosinusul și sinusul lui 2π ⋅ 5/37 sunt partea reală, respectiv partea imaginară ale puterii a 5-a a celei de a 37-a rădăcini a unității, , care este o rădăcină a polinomului de gradul 37 În acest caz, un algoritm de găsire a rădăcinilor, cum ar fi metoda tangentei, este mult mai simplu decât algoritmii de medie aritmetico-geometrică de mai sus, în timp ce convergența asimptotică este similară. Aceștia din urmă algoritmi sunt totuși necesari pentru constantele trigonometrice transcendente.

Generarea folosind formulele pentru suma și jumătatea unghiurilor

[modificare | modificare sursă]

Istoric, cea mai veche metodă prin care au fost calculate tabelele trigonometrice, și probabil cea mai comună până la apariția computerelor, a fost aplicarea în mod repetat a identităților trigonometrice pentru adunarea sau înjumătățirea unghiurilor pornind de la o valoare cunoscută (cum ar fi , ). Această metodă a fost folosită de astronomul antic Ptolemeu, care le-a prezentat în tratatul de astronomie Almagest.[8] În forma modernă, identitățile pe care le-a obținut sunt enunțate după cum urmează (cu semnele determinate de cadranul în care se află x):

Acestea au fost folosite pentru a construi tabelul de coarde al lui Ptolemeu⁠(d), care a fost utilizat în astronomie.

Sunt posibile diverse alte variante ale acestor identități: de exemplu la unele tabele trigonometrice vechi nu s-a folosit sinus și cosinus, ci sinus și versinus.

O aproximare rapidă, dar imprecisă

[modificare | modificare sursă]

Un algoritm pentru calculul unui tabel aproximativ cu N valori sn pentru sin(2πn/N) și cn pentru cos(2πn/N) este:

pentru unde d = 2π/N.

Aceasta este chiar metoda Euler pentru integrarea ecuațiilor diferențiale:

cu condițiile inițiale s(0) = 0 și c(0) = 1, ale căror soluții analitice sunt s = sin(t) și c = cos(t).

Din păcate, acesta nu este un algoritm util pentru generarea tabelelor de sinusuri deoarece are o eroare semnificativă, proporțională cu 1/N. De exemplu, pentru N = 256 eroarea maximă în valorile sinusului este de ≈0,061 (s202 = −1,0368 în loc de −0,9757). Pentru N = 1024, eroarea maximă în valorile sinusului este de ≈0,015 (s803 = −0,99321 în loc de −0,97832), eroare de aproximativ 4 ori mai mică. Dacă valorile sinus și cosinus obținute ar fi reprezentate grafic, acest algoritm ar desena o spirală logaritmică⁠(d) în loc de un cerc.

  1. ^ en Manfred Tasche, Hansmartin Zeuner (2002) "Improved roundoff error analysis for precomputed twiddle factors", Journal for Computational Analysis and Applications 4(1): 1–18
  2. ^ en James C. Schatzman (1996) "Accuracy of the discrete Fourier transform and the fast Fourier transform", SIAM Journal on Scientific Computing 17(5): 1150–1166
  3. ^ en Vitit Kantabutra (1996) "On hardware for computing exponential and trigonometric functions," IEEE Transactions on Computers 45(3): 328–339
  4. ^ en William J. Cody Jr., William Waite, Software Manual for the Elementary Functions, Prentice-Hall, 1980, ISBN: 0-13-822064-6
  5. ^ en Gal, Shmuel; Bachelis, Boris (1991) "An accurate elementary mathematical library for the IEEE floating point standard", ACM Transactions on Mathematical Software
  6. ^ en Mary H. Payne, Robert N. Hanek, Radian reduction for trigonometric functions, ACM SIGNUM Newsletter 18: 19-24, 1983
  7. ^ en Richard Peirce Brent (1976) "Fast Multiple-Precision Evaluation of Elementary Functions", Journal of the Association for Computing Machinery 23: 242–251.
  8. ^ en Carl B. Boyer (1991) A History of Mathematics, 2nd edition, John Wiley & Sons

Legături externe

[modificare | modificare sursă]