محاسبه توابع مثلثاتی در پایتون (sin, cos, tan, arcsin, arccos, arctan)

کسب و کار

با استفاده از ریاضی، ماژول استاندارد پایتون برای توابع ریاضی، می توانید توابع مثلثاتی (sin، cos، tan) و توابع مثلثاتی معکوس (arcsin، arccos، arctan) را محاسبه کنید.

مطالب زیر در اینجا با کدهای نمونه توضیح داده شده است.

  • Pi (3.1415926..):math.pi
  • تبدیل زاویه (رادیان، درجه):math.degrees(),math.radians()
  • سینوس، سینوس معکوس:math.sin(),math.asin()
  • کسینوس، کسینوس معکوس:math.cos(),math.acos()
  • مماس، مماس معکوس:math.tan(),math.atan(),math.atan2()
  • تفاوت های زیر:math.atan(),math.atan2()

Pi (3.1415926..):math.pi

Pi به عنوان یک ثابت در ماژول ریاضی ارائه شده است. به صورت زیر بیان می شود.
math.pi

import math

print(math.pi)
# 3.141592653589793

تبدیل زاویه (رادیان، درجه):math.degrees(),math.radians()

توابع مثلثاتی و مثلثاتی معکوس در ماژول ریاضی از رادیان به عنوان واحد زاویه استفاده می کنند.

از math.degrees() و math.radians() برای تبدیل بین رادیان (روش درجه قوس) و درجه (روش درجه) استفاده کنید.

Math.degrees() از رادیان به درجه تبدیل می شود و math.radians() از درجه به رادیان تبدیل می کند.

print(math.degrees(math.pi))
# 180.0

print(math.radians(180))
# 3.141592653589793

سینوس، سینوس معکوس:math.sin(),math.asin()

تابع یافتن سینوس (sin) math.sin() و تابع یافتن سینوس معکوس (arcsin) math.asin() است.

در اینجا مثالی از یافتن سینوس 30 درجه با استفاده از math.radians() برای تبدیل درجه به رادیان آورده شده است.

sin30 = math.sin(math.radians(30))
print(sin30)
# 0.49999999999999994

سینوس 30 درجه 0.5 است، اما یک خطا وجود دارد زیرا عدد پی، یک عدد غیرمنطقی، نمی تواند به طور دقیق محاسبه شود.

اگر می‌خواهید به تعداد مناسبی از ارقام گرد کنید، از تابع round () یا متد format() یا تابع format() استفاده کنید.

توجه داشته باشید که مقدار برگشتی round() یک عدد (int یا float) است، اما مقدار بازگشتی format() یک رشته است. اگر می خواهید از آن برای محاسبات بعدی استفاده کنید، از round() استفاده کنید.

print(round(sin30, 3))
print(type(round(sin30, 3)))
# 0.5
# <class 'float'>

print('{:.3}'.format(sin30))
print(type('{:.3}'.format(sin30)))
# 0.5
# <class 'str'>

print(format(sin30, '.3'))
print(type(format(sin30, '.3')))
# 0.5
# <class 'str'>

تابع round() تعداد ارقام اعشار را به عنوان آرگومان دوم خود مشخص می کند. توجه داشته باشید که این کاملاً گرد کردن نیست. برای جزئیات بیشتر به مقاله زیر مراجعه کنید.

متد format() و تابع format() تعداد ارقام اعشاری را در رشته مشخصات قالب بندی مشخص می کند. برای جزئیات بیشتر به مقاله زیر مراجعه کنید.

اگر می خواهید مقایسه کنید، می توانید از () math.isclose نیز استفاده کنید.

print(math.isclose(sin30, 0.5))
# True

به طور مشابه، در اینجا مثالی از یافتن سینوس معکوس 0.5 آورده شده است. math.asin() رادیان ها را برمی گرداند که با math.degrees() به درجه تبدیل می شوند.

asin05 = math.degrees(math.asin(0.5))
print(asin05)
# 29.999999999999996

print(round(asin05, 3))
# 30.0

کسینوس، کسینوس معکوس:math.cos(),math.acos()

تابع برای یافتن کسینوس (cos) math.cos () و تابع پیدا کردن کسینوس معکوس (آرک کسینوس، arccos) math.acos ().

در اینجا مثالی از یافتن کسینوس 60 درجه و کسینوس معکوس 0.5 آورده شده است.

print(math.cos(math.radians(60)))
# 0.5000000000000001

print(math.degrees(math.acos(0.5)))
# 59.99999999999999

اگر می خواهید به رقم مناسب گرد کنید، می توانید از round() یا format() مانند سینوس استفاده کنید.

