Calcular funcións trigonométricas en Python (sin, cos, tan, arcsin, arccos, arctan)

Negocios

Usando math, o módulo estándar de Python para funcións matemáticas, pode calcular funcións trigonométricas (sin, cos, tan) e funcións trigonométricas inversas (arcsin, arccos, arctan).

Os seguintes contidos explícanse aquí con códigos de exemplo.

  • Pi (3.1415926..):math.pi
  • Conversión de ángulos (radiáns, graos):math.degrees(),math.radians()
  • Seno, seno inverso:math.sin(),math.asin()
  • coseno, coseno inverso:math.cos(),math.acos()
  • Tanxente, tanxente inversa:math.tan(),math.atan(),math.atan2()
  • Diferenzas a continuación:math.atan(),math.atan2()

Pi (3.1415926..):math.pi

Pi proporcionase como unha constante no módulo de matemáticas. Exprésase do seguinte xeito.
math.pi

import math

print(math.pi)
# 3.141592653589793

Conversión de ángulos (radiáns, graos):math.degrees(),math.radians()

As funcións trigonométricas e trigonométricas inversas do módulo de matemáticas usan o radián como unidade de ángulo.

Use math.degrees() e math.radians() para converter entre radiáns (método de graos de arco) e graos (método de graos).

Math.degrees() converte de radiáns a graos, e math.radians() converte de graos a radiáns.

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

print(math.radians(180))
# 3.141592653589793

Seno, seno inverso:math.sin(),math.asin()

A función para atopar o seno (sin) é math.sin() e a función para atopar o seno inverso (arcsin) é math.asin().

Aquí tes un exemplo de atopar o seno de 30 graos, usando math.radians() para converter graos en radiáns.

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

O seno de 30 graos é 0,5, pero hai un erro porque pi, un número irracional, non se pode calcular con precisión.

Se desexa redondear ao número apropiado de díxitos, use a función round() ou o método format() ou a función format().

Teña en conta que o valor de retorno de round() é un número (int ou float), pero o valor de retorno de format() é unha cadea. Se quere usalo para cálculos posteriores, use 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'>

A función round() especifica o número de cifras decimais como segundo argumento. Teña en conta que isto non é estrictamente redondeado. Consulte o seguinte artigo para obter máis detalles.

O método format() e a función format() especifican o número de decimais na cadea de especificación de formato. Consulte o seguinte artigo para obter máis detalles.

Se queres comparar, tamén podes usar math.isclose().

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

Do mesmo xeito, aquí tes un exemplo de atopar o seno inverso de 0,5. math.asin() devolve radians, que se converten en graos con math.degrees().

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

print(round(asin05, 3))
# 30.0

coseno, coseno inverso:math.cos(),math.acos()

A función para atopar o coseno (cos) é math.cos(), e a función para atopar o coseno inverso (arco coseno, arccos) é math.acos().

Aquí tes un exemplo de atopar o coseno de 60 graos e o coseno inverso de 0,5.

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

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

Se queres redondear ao díxito apropiado, podes usar round() ou format() como co seno.

Tanxente, tanxente inversa:math.tan(),math.atan(),math.atan2()

A función para atopar a tanxente (tan) é math.tan(), e a función para atopar a tanxente inversa (arctan) é math.atan() ou math.atan2().
Math.atan2() descríbese máis adiante.

A continuación móstrase un exemplo de atopar a tanxente de 45 graos e a tanxente inversa de 1 grao.

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

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

Diferenza entre math.atan() e math.atan2()

Tanto math.atan() como math.atan2() son funcións que devolven a tanxente inversa, pero difiren no número de argumentos e no intervalo de valores de retorno.

math.atan(x) ten un argumento e devolve arctan(x) en radiáns. O valor de retorno estará entre -pi \ 2 e pi \ 2 (-90 a 90 graos).

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

No exemplo anterior, math.inf representa o infinito.

math.atan2(y, x) ten dous argumentos e devolve arctan(y \ x) en radiáns. Este ángulo é o ángulo (declinación) que forma o vector desde a orixe ata as coordenadas (x, y) coa dirección positiva do eixe x no plano de coordenadas polares, e o valor devolto está entre -pi e pi (-180). ata 180 graos).

Dado que os ángulos do segundo e terceiro cuadrantes tamén se poden obter correctamente, math.atan2() é máis apropiado que math.atan() cando se considera o plano de coordenadas polares.

Teña en conta que a orde dos argumentos é y, x, non 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

Como no exemplo anterior, a dirección negativa do eixe x (y é cero e x negativo) é pi (180 graos), pero cando y é cero negativo, é -pi (-180 graos). Teña coidado se queres manexar o sinal con rigor.

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

Os ceros negativos son o resultado das seguintes operacións

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

print(-1.0 * 0.0)
# -0.0

Os enteiros non se tratan como ceros negativos.

print(-0.0)
# -0.0

print(-0)
# 0

Mesmo cando x e y sexan cero, o resultado depende do signo.

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

Hai outros exemplos nos que o signo do resultado cambia dependendo de ceros negativos, como math.atan2() así como math.sin(), math.asin(), math.tan() e 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

Teña en conta que os exemplos ata agora son os resultados da execución do programa en CPython. Teña en conta que outras implementacións ou ambientes poden tratar os ceros negativos de forma diferente.

Copied title and URL