Fungsi-Fungsi Umum

Keluarga linear, kuadratik, eksponensial, dan logaritma.

Daftar isi

Topik ini membahas empat keluarga fungsi yang paling sering ditemui, yaitu linear, kuadratik, eksponensial, dan logaritma. Setiap keluarga dijelaskan dari perilakunya, diverifikasi angka demi angka dengan NumPy, lalu dikenali dari bentuk grafiknya. Setelah membaca, rumus atau kurva dapat dihubungkan dengan keluarganya, dan keluarga tersebut dapat dihitung ulang dalam kode untuk memeriksa perilakunya.

Keluarga linear dan kuadratik#

Fungsi linear f(x)=mx+c f(x) = mx + c bertumbuh dengan laju yang tetap, yaitu setiap kenaikan x x satu satuan menambah keluaran tepat m m . Sifat ini mudah diverifikasi karena selisih dua keluaran berurutan selalu sama. Grafiknya garis lurus dengan kemiringan m m , dan dua bilangan itu sepenuhnya menentukan bentuknya. Fungsi ini menjadi pembanding paling sederhana untuk semua keluarga lain.

Fungsi kuadratik f(x)=ax2+bx+c f(x) = ax^2 + bx + c menghasilkan parabola. Tanda a a menentukan arah buka, sedangkan puncaknya berada pada x=−b2a x = -\frac{b}{2a} . Bentuk puncak a(x−h)2+k a(x - h)^2 + k menunjukkan bahwa parabola apa pun merupakan transformasi dari x2 x^2 , sehingga letak puncaknya terbaca langsung dari nilai h h dan k k .

Akar persamaan ax2+bx+c=0 ax^2 + bx + c = 0 menjadi titik potong sumbu-x parabolanya, sehingga jumlah akar dan bentuk parabola saling menjelaskan. Parabola yang tidak memotong sumbu-x berarti persamaannya tidak memiliki akar real, dan parabola yang menyinggung sumbu-x berarti akarnya kembar. Pada tabel nilai, keluarannya berubah dengan langkah yang makin besar atau makin kecil, bukan dengan selisih tetap seperti pada keluarga linear.

Keluarga eksponensial#

Fungsi eksponensial f(x)=bx f(x) = b^x menempatkan bilangan tetap b b pada posisi pangkat, dengan syarat b>0 b > 0 dan b≠1 b \neq 1 . Setiap kenaikan x x satu satuan mengalikan keluaran dengan b b , sehingga urutan nilainya berbentuk penggandaan, yaitu 1,2,4,8 1, 2, 4, 8 untuk b=2 b = 2 . Domainnya semua bilangan real, sedangkan daerah hasilnya (0,∞) (0, \infty) karena perpangkatan tidak pernah menghasilkan nol maupun bilangan negatif. Bilangan Euler e≈2,718 e \approx 2{,}718 menjadi basis yang paling lazim dalam kode, dan NumPy menyediakannya sebagai np.exp.

Cara cepat membaca bx b^x adalah melalui waktu penggandaan, yaitu berapa kenaikan x x yang dibutuhkan agar keluaran menjadi dua kali lipat. Untuk b=2 b = 2 waktunya tepat satu satuan, sedangkan untuk b>2 b > 2 lebih cepat dari itu. Sebaliknya, 0<b<1 0 < b < 1 menghasilkan peluruhan, karena setiap kenaikan x x justru membagi keluaran dengan bilangan yang lebih dari satu. Ciri khas keluarga ini adalah pertumbuhan yang melampaui fungsi linear apa pun pada akhirnya, seberapa pun kemiringan garisnya. Perilaku itu sulit dipercaya dari beberapa angka pertama saja, karena awal pertumbuhannya terlihat lambat, tetapi menjadi sangat curam setelah beberapa penggandaan.

Keluarga logaritma#

Fungsi logaritma adalah kebalikan fungsi eksponensial. Persamaan log⁡b(x)=y \log_b(x) = y sama artinya dengan by=x b^y = x , sehingga logaritma menjawab pertanyaan tentang banyak penggandaan, yaitu berapa kali basis harus dikalikan untuk mencapai x x . Domainnya (0,∞) (0, \infty) karena eksponensial tidak pernah menghasilkan keluaran nol maupun negatif.

Kurvanya tumbuh sangat lambat, dan contohnya log⁡2(1024)=10 \log_2(1024) = 10 , yang berarti penggandaan sepuluh kali sudah cukup untuk melewati seribu. Skala logaritmik digunakan ketika nilai membentang sangat lebar, karena logaritma memampatkan rentang besar menjadi rentang yang mudah dibaca. Desibel pada suara dan skala kekuatan gempa menggunakan gagasan yang sama, sedangkan pada kode histogram logaritmik dipilih ketika data membentang dari satu sampai sejuta.

