Topik ini membahas laju perubahan fungsi, mulai dari laju rata-rata pada suatu interval sampai laju sesaat di satu titik tunggal. Konsep garis potong dan garis singgung diperkenalkan melalui gambar terlebih dahulu, kemudian rumusnya dituliskan dan dihitung menggunakan NumPy. Setelah membaca, kemiringan kurva di titik mana pun dapat dihitung, diperiksa ulang secara numerik, dan dibaca ulang dari grafiknya.
Laju perubahan rata-rata#
Laju perubahan rata-rata (average rate of change) mengukur seberapa besar keluaran fungsi berubah untuk setiap satu satuan perubahan masukannya pada suatu interval. Cara menghitungnya sama dengan menghitung kemiringan garis yang melalui dua titik pada grafik fungsi, yaitu selisih keluaran dibagi selisih masukan,
Notasi dibaca sebagai perubahan , sedangkan dibaca sebagai perubahan . Sebagai contoh konkret, pembacaan sensor suhu ruangan dicatat setiap lima menit, dan pertanyaannya adalah seberapa cepat suhu berubah pada setiap interval tersebut. Deret catatan itu diolah dengan NumPy sebagai berikut.
import numpy as np
# catatan sensor suhu ruangan setiap lima menit
waktu = np.array([0.0, 5.0, 10.0, 15.0, 20.0]) # menit
suhu = np.array([24.0, 25.5, 27.0, 28.0, 28.5]) # derajat Celsius
# laju perubahan rata-rata pada tiap interval
laju = np.diff(suhu) / np.diff(waktu)
for i in range(len(laju)):
print(f"menit {waktu[i]:4.0f} ke {waktu[i + 1]:4.0f} : {laju[i]:+.3f} derajat per menit")menit 0 ke 5 : +0.300 derajat per menit
menit 5 ke 10 : +0.300 derajat per menit
menit 10 ke 15 : +0.200 derajat per menit
menit 15 ke 20 : +0.100 derajat per menitKeluarannya memperlihatkan pemanasan yang melambat, yaitu laju derajat per menit pada dua interval pertama, kemudian , dan terakhir . Suhu masih naik sepanjang catatan, tetapi kenaikannya semakin landai mendekati suhu ruangan yang stabil. Angka per interval inilah bahan mentah untuk pertanyaan berikutnya, yaitu laju perubahan pada satu titik waktu tertentu, misalnya tepat pada menit kesepuluh.
Dari garis potong ke garis singgung#
Garis potong (secant) adalah garis lurus yang melalui dua titik pada suatu kurva, sedangkan garis singgung (tangent) adalah garis yang menyentuh kurva di satu titik dan searah dengan kurva pada titik itu. Kedua titik pada garis potong dinyatakan sebagai dan , sehingga kemiringannya mengikuti rumus
Apabila diperkecil terus, titik kedua bergeser mendekati titik pertama dan garis potong berputar menuju posisi tertentu. Nilai kemiringan yang didekati garis potong disebut limit, dan hasilnya diberi nama kemiringan garis singgung,
Perhitungan pada fungsi di titik memperlihatkan proses pendekatannya. Rumus kemiringan garis potong dihitung berulang untuk nilai yang semakin kecil.
import numpy as np
def f(x):
return x**2
a = 1.0
for h in (1.0, 0.5, 0.1, 0.01, 0.0001):
kemiringan = (f(a + h) - f(a)) / h
print(f"h = {h:8.4f} : kemiringan garis potong = {kemiringan:.6f}")h = 1.0000 : kemiringan garis potong = 3.000000
h = 0.5000 : kemiringan garis potong = 2.500000
h = 0.1000 : kemiringan garis potong = 2.100000
h = 0.0100 : kemiringan garis potong = 2.010000
h = 0.0001 : kemiringan garis potong = 2.000100Kelima baris keluaran menuju nilai , dan polanya dapat ditebak dari aljabar sederhana, yaitu yang setelah dibagi menjadi . Semakin kecil , suku tambahan semakin tidak berpengaruh, sehingga kemiringan garis singgung kurva di adalah . Prosedur yang sama berlaku untuk fungsi mana pun yang kurvanya mulus di sekitar titik yang dimaksud.
Grafik berikut menggambarkan kedua garis pada satu bidang. Skripnya disimpan sebagai berkas utuh agar dapat dijalankan ulang dan disunting.
import numpy as np
import matplotlib.pyplot as plt
def f(x):
return x**2
a = 1.0
h = 1.5
x = np.linspace(-0.5, 2.6, 200)
fig, ax = plt.subplots(figsize=(6, 3.5))
ax.plot(x, f(x), color="#1a5fb4", label="f(x) = x^2")
xp = np.array([a, a + h])
ax.plot(xp, f(xp), color="#e66100", linestyle="--", label="garis potong (h = 1.5)")
xt = np.linspace(-0.2, 2.2, 50)
ax.plot(xt, f(a) + 2.0 * a * (xt - a), color="#c01c28", label="garis singgung (m = 2)")
ax.scatter([a], [f(a)], color="#c01c28", zorder=3)
ax.axhline(0.0, color="#000000", linewidth=0.8)
ax.set_xlabel("x")
ax.set_ylabel("f(x)")
ax.set_title("Garis potong menuju garis singgung ketika h mengecil")
ax.legend(loc="upper left")
fig.savefig("garis-singgung.svg")Pada gambar itu, garis potong melalui dan masih menyimpang dari kurva di antara keduanya, sedangkan garis singgung hanya menyentuh kurva di sekitar satu titik. Apabila pada skrip diperkecil, kedua garis bertumpuk hingga sulit dibedakan. Kemiringan kedua garis pada gambar dapat dihitung langsung, yaitu untuk garis potong yang melalui dan , serta untuk garis singgungnya.
Demo interaktif: memperkecil h#
Demo berikut mengulang percobaan pada tabel di atas pada kanvas yang dapat diatur. Geser penggeser dari nilai turun mendekati , kemudian amati garis potong oranye yang terus berputar. Garis singgung merah putus-putus digambar sebagai pembanding tetap dengan kemiringan , sedangkan baris bacaan di atas kanvas menampilkan kemiringan garis potong yang dihitung langsung dari rumusnya.
Ketika sudah kurang dari sekitar , garis potong tampak menempel pada garis singgung meskipun keduanya belum benar-benar sama. Bacaan kemiringannya pun turun dari menuju dan seterusnya. Perilaku inilah yang dirangkum oleh tanda limit pada rumus, yaitu nilai yang didekati tanpa perlu menghitung pada , karena pembagian dengan nol memang tidak terdefinisi.
Di mana hal ini ditemui dalam kode#
Pengolahan data sensor adalah penerapan paling langsung dari laju perubahan. Deret pembacaan suhu, tegangan, atau posisi yang tersimpan dalam array diubah menjadi laju menggunakan np.diff atau np.gradient, dan kedua fungsi tersebut menghitung kemiringan antara pembacaan berturutan persis seperti rumus pada topik ini. Hasilnya digunakan untuk menghitung kecepatan dari deret posisi, mendeteksi lonjakan pembacaan, atau memberi amaran ketika laju perubahan melewati ambang tertentu.
Perbedaan antara laju rata-rata dan laju sesaat juga menjelaskan pilihan ukuran interval pada kode nyata. Interval yang lebar menghasilkan laju yang halus tetapi lambat mendeteksi perubahan, sedangkan interval yang sempit responsif namun mudah terganggu oleh derau pembacaan. Pertukaran (trade-off) yang sama muncul pada pemrosesan video dengan frame differencing dan pada estimasi kecepatan dari pembacaan GPS, sehingga konsep garis potong ini menjadi bekal yang langsung terpakai.
Pustaka pengolahan sinyal membungkus perhitungan yang sama menjadi fungsi siap pakai. Fungsi np.gradient mengembalikan array laju perubahan yang panjangnya sama dengan masukannya, sehingga deret posisi dapat diubah menjadi deret kecepatan tanpa perulangan yang ditulis manual. Pemahaman rumus di balik fungsi tersebut juga memudahkan pembacaan pesan error ketika data mengandung nilai kosong atau jarak antara sampel yang tidak seragam.
Ringkasan#
- Laju perubahan rata-rata pada suatu interval dihitung sebagai selisih keluaran dibagi selisih masukan, sama dengan kemiringan garis melalui dua titik grafik.
- Garis potong melalui dua titik kurva berputar menjadi garis singgung apabila jarak antara kedua titiknya diperkecil menuju nol.
- Kemiringan garis singgung dinyatakan sebagai , dan nilainya didekati secara numerik dengan memilih yang kecil.
Referensi#
- Calculus Volume 1, 3.1 Defining the Derivative — OpenStax — Definisi turunan melalui laju perubahan dan garis singgung beserta contoh perhitungannya.
- numpy.diff — NumPy — Dokumentasi fungsi selisih berturutan yang digunakan untuk menghitung laju perubahan antara pembacaan.