Изчисляване на тригонометрични функции в 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