جدول‌های مثلثات

در ریاضیات، جدول‌های تابع‌های مثلثاتی کاربردهای گوناگونی دارند. پیش از وجود ماشین‌حساب جیبی، جدول‌های مثلثاتی برای ناوبری، علوم و مهندسی ضروری بودند. محاسبهٔ جدول‌های ریاضی، موضوع مهمی برای مطالعه بود که منجر به توسعهٔ نخستین دستگاه‌های محاسب مکانیکی شد.

رایانه‌ها و ماشین‌حساب‌های کنونی، با به کار گرفتن کتابخانه‌های خاص شامل کدهای ریاضی، مقدار توابع مثلثاتی را در لحظه، محاسبه می‌کنند. این کتابخانه‌ها معمولاً از جدول‌های درونی از پیش محاسبه‌شده بهره می‌برند و مقدار مورد نیاز را با درونیابی می‌یابند. درونیابی با استفاده از جدول‌های سادهٔ توابع مثلثاتی هنوز در گرافیک رایانه‌ای که دقت متوسطی لازم است و سرعت محاسبه اهمیت بیشتری دارد، انجام می‌شود.

یک کاربرد دیگر جدول‌های مثلثاتی که اهمیت دارد، در زمینهٔ الگوریتم‌های تبدیل فوریهٔ سریع است. در این الگوریتم، در یک تبدیل بارها مقادیر یک تابع مثلثاتی باید محاسبه شوند. در چنین حالتی، فراخوانی چندبارهٔ کتابخانه، سرعت محاسبه را به شدت کاهش می‌دهد. به جای آن، می‌توان کتابخانه را یک‌بار فراخوانی کرد که جدول مقادیر مثلثاتی مورد نظر را ایجاد کند. این فرایند نیاز به حجم زیادی از حافظه دارد. روش دیگر، بهره گرفتن از رابطهٔ بازگشتی برای محاسبهٔ مثادیر مثلثاتی است.

## روابط نصف زاویه و جمع دو زاویه

نخستین روش تهیهٔ جدول‌های مثلثاتی از نظر تاریخی و متداول‌ترین روش تا پیش از توسعهٔ رایانه‌ها، اعمال پیاپی اتحادهای نصف زاویه و جمع دو زاویه با آغاز از یک مقدار معلوم (مانند مقادیر زاویهٔ قائمه) بود. نخستین فردی که این اتحادها را در ساخت جدول مثلثاتی به کار برد، بطلمیوس بود. رابطه‌هایی که به این منظور به کار می‌روند، شامل اتحادهای زیر هستند:

:\cos\left(\frac{x}{2}\right) =  \pm \sqrt{\tfrac{1}{2}(1 + \cos x)}

:\sin\left(\frac{x}{2}\right) =  \pm \sqrt{\tfrac{1}{2}(1 - \cos x)}

:\sin(x \pm y) = \sin(x) \cos(y) \pm \cos(x) \sin(y)\,

:\cos(x \pm y) = \cos(x) \cos(y) \mp \sin(x) \sin(y)\,

## یک روش سریع و نادقیق برای تخمین
بندانگشتی|350px|اختلاف مقدار دقیق <span style="color:#00009F;">سینوس</font> با تقریب‌های آن، <span style="color:#9F0000;">تقریب اول</font> و <span style="color:#009F00;">تقریب دوم</font>.
یک الگوریتم تقریبی برای ساختن جدول‌های مثلثاتی توابع سسینوس و کسینوس، استفاده پیاپی از رابطه‌های زیر است:

:*s*0 = 0
:*c*0 = 1
:*s**n*+1 = *s**n* + *d* &times; *c**n*
:*c**n*+1 = *c**n* &minus; *d* &times; *s**n*

که در آن‌ها *n* عددی صحیح بین صفر و *N*-۱ است. *c* و *s* به ترتیب نشان دهنده کسینوس و سینوس، *N* تعداد مقدارهای محاسبه شده و *d* = ۲π/*N* هستند. این روش تقریبی، بر پایه روش اویلر برای حل معادله دیفرانسیل به صورت انتگرالی:

:ds/dt = c
:dc/dt = -s

با شرایط اولیه *s*(0) = 0 و *c*(0) = 1 انجام می‌شود.

این الگوریتم روش مناسبی برای ساختن جدول سینوس نیست. زیرا خطای قابل توجهی دارد که متناسب با  است. برای نمونه، اگر *N* برابر ۲۵۶ باشد، بیشینه خطای تخمین سینوس حدود ۰٫۰۶۱ و اگر ۱۰۲۴ باشد، بیشینه خطا حدود ۰٫۰۱۵ است.

## یک روش بازگشتی دقیق‌تر
یک رابطه بازگشتی برای تولید جدول‌های مثلثاتی بر پایه فرمول اویلر و رابطه

:e^{i(\theta + \Delta\theta)} = e^{i\theta} \times e^{i\Delta\theta}

به صورت زیر تعریف می‌شود:

:*c*0 = 1
:*s*0 = 0
:*c**n*+1 = *w**r* *c**n* - *w**i* *s**n*
:*s**n*+1 = *w**i* *c**n* + *w**r* *s**n*

که در آن‌ها *n* عددی صحیح بین صفر و *N*-۱ است. هم‌چنین  و  هستند. این دو مقدار اولیه معمولاً با استفاده از تابع‌های کتابخانه‌ای موجود، محاسبه می‌شوند. با افزایش تعداد جملات، خطا نیز افزایش می‌یابد.

برای بهبود روش بالا، اصلاحات زیر انجام می‌شود.

:*c*0 = 1
:*s*0 = 0
:*c**n*+1 = *c**n* - (α*c**n* + β*s**n*)
:*s**n*+1 = *s**n* + (β*c**n* - α*s**n*)

که در آن  و . خطای این روش، بسیار کمتر است. ولی هم‌چنان به اندازه‌ای هست که دقت روش‌های سریع مانند تبدیل فوریه سریع را در اندازه‌های بزرگ، کاهش دهد.

## جستارهای وابسته
* تحلیل عددی
* مقدارهای دقیق مثلثاتی

## منابع

* Carl B. Boyer, *A History of Mathematics*, 2nd ed. (Wiley, New York, 1991).
* Manfred Tasche and Hansmartin Zeuner, "Improved roundoff error analysis for precomputed twiddle factors," *J. Computational Analysis and Applications* **4** (1), 1&ndash;18 (2002).
* James C. Schatzman, "Accuracy of the discrete Fourier transform and the fast Fourier transform," *SIAM J. Sci. Comput.* **17** (5), 1150&ndash;1166 (1996).
* Vitit Kantabutra, "On hardware for computing exponential and trigonometric functions," *IEEE Trans. Computers* **45** (3), 328–339 (1996).
* R. P. Brent, "Fast Multiple-Precision Evaluation of Elementary Functions", *J. ACM* **23**, 242&ndash;251 (1976).
* Singleton, Richard C. (1967). On computing the fast Fourier transform. *Comm. ACM*, vol. 10, 647–654.
* Gal, Shmuel and Bachelis, Boris. An accurate elementary mathematical library for the IEEE floating point standard, ACM Transaction on Mathematical Software (1991).

رده:مثلثات
رده:محاسبات عددی
رده:ویکی‌سازی رباتیک