Υπολογισμός τριγωνομετρικών συναρτήσεων στην Python (sin, cos, tan, arcsin, arccos, arctan)

Επιχείρηση

Χρησιμοποιώντας το math, την τυπική ενότητα της Python για μαθηματικές συναρτήσεις, μπορείτε να υπολογίσετε τριγωνομετρικές συναρτήσεις (sin, cos, tan) και αντίστροφες τριγωνομετρικές συναρτήσεις (arcsin, arccos, arctan).

Τα ακόλουθα περιεχόμενα εξηγούνται εδώ με παραδείγματα κωδικών.

  • Pi (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()

Pi (3.1415926..): math.pi

Το 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() και η συνάρτηση για την εύρεση του αντίστροφου συνημιτόνου (arc cosine, 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. Σημειώστε ότι άλλες υλοποιήσεις ή περιβάλλοντα μπορεί να χειρίζονται διαφορετικά τα αρνητικά μηδενικά.