Výpočet trigonometrických funkcí v jazyce Python (sin, cos, tan, arcsin, arccos, arctan)

Podnikání

Pomocí math, standardního modulu jazyka Python pro matematické funkce, můžete vypočítat trigonometrické funkce (sin, cos, tan) a inverzní trigonometrické funkce (arcsin, arccos, arctan).

Následující obsah je zde vysvětlen pomocí ukázkových kódů.

  • Pí (3,1415926..):math.pi
  • Převod úhlu (radiány, stupně):math.degrees(),math.radians()
  • Sinus, inverzní sinus:math.sin(),math.asin()
  • kosinus, inverzní kosinus:math.cos(),math.acos()
  • Tangens, Inverzní tangens:math.tan(),math.atan(),math.atan2()
  • Níže uvedené rozdíly:math.atan(),math.atan2()

Pí (3,1415926..): math.pi

Pí je v matematickém modulu uvedeno jako konstanta. Vyjadřuje se takto.
math.pi

import math

print(math.pi)
# 3.141592653589793

Převod úhlu (radiány, stupně): math.degrees(), math.radians()

Trigonometrické a inverzní trigonometrické funkce v matematickém modulu používají jako jednotku úhlu radián.

Pro převod mezi radiány (metoda obloukových stupňů) a stupni (metoda stupňů) použijte math.degrees() a math.radians().

Math.degrees() převádí z radiánů na stupně a math.radians() převádí ze stupňů na radiány.

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

print(math.radians(180))
# 3.141592653589793

Sinus, inverzní sinus: math.sin(), math.asin()

Funkce pro zjištění sinusu (sin) je math.sin() a funkce pro zjištění inverzního sinusu (arcsin) je math.asin().

Zde je příklad na zjištění sinusového čísla 30 stupňů pomocí funkce math.radians() pro převod stupňů na radiány.

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

Sinus 30 stupňů je 0,5, ale je zde chyba, protože pí, iracionální číslo, nelze přesně vypočítat.

Pokud chcete zaokrouhlit na příslušný počet číslic, použijte funkci round() nebo metodu format() nebo funkci format().

Všimněte si, že návratovou hodnotou funkce round() je číslo (int nebo float), ale návratovou hodnotou funkce format() je řetězec. Pokud ji chcete použít pro následné výpočty, použijte funkci 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'>

Funkce round() zadává jako druhý argument počet desetinných míst. Všimněte si, že se nejedná o striktní zaokrouhlování. Podrobnosti naleznete v následujícím článku.

Metoda format() a funkce format() určují počet desetinných míst ve formátovacím řetězci. Podrobnosti naleznete v následujícím článku.

Pokud chcete porovnávat, můžete také použít math.isclose().

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

Podobně je zde příklad nalezení inverzního sinusu 0,5. Math.asin() vrací radiány, které jsou převedeny na stupně pomocí math.degrees().

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

print(round(asin05, 3))
# 30.0

kosinus, inverzní kosinus: math.cos(), math.acos()

Funkce pro zjištění kosinu (cos) je math.cos() a funkce pro zjištění inverzního kosinu (arccos) je math.acos().

Zde je příklad nalezení kosinusu 60 stupňů a inverzního kosinusu 0,5.

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

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

Pokud si přejete zaokrouhlit na příslušnou číslici, můžete použít round() nebo format() jako v případě sinusovky.

Tangens, Inverzní tangens: math.tan(), math.atan(), math.atan2()

Funkce pro zjištění tečny (tan) je math.tan() a funkce pro zjištění inverzní tečny (arctan) je math.atan() nebo math.atan2().
Math.atan2() je popsána později.

Příklad nalezení tečny ke 45 stupňům a inverzní tečny k 1 stupni je uveden níže.

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

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

Rozdíl mezi math.atan() a math.atan2()

Jak math.atan(), tak math.atan2() jsou funkce, které vracejí inverzní tangens, ale liší se počtem argumentů a rozsahem návratových hodnot.

Math.atan(x) má jeden argument a vrací arctan(x) v radiánech. Vrácená hodnota bude mezi -pi \ 2 a pi \ 2 (-90 až 90 stupňů).

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

Ve výše uvedeném příkladu představuje math.inf nekonečno.

Math.atan2(y, x) má dva argumenty a vrací arctan(y \ x) v radiánech. Tento úhel je úhel (deklinace), který svírá vektor od počátku k souřadnicím (x, y) s kladným směrem osy x v polární rovině souřadnic, a vrácená hodnota je mezi -pi a pí (-180 až 180 stupňů).

Protože lze správně získat i úhly ve druhém a třetím kvadrantu, je při uvažování polární souřadnicové roviny vhodnější metoda math.atan2() než math.atan().

Všimněte si, že pořadí argumentů je y, x, nikoli 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

Stejně jako ve výše uvedeném příkladu je záporný směr osy x (y je nula a x je záporné) pí (180 stupňů), ale když je y záporná nula, je to -pi (-180 stupňů). Buďte opatrní, pokud chcete se znaménkem zacházet striktně.

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

Záporné nuly jsou výsledkem následujících operací

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

print(-1.0 * 0.0)
# -0.0

Celá čísla nejsou považována za záporné nuly.

print(-0.0)
# -0.0

print(-0)
# 0

I když jsou x i y nulové, výsledek závisí na znaménku.

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

Existují i další příklady, kde se znaménko výsledku mění v závislosti na záporných nulách, například math.atan2() a math.sin(), math.asin(), math.tan() a 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

Všimněte si, že dosavadní příklady jsou výsledky spuštění programu v CPythonu. Všimněte si, že jiné implementace nebo prostředí mohou záporné nuly zpracovávat odlišně.

Copied title and URL