Mengenali keluarga dari bentuk grafiknya#

Bentuk grafik langsung menunjukkan keluarganya. Garis lurus menandakan fungsi linear, parabola simetris menandakan kuadratik, kurva yang makin curam menandakan eksponensial, dan kurva yang makin landai menandakan logaritma. Contoh berikut menggambar satu wakil dari setiap keluarga pada empat panel, lalu menyimpannya sebagai berkas SVG.

python Contoh: menggambar empat keluarga fungsi
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-4.0, 4.0, 200)
xp = np.linspace(0.25, 4.0, 200)
xe = np.linspace(-2.0, 2.0, 200)

fig, axs = plt.subplots(2, 2, figsize=(7, 5))
axs[0, 0].plot(x, 0.5 * x + 1, color="#1a5fb4")
axs[0, 0].set_title("linear: y = 0.5x + 1", fontsize=9)
axs[0, 1].plot(x, 0.25 * x**2 - 1, color="#c01c28")
axs[0, 1].set_title("kuadratik: y = 0.25x^2 - 1", fontsize=9)
axs[1, 0].plot(xe, np.exp(xe), color="#26a269")
axs[1, 0].set_ylim(0.0, 8.0)
axs[1, 0].set_title("eksponensial: y = e^x", fontsize=9)
axs[1, 1].plot(xp, np.log(xp), color="#813e9c")
axs[1, 1].set_title("logaritma: y = ln x", fontsize=9)

for ax in axs.flat:
    ax.axhline(0.0, color="#000000", linewidth=0.8)
    ax.axvline(0.0, color="#000000", linewidth=0.8)
    ax.tick_params(labelsize=8)

fig.tight_layout()
fig.savefig("keluarga-fungsi.svg")
Satu wakil dari setiap keluarga fungsi pada empat panel

Perbedaan paling mencolok ada pada pertumbuhan eksponensial dibandingkan linear. Contoh berikut membandingkan 4x 4x dengan 2x 2^x pada x=10 x = 10 , x=20 x = 20 , dan x=30 x = 30 .

python Contoh: membandingkan pertumbuhan linear dan eksponensial
import numpy as np

x = np.array([10.0, 20.0, 30.0])
print("linear    4x :", 4.0 * x)
print("eksponen  2^x:", 2.0**x)
text Keluaran
linear    4x : [ 40.  80. 120.]
eksponen  2^x: [1.02400000e+03 1.04857600e+06 1.07374182e+09]

Pada x=10 x = 10 kedua nilai masih sepadan, yaitu 40 berhadapan dengan 1024. Pada x=30 x = 30 fungsi linear baru mencapai 120, sedangkan eksponensialnya melonjak ke 230 2^{30} , yaitu sekitar satu miliar, yang oleh NumPy ditulis dengan notasi ilmiah 1.074e+09. Eksponensial pada akhirnya melampaui garis apa pun, dan grafik empat panel di atas menyimpan perilaku itu sebagai kurva yang makin curam. Domain dan daerah hasilnya juga terbaca kembali dari panel-panel itu, karena panel logaritma hanya memuat x x positif, sedangkan panel eksponensial selalu berada di atas sumbu horizontal.

Menghitung empat keluarga dengan NumPy#

Skrip berikut menghitung satu wakil dari setiap keluarga, yaitu selisih tetap fungsi linear, puncak parabola, penggandaan eksponensial, dan kebalikannya pada logaritma. Setiap baris keluarannya dapat dihitung ulang secara manual sebagai pemeriksaan. NumPy menjadi kalkulator tetap sepanjang jalur ini, dan pola skrip di atas dapat disalin untuk menguji fungsi apa pun pada beberapa masukan pilihan. Jalankan skrip dengan python3 keluarga_fungsi.py di dalam direktori topik untuk menghasilkan kembali keluaran yang sama.

python keluarga_fungsi.py
import numpy as np

# linear: kenaikan konstan
x = np.array([0, 1, 2, 3, 4])
print("3x + 1    :", 3 * x + 1)

# kuadratik: titik puncak parabola y = x^2 - 4x + 1
a, b, c = 1.0, -4.0, 1.0
x_puncak = -b / (2.0 * a)
y_puncak = a * x_puncak**2 + b * x_puncak + c
print("puncak    : x =", x_puncak, "y =", y_puncak)

# eksponensial: penggandaan pada setiap kenaikan x
x = np.arange(0, 6)
print("2^x       :", 2.0**x)

# logaritma: kebalikan eksponensial
x = np.array([1, 2, 4, 8, 1024])
print("log2(x)   :", np.log2(x))
text Keluaran
3x + 1    : [ 1  4  7 10 13]
puncak    : x = 2.0 y = -3.0
2^x       : [ 1.  2.  4.  8. 16. 32.]
log2(x)   : [ 0.  1.  2.  3. 10.]

