Berapa populasi bakteri dua jam lagi? Kapan cadangan persediaan habis? Pertanyaan begini tidak dijawab oleh sintaks MATLAB, melainkan oleh model — persamaan yang kita susun dari pemahaman tentang masalahnya. Pemodelan matematika adalah jembatan antara dunia nyata dan komputer: kita menyederhanakan masalah lewat asumsi, memilih variabel yang relevan, menuliskan persamaannya, menyelesaikannya, lalu menguji hasilnya terhadap data. Chapter ini mempraktikkan siklus tersebut tuntas pada satu studi kasus: pertumbuhan koloni bakteri dari data laboratorium, dari tabel angka mentah sampai prediksi dan diagnosis kegagalan model.
- Siklus pemodelan: masalah nyata → asumsi → variabel → persamaan → solusi → validasi
- Linearisasi data eksponensial dengan
logdanpolyfit - Prediksi, residu, dan galat relatif model
- Gejala overfitting dan batas validitas model
Siklus Pemodelan Matematika #
Aturan mainnya: model bukan kebenaran, melainkan persamaan yang cukup benar untuk tujuan tertentu. Pemodelan selalu bergerak dalam siklus, bukan garis lurus — solusi yang gagal divalidasi mengirim kita kembali ke meja asumsi.
Diagram di atas dibaca dari kiri ke kanan: (1) kita rumuskan masalah nyata secara terukur, (2) kita buang detail yang tidak memengaruhi jawaban, (3) kita tetapkan variabel bebas, variabel terikat, dan parameter, (4) kita terjemahkan hubungan antarvariabel menjadi persamaan, (5) kita selesaikan — analitik bila bisa, numerik bila tidak, (6) kita bandingkan solusi dengan data; jika meleset, panah balik mengirim kita ke langkah asumsi. Mekanisme inilah yang membuat pemodelan jadi prosedur yang bisa diaudit, bukan tebakan.
Studi Kasus: Pertumbuhan Bakteri #
Teknisi laboratorium menghitung koloni bakteri setiap dua jam dan menyerahkan tabel berikut (data fiktif, satuan ribu sel):
| Jam ke- | 0 | 2 | 4 | 6 | 8 | 10 |
|---|---|---|---|---|---|---|
| Populasi (ribu) | 10.0 | 15.2 | 21.8 | 33.5 | 48.9 | 74.4 |
Dua kandidat model standar untuk pertumbuhan populasi: eksponensial N(t) = N0*exp(k*t) (sumber makanan tak terbatas) dan logistik (populasi menekan pertumbuhannya sendiri). Data 10 jam pertama masih jauh dari kejenuhan, jadi kita mulai dari model eksponensial. Masalahnya, exp tidak bisa di-fit langsung dengan regresi linear. Triknya adalah linearisasi: ambil logaritma natural kedua ruas sehingga log(N) = log(N0) + k*t — garis lurus terhadap t dengan intercept log(N0) dan slope k.
jam = [0 2 4 6 8 10]; % waktu pengamatan (jam)
populasi = [10.0 15.2 21.8 33.5 48.9 74.4]; % populasi (ribu sel)
% model eksponensial N(t) = N0*exp(k*t) -> log(N) = log(N0) + k*t
p = polyfit(jam, log(populasi), 1); % garis lurus di ruang log
k = p(1); % slope = laju pertumbuhan
N0 = exp(p(2)); % intercept kembali ke skala asli
fprintf('model : N(t) = %.4f * exp(%.6f * t)\n', N0, k);
fprintf('waktu ganda : %.4f jam\n', log(2)/k);Output yang Dihasilkan:
model : N(t) = 10.0236 * exp(0.199563 * t)
waktu ganda : 3.4733 jamMari kita bedah baris-baris kode di atas:
- Baris 1-2 (
jam,populasi): data mentah masuk sebagai vektor baris sepanjang enam — data eksperimen di MATLAB selalu berbentuk array. - Baris 4 (komentar linearisasi): rumus transformasi ditulis eksplisit di komentar — pembaca skrip melihat jembatan
exp→ garis lurus tanpa menebak. - Baris 5 (
polyfit(..., 1)):polyfitmencari koefisien polinom derajat 1 (garis) yang meminimalkan jumlah kuadrat residu — least squares — terhadaplog(populasi). - Baris 6-7 (
k,N0): slopep(1)langsung menjadi lajuk; interceptp(2)harus di-exp-kan kembali karena tadi kita bekerja di ruang log. - Baris 8-9 (
fprintf):log(2)/kmenghitung waktu ganda populasi — turunan langsung dari model, bukan dari data.
Hasilnya terbaca sebagai model: populasi berlipat dua setiap 3.47 jam, dimulai dari 10.02 ribu sel — nyaris sama dengan pengamatan pertama yang bernilai 10.0.
Prediksi dan Galat terhadap Data #
Langkah validasi: prediksi model dievaluasi pada titik-titik yang sama dengan data, lalu residunya dihitung.
pred = N0 * exp(k*jam);
fprintf('%4s %10s %10s %10s\n', 't', 'data', 'model', 'residu');
for i = 1:numel(jam)
fprintf('%4d %10.2f %10.2f %+10.3f\n', jam(i), populasi(i), ...
pred(i), populasi(i) - pred(i));
end
galatRel = mean(abs(populasi - pred) ./ populasi) * 100;
fprintf('galat relatif rata-rata = %.2f persen\n', galatRel);
fprintf('prediksi t=12 jam = %.2f ribu sel\n', N0*exp(k*12));Output yang Dihasilkan:
t data model residu
0 10.00 10.02 -0.024
2 15.20 14.94 +0.260
4 21.80 22.27 -0.469
6 33.50 33.19 +0.307
8 48.90 49.47 -0.574
10 74.40 73.74 +0.658
galat relatif rata-rata = 1.18 persen
prediksi t=12 jam = 109.91 ribu selResidu bergantian tanda dan tidak menunjukkan pola sistematik — itu tanda derau pengukuran acak, bukan model yang salah bentuk. Galat relatif rata-rata 1.18 persen cukup untuk memakai model ini sebagai alat prediksi jangka pendek.
Overfitting: Ketika Model Terlalu Patuh pada Data #
Polinom derajat 5 punya enam koefisien bebas — tepat sama dengan jumlah titik data. Polinom semacam itu bisa melewati keenam titik persis, residu nol. Apakah model itu lebih baik? Kita uji lewat ekstrapolasi:
q = polyfit(jam, populasi, 5);
fprintf('overfit derajat 5, t=12 = %.2f ribu sel\n', polyval(q, 12));
fprintf('overfit derajat 5, t=20 = %.2f ribu sel\n', polyval(q, 20));
fprintf('eksponensial, t=20 = %.2f ribu sel\n', N0*exp(k*20));Output yang Dihasilkan:
overfit derajat 5, t=12 = 137.10 ribu sel
overfit derajat 5, t=20 = 2748.80 ribu sel
eksponensial, t=20 = 542.51 ribu selPolinom derajat 5 memperkirakan 2748.80 ribu sel pada jam ke-20 — lima kali lipat prediksi eksponensial. Mekanisme kegagalannya: polinom derajat tinggi melengkung liar di luar rentang data karena koefisiennya disetel untuk menghapus derau, bukan untuk menangkap mekanisme pertumbuhan.
Batas Validitas dan Asumsi Eksplisit #
Model eksponensial kita berdiri di atas asumsi: sumber makanan tak terbatas, tidak ada kematian, suhu konstan. Semakin lama simulasi berjalan, semakin jauh realitas berpisah dari asumsi itu — pada jam ke-20 model menjanjikan 542.51 ribu sel, sementara cawan laboratorium pasti jenuh jauh sebelum itu. Di titik itulah model logistik dN/dt = r*N*(1 - N/K) mengambil alih: parameter K (kapasitas lingkungan) memaksa pertumbuhan melambat saat populasi menembusnya — dan menghentikan ledakan palsu.
| Asumsi model eksponensial | Konsekuensi | Batas praktis |
|---|---|---|
| Nutrisi tak terbatas | N tumbuh tanpa henti | valid hanya saat N << K |
| Tidak ada kematian sel | laju k murni kelahiran | tidak berlaku untuk kultur tua |
| Lingkungan konstan | k, N0 tetap | rusak bila suhu berubah |
Berkas contoh.m pada bagian bawah halaman menjalankan seluruh alur — linearisasi, fit, tabel residu, uji overfitting, dan plot perbandingan kedua model — dalam satu script utuh.
Ringkasan #
Pemodelan bergerak dalam siklus: masalah nyata, asumsi, variabel, persamaan, solusi, validasi, lalu kembali ke asumsi bila meleset. Studi kasus bakteri menunjukkan linearisasi log mengubah model eksponensial menjadi garis yang bisa di-fit polyfit, menghasilkan N(t) = 10.0236*exp(0.199563*t) dengan galat relatif 1.18 persen. Polinom derajat 5 yang menempel sempurna pada data justru menghasilkan ekstrapolasi kacau (2748.80 vs 542.51 ribu sel) — bukti bahwa overfitting adalah musuh prediksi. Terakhir, setiap model membawa asumsi yang menentukan batas validitasnya; di luar batas itu, ganti modelnya, bukan panjangkan waktunya.