مماس، مماس معکوس:math.tan(),math.atan(),math.atan2()

تابع پیدا کردن مماس (tan) math.tan() و تابع پیدا کردن مماس معکوس (arctan) math.atan() یا math.atan2() است.
Math.atan2() بعدا توضیح داده می شود.

نمونه ای از یافتن مماس 45 درجه و مماس معکوس 1 درجه در زیر نشان داده شده است.

print(math.tan(math.radians(45)))
# 0.9999999999999999

print(math.degrees(math.atan(1)))
# 45.0

تفاوت بین math.atan() و math.atan2()

هم math.atan() و هم math.atan2() توابعی هستند که مماس معکوس را برمی گردانند، اما در تعداد آرگومان ها و محدوده مقادیر بازگشتی متفاوت هستند.

math.atan(x) یک آرگومان دارد و arctan(x) را بر حسب رادیان برمی گرداند. مقدار بازگشتی بین -pi \ 2 و pi \ 2 (90- تا 90 درجه) خواهد بود.

print(math.degrees(math.atan(0)))
# 0.0

print(math.degrees(math.atan(1)))
# 45.0

print(math.degrees(math.atan(-1)))
# -45.0

print(math.degrees(math.atan(math.inf)))
# 90.0

print(math.degrees(math.atan(-math.inf)))
# -90.0

در مثال بالا math.inf بی نهایت را نشان می دهد.

math.atan2(y, x) دو آرگومان دارد و arctan(y \ x) را به رادیان برمی گرداند. این زاویه، زاویه ای است که بردار از مبدأ به مختصات (x, y) با جهت مثبت محور x در صفحه مختصات قطبی می سازد و مقدار برگشتی بین -pi و pi (-180) است. تا 180 درجه).

از آنجایی که زوایای ربع دوم و سوم را نیز می توان به درستی به دست آورد، هنگام در نظر گرفتن صفحه مختصات قطبی، math.atan2() مناسب تر از math.atan() است.

توجه داشته باشید که ترتیب آرگومان ها y، x است، نه x، y.

print(math.degrees(math.atan2(0, 1)))
# 0.0

print(math.degrees(math.atan2(1, 1)))
# 45.0

print(math.degrees(math.atan2(1, 0)))
# 90.0

print(math.degrees(math.atan2(1, -1)))
# 135.0

print(math.degrees(math.atan2(0, -1)))
# 180.0

print(math.degrees(math.atan2(-1, -1)))
# -135.0

print(math.degrees(math.atan2(-1, 0)))
# -90.0

print(math.degrees(math.atan2(-1, 1)))
# -45.0

همانطور که در مثال بالا، جهت منفی محور x (y صفر و x منفی است) پی (180 درجه) است، اما زمانی که y منفی صفر باشد، -pi (180- درجه) است. اگر می خواهید به شدت با علامت رفتار کنید مراقب باشید.

print(math.degrees(math.atan2(-0.0, -1)))
# -180.0

صفرهای منفی حاصل عملیات زیر است

print(-1 / math.inf)
# -0.0

print(-1.0 * 0.0)
# -0.0

اعداد صحیح به عنوان صفرهای منفی در نظر گرفته نمی شوند.

print(-0.0)
# -0.0

print(-0)
# 0

حتی زمانی که x و y هر دو صفر باشند، نتیجه به علامت بستگی دارد.

print(math.degrees(math.atan2(0.0, 0.0)))
# 0.0

print(math.degrees(math.atan2(-0.0, 0.0)))
# -0.0

print(math.degrees(math.atan2(-0.0, -0.0)))
# -180.0

print(math.degrees(math.atan2(0.0, -0.0)))
# 180.0

مثال‌های دیگری وجود دارد که علامت نتیجه بسته به صفرهای منفی تغییر می‌کند، مانند math.atan2() و همچنین math.sin()، math.asin()، math.tan() و math.atan() .

print(math.sin(0.0))
# 0.0

print(math.sin(-0.0))
# -0.0

print(math.asin(0.0))
# 0.0

print(math.asin(-0.0))
# -0.0

print(math.tan(0.0))
# 0.0

print(math.tan(-0.0))
# -0.0

print(math.atan(0.0))
# 0.0

print(math.atan(-0.0))
# -0.0

print(math.atan2(0.0, 1.0))
# 0.0

print(math.atan2(-0.0, 1.0))
# -0.0

توجه داشته باشید که مثال های ارائه شده تا کنون نتیجه اجرای برنامه در CPython است. توجه داشته باشید که سایر پیاده‌سازی‌ها یا محیط‌ها ممکن است صفرهای منفی را متفاوت مدیریت کنند.