Perhitungan sinus, cosinus, dan tangensio muncul di banyak bidang: pemrosesan sinyal, simulasi gelombang, grafika komputer, hingga perhitungan arah pada data GPS. NumPy menyediakan fungsi-fungsi tersebut sebagai ufunc yang bekerja pada seluruh elemen array sekaligus, sehingga kita bisa menghitung ribuan sudut dalam satu pemanggilan tanpa loop eksplisit.
Bab ini membahas empat kelompok kemampuan:
- Fungsi dasar
np.sin,np.cos, dannp.tanbeserta aturan input radian. - Konversi satuan sudut dengan
np.deg2raddannp.rad2deg. - Fungsi invers
np.arcsin,np.arccos, dannp.arctan. - Fungsi
np.arctan2yang mampu membedakan empat kuadran.
Sin, Cos, dan Tan Bekerja dalam Radian #
Kesalahan paling sering dialami pemula: menganggap input fungsi trigonometri NumPy dalam derajat. Kenyataannya, np.sin, np.cos, dan np.tan selalu memperlakukan input sebagai radian. Untuk data derajat, konversikan lebih dulu dengan np.deg2rad; untuk arah sebaliknya gunakan np.rad2deg.
import numpy as np
sudut_derajat = np.array([0.0, 30.0, 90.0, 180.0])
sudut_radian = np.deg2rad(sudut_derajat)
print(sudut_radian)
print(np.sin(sudut_radian))
print(np.cos(sudut_radian))Output yang Dihasilkan:
[0. 0.52359878 1.57079633 3.14159265]
[0.0000000e+00 5.0000000e-01 1.0000000e+00 1.2246468e-16]
[ 1.00000000e+00 8.66025404e-01 6.12323400e-17 -1.00000000e+00]Mari kita bedah baris demi baris:
- Baris 3 (
sudut_derajat = np.array(...)): interpreter membuat array float64 berisi empat sudut dalam derajat. - Baris 4 (
np.deg2rad(...)): setiap elemen dikalikan pi/180, sehingga 90.0 menjadi 1.57079633 radian. - Baris 6 (
np.sin(...)): fungsi menghitung sinus untuk tiap elemen radian. Nilaisin(90°)muncul sebagai1.0, sedangkansin(180°)muncul sebagai1.2246468e-16— bukan nol persis. Fenomena ini dibahas pada bagian berikutnya. - Baris 7 (
np.cos(...)):cos(90°)menghasilkan6.123234e-17, nilai yang secara praktis sama dengan nol tetapi secara biner bukan nol.
Ketelitian di Nilai Istimewa: sin(pi) Bukan Nol Persis #
Nilai np.pi yang dipakai NumPy adalah representasi float64 terdekat untuk pi, dan pi sendiri adalah bilangan irasional. Akibatnya, hasil pada nilai istimewa bisa menyisakan residu sangat kecil. Kita amati langsung:
import numpy as np
print(np.sin(np.pi / 2))
print(np.sin(np.pi))
print(np.tan(np.pi))Output yang Dihasilkan:
1.0
1.2246467991473532e-16
-1.2246467991473532e-16sin(pi/2) menghasilkan 1.0 karena nilai float64 terdekat dari hasil sebenarnya memang tepat satu. Sebaliknya, sin(pi) menghasilkan 1.2246467991473532e-16, bukan 0.0: input np.pi sedikit meleset dari pi sebenarnya, dan kesalahan input tersebut terbawa ke hasil. Nilai residu 10^-16 ini berada pada batas presisi float64 dan secara praktis dapat dianggap nol.
Fungsi Invers: arcsin, arccos, dan arctan #
Fungsi invers mengembalikan sudut dari nilai rasio. np.arcsin dan np.arccos hanya menerima input pada rentang [-1, 1]; input di luar rentang tersebut menghasilkan nan. Keluarannya dalam radian, jadi kita bungkus dengan np.rad2deg agar mudah dibaca:
import numpy as np
rasio = np.array([0.0, 0.5, 1.0])
print(np.rad2deg(np.arcsin(rasio)))
print(np.rad2deg(np.arccos(rasio)))
print(np.rad2deg(np.arctan(np.array([0.0, 1.0]))))Output yang Dihasilkan:
[ 0. 30. 90.]
[90. 60. 0.]
[ 0. 45.]Perhatikan bahwa arcsin(0.5) menghasilkan 30 derajat, sesuai rasio sin(30°) = 0.5. Fungsi np.arctan satu argumen hanya mengembalikan sudut pada rentang -90 hingga 90 derajat karena tanda y dan x dari rasio asalnya tidak diketahui.
arctan2 untuk Empat Kuadran #
Untuk memulihkan sudut penuh dari pasangan koordinat, gunakan np.arctan2(y, x). Fungsi ini membaca tanda kedua argumen sehingga hasilnya mencakup seluruh empat kuadran pada rentang (-180, 180] derajat:
import numpy as np
titik_y = np.array([1.0, 1.0, -1.0, -1.0])
titik_x = np.array([1.0, -1.0, 1.0, -1.0])
print(np.rad2deg(np.arctan2(titik_y, titik_x)))Output yang Dihasilkan:
[ 45. 135. -45. -135.]Tabel berikut merangkum hasilnya per kuadran:
| Titik (y, x) | Kuadran | arctan2 (derajat) |
|---|---|---|
| (1, 1) | I | 45.0 |
| (1, -1) | II | 135.0 |
| (-1, 1) | IV | -45.0 |
| (-1, -1) | III | -135.0 |
Dengan np.arctan2, dua titik yang rasionya sama (1/1 dan -1/-1) tidak lagi menghasilkan sudut yang sama. Inilah alasan fungsi ini menjadi pilihan standar untuk menghitung arah vektor pada navigasi dan grafika.