Обчислювати тригонометричні функції в Python (sin, cos, tan, arcsin, arccos, arctan)

Бізнес

Використовуючи math, стандартний модуль Python для математичних функцій, ви можете обчислювати тригонометричні функції (sin, cos, tan) та обернені тригонометричні функції (arcsin, arccos, arctan).

Наведений нижче вміст пояснюється тут із зразками кодів.

  • Пі (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()

Пі (3,1415926..):math.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 від’ємний) дорівнює pi (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. Зауважте, що інші реалізації або середовища можуть по-різному обробляти від’ємні нулі.

Copied title and URL