Trigonometristen funktioiden laskeminen Pythonissa (sin, cos, tan, arcsin, arccos, arctan).

liiketoiminta

Pythonin matemaattisten funktioiden standardimoduulin math avulla voit laskea trigonometrisia funktioita (sin, cos, tan) ja käänteisiä trigonometrisia funktioita (arcsin, arccos, arctan).

Seuraavat sisällöt selitetään tässä esimerkkikoodien avulla.

  • Pi (3.1415926..):math.pi
  • Kulman muuntaminen (radiaaneja, asteita):math.degrees(),math.radians()
  • Sinus, käänteissinus:math.sin(),math.asin()
  • kosini, käänteiskosini:math.cos(),math.acos()
  • Tangentti, käänteinen tangentti:math.tan(),math.atan(),math.atan2()
  • Seuraavat erot:math.atan(),math.atan2()

Pi (3.1415926..): math.pi

Pi annetaan vakiona matematiikkamoduulissa. Se ilmaistaan seuraavasti.
math.pi

import math

print(math.pi)
# 3.141592653589793

Kulman muuntaminen (radiaaneja, asteita): math.degrees(), math.radians()

Matematiikkamoduulin trigonometriset ja käänteiset trigonometriset funktiot käyttävät kulman yksikkönä radiaania.

Käytä math.degrees() ja math.radians() -toimintoja radiaanien (kaariaste-menetelmä) ja asteiden (aste-menetelmä) väliseen muuntamiseen.

Math.degrees() muuntaa radiaaneista asteiksi ja math.radians() muuntaa asteista radiaaneiksi.

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

print(math.radians(180))
# 3.141592653589793

Sinus, käänteissinus: math.sin(), math.asin()

Funktio sinin (sin) löytämiseksi on math.sin() ja funktio käänteissinin (arcsin) löytämiseksi on math.asin().

Tässä on esimerkki 30 asteen sinin määrittämisestä käyttämällä math.radians()-ohjelmaa asteiden muuntamiseen radiaaneiksi.

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

30 asteen sini on 0,5, mutta tässä on virhe, koska irrationaalista lukua pi ei voida laskea tarkasti.

Jos haluat pyöristää sopivaan numeromäärään, käytä round()-funktiota tai format()-menetelmää tai format()-funktiota.

Huomaa, että round():n paluuarvo on luku (int tai float), mutta format():n paluuarvo on merkkijono. Jos haluat käyttää sitä myöhempiin laskutoimituksiin, käytä round()-ohjelmaa.

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()-funktio määrittää desimaalien määrän toisena argumenttinaan. Huomaa, että kyseessä ei ole varsinainen pyöristys. Katso lisätietoja seuraavasta artikkelista.

Format()-menetelmä ja format()-funktio määrittävät desimaalien määrän muotoilumäärittelymerkkijonossa. Katso lisätietoja seuraavasta artikkelista.

Jos haluat vertailla, voit myös käyttää math.isclose() -toimintoa.

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

Vastaavasti tässä on esimerkki 0,5:n käänteissinuksen löytämisestä. math.asin() palauttaa radiaaneja, jotka muunnetaan asteiksi math.degrees():lla.

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

print(round(asin05, 3))
# 30.0

kosini, käänteiskosini: math.cos(), math.acos()

Funktio kosinin (cos) löytämiseksi on math.cos(), ja funktio käänteiskosinin (arc cosin, arccos) löytämiseksi on math.acos().

Tässä on esimerkki 60 asteen kosinin ja 0,5:n käänteiskosinin määrittämisestä.

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

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

Jos haluat pyöristää sopivaan numeroon, voit käyttää round()- tai format()-toimintoa kuten sinin kanssa.

Tangentti, käänteinen tangentti: math.tan(), math.atan(), math.atan2()

Funktio tangentin (tan) löytämiseksi on math.tan(), ja funktio käänteistangentin (arctan) löytämiseksi on math.atan() tai math.atan2().
Math.atan2() kuvataan myöhemmin.

Alla on esimerkki 45 asteen tangentin ja 1 asteen käänteistangentin löytämisestä.

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

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

Erot math.atan() ja math.atan2() välillä

Sekä math.atan() että math.atan2() ovat funktioita, jotka palauttavat käänteisen tangentin, mutta ne eroavat toisistaan argumenttien lukumäärän ja palautusarvojen alueen suhteen.

math.atan(x):llä on yksi argumentti ja se palauttaa arctan(x):n radiaaneina. Paluuarvo on välillä -pi \ 2 ja pi \ 2 (-90-90 astetta).

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

Yllä olevassa esimerkissä math.inf edustaa ääretöntä.

math.atan2(y, x):llä on kaksi argumenttia ja se palauttaa arctan(y \ x) radiaaneina. Tämä kulma on kulma (deklinaatio), jonka origosta koordinaatteihin (x, y) kulkeva vektori muodostaa polaarikoordinaattitason x-akselin positiivisen suunnan kanssa, ja palautettu arvo on välillä -pi ja pi (-180-180 astetta).

Koska myös toisen ja kolmannen kvadrantin kulmat saadaan oikein, math.atan2() on sopivampi kuin math.atan(), kun tarkastellaan polaarista koordinaattitasoa.

Huomaa, että argumenttien järjestys on y, x, ei 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

Kuten edellä olevassa esimerkissä, x-akselin negatiivinen suunta (y on nolla ja x on negatiivinen) on pi (180 astetta), mutta kun y on negatiivinen nolla, se on -pi (-180 astetta). Ole varovainen, jos haluat käsitellä merkkiä tiukasti.

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

Negatiiviset nollat ovat seuraavien operaatioiden tulos

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

print(-1.0 * 0.0)
# -0.0

Kokonaislukuja ei käsitellä negatiivisina nollina.

print(-0.0)
# -0.0

print(-0)
# 0

Vaikka sekä x että y olisivat nolla, tulos riippuu merkistä.

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

On muitakin esimerkkejä, joissa tuloksen merkki muuttuu negatiivisten nollien mukaan, kuten math.atan2() sekä math.sin(), math.asin(), math.tan() ja 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

Huomaa, että tähänastiset esimerkit ovat tuloksia ohjelman suorittamisesta CPythonissa. Huomaa, että muut toteutukset tai ympäristöt saattavat käsitellä negatiivisia nollia eri tavalla.