Baris pertama memperlihatkan selisih yang selalu 3, sesuai kemiringan rumusnya. Baris kedua menemukan puncak parabola x2−4x+1 x^2 - 4x + 1 di (2,−3) (2, -3) melalui rumus −b2a -\frac{b}{2a} , dan posisi puncak beserta nilainya cukup untuk menggambar parabola tanpa tabel nilai. Dua baris terakhir saling mencerminkan, karena 2x 2^x menggandakan keluaran sedangkan log⁡2(x) \log_2(x) menghitung banyak penggandaan, dan pasangan 210=1024 2^{10} = 1024 dengan log⁡2(1024)=10 \log_2(1024) = 10 menutup hubungan kebalikannya. Label pada setiap baris keluaran sengaja dicantumkan agar keluarga yang sedang dihitung terbaca tanpa membaca ulang skripnya. Pola print berlabel seperti ini merupakan kebiasaan yang baik saat memeriksa rumus baru dengan cepat.

Demo interaktif: mengganti keluarga fungsi#

Demo berikut menggambar satu fungsi pada kanvas, dan keluarganya diganti melalui tombol pilihan. Parameter a a pada penggeser berlaku sesuai keluarganya, yaitu kemiringan untuk linear, lebar parabola untuk kuadratik, basis untuk eksponensial, dan basis untuk logaritma. Pilih eksponensial, geser a a melewati nilai 1, dan amati kurva berbalik dari tumbuh menjadi luruh. Pilih logaritma dan perhatikan bahwa kurva hanya muncul pada sisi kanan sumbu vertikal karena domainnya x>0 x > 0 .

Rentang a a untuk dua keluarga terakhir dipersempit otomatis agar basis selalu positif, dan penggantian keluarga ketika a a bernilai satu menggesernya ke 2 karena basis satu hanya menghasilkan kurva datar. Hubungan kebalikan antara eksponensial dan logaritma dapat dirasakan dengan mengganti keluarga pada basis yang sama, karena kurvanya berpindah dari makin curam menjadi makin landai. Demo ini juga memperlihatkan perlakuan domain secara langsung, karena kurva logaritma berhenti di sumbu vertikal dan tidak pernah menyeberang ke kiri, sedangkan fungsi linear terus membentang ke kedua sisi tanpa henti. Perbedaan perilaku semacam ini menjadi pertimbangan ketika memilih model atau transformasi untuk data.

Di mana hal ini ditemui dalam kode#

Lapisan linear (dense layer) pada jaringan saraf menghitung wx+b wx + b , yaitu bentuk mx+c mx + c versi banyak variabel, sehingga keluarga linear menjadi unit dasar dari model paling sederhana sekaligus komponen setiap lapisan. Loss kuadratik (y−y^)2 (y - \hat{y})^2 menggunakan keluarga kuadratik, dan bentuk parabolanya menjelaskan mengapa error kecil dikenakan biaya ringan sedangkan error besar dikenakan biaya yang jauh lebih berat. Model regresi paling sederhana berhenti pada kedua bentuk itu, karena prediksinya memang berupa mx+c mx + c tanpa suku tambahan apa pun.

Keluarga eksponensial muncul pada fungsi sigmoid 11+e−x \frac{1}{1 + e^{-x}} dan softmax yang keduanya memanggil np.exp, sedangkan jadwal penurunan tingkat pembelajaran sering berbentuk peluruhan eksponensial. Peluruhan yang sama digunakan pada rata-rata bergerak (moving average) untuk melacak rata-rata loss secara halus. Keluarga logaritma menghitung cross-entropy, karena logaritma mengubah perkalian peluang yang kecil menjadi penjumlahan yang stabil secara numerik. Bahkan satuan bit pada teori informasi didefinisikan melalui log⁡2 \log_2 , sehingga log⁡2(1024)=10 \log_2(1024) = 10 di atas persis berarti sepuluh bit. Gagasan yang sama berlaku pada kurva karakteristik sensor, yang sering dimodelkan dengan salah satu keluarga ini sebelum digunakan untuk kalibrasi.

Ringkasan#

  • Fungsi linear bertumbuh dengan selisih tetap, sedangkan kuadratik membentuk parabola dengan puncak pada x=−b2a x = -\frac{b}{2a} .
  • Eksponensial bx b^x menggandakan keluaran pada setiap kenaikan masukan, sedangkan logaritma menghitung banyak penggandaan itu sebagai kebalikannya.
  • Bentuk grafik mengidentifikasi keluarganya, yaitu garis lurus, parabola, kurva yang makin curam, dan kurva yang makin landai.
  • Keempat keluarga menjadi bahan dasar kode machine learning, dari lapisan linear dan loss kuadratik sampai sigmoid, softmax, dan cross-entropy.

Referensi#