Topik ini membahas transformasi grafik fungsi, yaitu pergeseran vertikal dan horizontal, peregangan, serta refleksi. Setiap aturan transformasi dijelaskan bersama alasannya, diverifikasi dengan tabel nilai menggunakan NumPy, dan divisualisasikan pada parabola . Setelah membaca, bentuk dapat dibaca sebagai rangkaian transformasi yang lengkap, dan arah setiap pergeseran dapat ditentukan tanpa menebak.
Pergeseran grafik#
Transformasi mengubah posisi atau bentuk grafik fungsi tanpa mengubah aturan intinya. Pergeseran (shift) adalah transformasi yang paling dasar. Menambahkan konstanta pada keluaran, , menggeser seluruh grafik ke atas sejauh satuan, sedangkan negatif menggesernya ke bawah. Operasi ini bekerja pada keluaran, sehingga setiap nilai fungsi bertambah sama banyak.
Menambahkan konstanta pada masukan bekerja dengan arah yang berbeda. Grafik bergeser ke kanan sejauh satuan, karena fungsi membutuhkan masukan yang lebih besar untuk menghasilkan nilai yang sama. Sebagai contoh, bernilai nol pada , bukan pada , sehingga titik terendah parabolanya ikut pindah ke kanan. Nilai negatif menghasilkan pergeseran ke kiri dengan cara yang sama.
Gambar berikut menampilkan parabola dasar bersama hasil geser kanan dua satuan dan geser atas satu satuan. Ketiganya digambar oleh contoh berikut, lalu disimpan sebagai berkas SVG. Titik terendah masing-masing kurva berpindah dari titik asal ke dan ke .
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-2.0, 4.0, 200)
fig, ax = plt.subplots(figsize=(6, 3))
ax.plot(x, x**2, color="#77767b", linestyle="--", label="f(x) = x^2")
ax.plot(x, (x - 2.0)**2, color="#1a5fb4", label="f(x - 2), geser kanan 2")
ax.plot(x, x**2 + 1.0, color="#c01c28", label="f(x) + 1, geser atas 1")
ax.axhline(0.0, color="#000000", linewidth=0.8)
ax.axvline(0.0, color="#000000", linewidth=0.8)
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_title("Pergeseran parabola ke kanan dan ke atas")
ax.legend(loc="upper left")
fig.savefig("pergeseran.svg")Peregangan dan refleksi#
Mengalikan keluaran dengan konstanta menghasilkan peregangan vertikal (vertical stretch). Nilai menarik grafik menjauhi sumbu-x sehingga kurvanya terlihat lebih sempit dan tinggi, sedangkan mendekatkannya ke sumbu-x. Refleksi (reflection) membalik grafik terhadap sumbu-x karena semua keluaran berubah tanda, sedangkan membalik terhadap sumbu-y karena semua masukan berubah tanda. Faktor juga mengubah daerah hasil, karena setiap keluaran dikalikan dengannya. Untuk yang daerah hasilnya , faktor 2 tetap menjaga daerah hasil itu, sedangkan refleksi mengubahnya menjadi .
Gambar berikut membandingkan dengan hasil peregangan faktor dua dan hasil refleksinya. Contoh berikut menggambar ketiganya, lalu menyimpannya sebagai berkas SVG. Ketiga kurva bertemu di titik asal karena titik itu tidak berpindah oleh peregangan maupun refleksi. Titik yang tidak bergerak seperti ini menjadi patokan cepat untuk memeriksa arah suatu transformasi.
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-2.5, 2.5, 200)
fig, ax = plt.subplots(figsize=(6, 3))
ax.plot(x, x**2, color="#77767b", linestyle="--", label="f(x) = x^2")
ax.plot(x, 2.0 * x**2, color="#1a5fb4", label="2 f(x), regang vertikal")
ax.plot(x, -x**2, color="#c01c28", label="-f(x), refleksi sumbu-x")
ax.axhline(0.0, color="#000000", linewidth=0.8)
ax.axvline(0.0, color="#000000", linewidth=0.8)
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_title("Peregangan vertikal dan refleksi terhadap sumbu-x")
ax.legend(loc="upper center", fontsize=8)
fig.savefig("peregangan.svg")Verifikasi dengan tabel nilai#
Cara paling meyakinkan untuk memahami transformasi adalah membandingkan tabel nilai sebelum dan sesudahnya. Berkas berikut menghitung empat versi fungsi pada masukan yang sama, sehingga efek setiap transformasi terbaca kolom demi kolom.
import numpy as np
x = np.array([-2.0, -1.0, 0.0, 1.0, 2.0])
f = x**2
print("x :", x)
print("f(x) = x^2 :", f)
print("f(x) + 1 :", f + 1.0)
print("f(x - 2) :", (x - 2.0)**2)
print("2*f(x) :", 2.0 * f)x : [-2. -1. 0. 1. 2.]
f(x) = x^2 : [4. 1. 0. 1. 4.]
f(x) + 1 : [5. 2. 1. 2. 5.]
f(x - 2) : [16. 9. 4. 1. 0.]
2*f(x) : [8. 2. 0. 2. 8.]Baris f(x - 2) memperlihatkan pola pergeseran ke kanan, karena nilai 0 pada baris dasar kini berada di kolom , bukan di kolom . Baris f(x) + 1 menambah semua keluaran dengan satu tanpa memindahkan kolomnya, yang berarti kurvanya naik seragam. Baris 2*f(x) melipatgandakan setiap keluaran, sehingga nilai 4 pada ujungnya menjadi 8 dan kurva menjauh dari sumbu-x.
Tabel berikut merangkum seluruh aturan yang sudah diverifikasi.
| Bentuk | Efek pada grafik |
|---|---|
| geser vertikal sejauh | |
| geser kanan sejauh | |
| regang vertikal dengan faktor | |
| refleksi terhadap sumbu-x | |
| refleksi terhadap sumbu-y |
Bentuk gabungan merangkum ketiga jenisnya sekaligus, yaitu parabola dengan puncak di dan lebar yang diatur oleh . Setiap huruf pada bentuk itu kini memiliki makna geometris yang jelas, bukan sekadar simbol pada rumus.
Demo interaktif: mengatur pergeseran dan peregangan#
Demo berikut menggambar pasangan kurva dan hasil transformasinya . Kurva abu-abu putus-putus adalah kurva dasar, sedangkan kurva biru adalah hasil transformasi dengan titik puncaknya ditandai merah. Geser dan amati bahwa puncak bergerak mendatar, lalu geser untuk pergeseran vertikal dan untuk perubahan lebar kurva. Nilai negatif tidak disediakan pada demo ini, sehingga refleksi dicoba melalui tabel nilai atau skrip.
Kombinasi ketiga penggeser menghasilkan bentuk puncak yang lengkap. Misalnya, , , dan memindahkan puncak ke dengan kurva yang lebih landai. Kurva dasar ikut digambar sebagai pembanding, sehingga besar setiap pergeseran terlihat sebagai jarak antara kedua puncaknya. Bacalah persamaan di atas kanvas setiap kali penggeser digerakkan, karena setiap perubahan nilai langsung menulis ulang bentuk , dan bentuk inilah yang digunakan lagi saat keluarga kuadratik dibahas. Kasus batas lainnya dicoba dengan yang membuat kurvanya nyaris mendatar, atau dengan dan bernilai nol agar kurva hasil berhimpit dengan kurva dasarnya.
Di mana hal ini ditemui dalam kode#
Standardisasi (standardization) pada persiapan data machine learning adalah transformasi geser dan regang pada setiap fitur, yaitu nilai dikurangi rata-rata lalu dibagi simpangan bakunya. Mengurangi rata-rata adalah pergeseran, sedangkan membagi simpangan baku adalah peregangan dengan faktor . Rumus z-score karenanya terbaca sebagai transformasi pada topik ini, bukan rumus yang berdiri sendiri.
Normalisasi minimum-maksimum (min-max normalization) memetakan data ke rentang dengan pola geser lalu regang yang sama. Augmentasi data citra juga menggunakan pergeseran, karena citra yang digeser beberapa piksel tetap dikenali sebagai objek yang sama. Pada grafika komputer, pergeseran dan peregangan menjadi operasi dasar untuk memindahkan dan mengatur ukuran objek pada layar. Pemisahan antara bagian yang digeser dan bagian yang diregangkan juga memudahkan penerjemahan rumus menjadi kode, karena keduanya menjadi dua baris operasi array yang berurutan. Ketika model kuadratik disesuaikan (fit) ke data, puncak parabola hasil fit berpindah persis dengan parameter dan pada bentuk gabungan di atas.
Ringkasan#
- dan menggeser grafik secara vertikal dan horizontal, dengan arah horizontal berlawanan tanda yang tertulis.
- mengatur peregangan vertikal, sedangkan dan memantulkan grafik terhadap sumbu-x dan sumbu-y.
- Tabel nilai pada masukan yang sama memverifikasi arah setiap transformasi sebelum grafiknya digambar.
- Bentuk gabungan menggambarkan parabola dengan puncak di dan lebar yang diatur oleh .
Referensi#
- Precalculus 1.5: Transformation of Functions — OpenStax — Pergeseran, peregangan, dan refleksi grafik fungsi beserta grafik contohnya.
- Mathematics for Machine Learning — Deisenroth, Faisal, and Ong — Buku teks terbuka yang menghubungkan transformasi fungsi dan aljabar linear dengan machine learning.