Simulasi memungkinkan kita bereksperimen tanpa laboratorium. Proyek ini membangun simulasi pertumbuhan tanaman dengan model logistik: merancang persamaan diferensial dan parameternya, mengintegrasikannya secara numerik, memvisualisasikan kurva pertumbuhan, lalu menganalisis bagaimana perubahan parameter mengubah hasil.
Alur tahapannya:
- perancangan model — menurunkan model logistik dan makna tiap parameter,
- implementasi simulasi — mengintegrasikan model dengan solver ODE,
- visualisasi pertumbuhan — kurva pertumbuhan dan bandingan skenario,
- analisis parameter — sweep parameter dan baca sensitivitasnya.
Seluruh kode sumber setiap tahap tersedia pada bagian Berkas Sumber di bawah halaman setiap bagian.
Perilaku yang Diharapkan #
Satu perintah menjalankan studi lengkap. Dari folder src/, panggilan jalankanStudi('hasil-studi') mensimulasikan 120 hari pertumbuhan, menganalisis fasenya, menyimpan tiga gambar dan heatmap, lalu menulis laporan.txt. Transkrip berikut adalah keluaran nyata bagian pembukanya:
== Studi pertumbuhan tanaman (model logistik) ==
Folder output: hasil-studi
Simulasi dasar: r = 0.08/hari, K = 100, P0 = 1, 120 hari
P(120) = 99.3340 (99.33% dari K), t50 = 57.44 hari
Fase eksponensial: 46.85 hari (P < 30)
Fase transisi : 21.19 hari (30 <= P <= 70)
Fase jenuh : 51.97 hari (P > 70)
Laju maksimum : 1.9997 per hari di t = 57.50 (sekitar K/2)Keluaran dilanjutkan konfirmasi tiga gambar, tabel sweep 5 x 4 parameter, heatmap, dan laporan — log lengkapnya dibahas pada Bagian 4.
Fitur yang Dibangun #
| Fitur | Perilaku |
|---|---|
| Model logistik | dP/dt = r*P*(1 - P/K) sebagai berkas fungsi dengan parameter struct r, K, P0 |
| Solver deterministik | ode45 dengan tspan vektor 0:1:120 dan RelTol 1e-10, AbsTol 1e-12; dua kali berjalan menghasilkan isequal |
| Validasi analitik | galat terhadap solusi eksak P(t) = K/(1 + (K/P0 - 1)*exp(-r*t)) diuji < 1e-6 |
| Analisis fase | eksponensial (P < 0.3K), transisi, jenuh (P > 0.7K): durasi tiap fase + laju maksimum |
| t50 otomatis | waktu P mencapai K/2 lewat interpolasi interp1 |
| Tiga visualisasi | kurva P dengan anotasi K/K/2/t50, kurva laju dengan titik belok, subplot skenario r = 0.05/0.08/0.12 |
| Sweep grid 5 x 4 | matriks P akhir, t50, dan laju maksimum untuk r dan K — plus heatmap contourf |
| Laporan otomatis | laporan.txt ringkas hasil seluruh studi |
| Uji otomatis | 17 kasus assert di tests/uji_simulasi.m, tanpa residu berkas |
Tujuan Pembelajaran #
- Menerjemahkan fenomena (pertumbuhan melambat mendekati kapasitas) menjadi persamaan diferensial dan parameter bermakna.
- Menjalankan
ode45dengan tspan vektor danodesetagar hasil lintas mesin identik. - Memvalidasi hasil numerik terhadap solusi analitik lewat
assert. - Menaksir turunan dari data grid (
diff) dan menandai fase serta titik belok. - Menyapu grid parameter, membaca matriksnya, dan menggambarnya sebagai heatmap.
- Menulis laporan teks dengan
fprintfke berkas.
Prasyarat #
Materi berikut perlu dikuasai sebelum memulai proyek ini:
- Membuat Function dan Anonymous Functions dari section Fungsi
- Structure Array dari section Struktur Data MATLAB
- Interpolation dari section Matematika dan Komputasi Numerik
- Pemodelan Matematika dan Simulasi Sistem dari section Aplikasi Saintifik
- Line Plot, Labels, Title, dan Legend, Subplot dan Layout, serta Contour Plot dari section Visualisasi Data
- Assertions dan Unit Testing dari section Debugging dan Pengujian
Struktur Proyek #
Kode dipisah menjadi lapisan model, analisis, dan orkestrasi di src/, plus satu berkas uji di tests/:
simulasi-pertumbuhan-tanaman/
├── _index.md
├── bagian/
│ ├── perancangan-model/
│ │ └── index.md
│ ├── implementasi-simulasi/
│ │ └── index.md
│ ├── visualisasi-pertumbuhan/
│ │ └── index.md
│ └── analisis-parameter/
│ └── index.md
├── src/
│ ├── modelPertumbuhan.m - fungsi ODE: dP/dt = r*P*(1 - P/K)
│ ├── jalankanSimulasi.m - ode45 deterministik + t50
│ ├── analisisFase.m - fase eksponensial/transisi/jenuh
│ ├── buatVisualisasi.m - tiga figur PNG + anotasi
│ ├── sweepParameter.m - sweep grid r x K + ringkasan
│ └── jalankanStudi.m - orkestrasi + laporan.txt
└── tests/
└── uji_simulasi.m - 17 kasus assertCara Menjalankan #
Buka folder src/ lalu jalankan simulasi dasar atau studi lengkap dari Command Window:
>> hasil = jalankanSimulasi();
>> fprintf('P(120) = %.4f, t50 = %.4f hari\n', hasil.P(end), hasil.waktuSetengahK);
P(120) = 99.3340, t50 = 57.4390 hari
>> jalankanStudi('hasil-studi');Panggilan kedua membuat folder hasil-studi/ berisi lima berkas: kurva-pertumbuhan.png, laju-pertumbuhan.png, skenario-r.png, heatmap-sweep.png, dan laporan.txt. Uji otomatis dijalankan dari folder tests/ dengan octave uji_simulasi.m.
Tahapan Pengerjaan #
Proyek dikerjakan dalam empat bagian berurutan. Setiap bagian menghasilkan program yang dapat dijalankan penuh pada tahapnya:
- Bagian 1: Perancangan Model — fenomena, penurunan model logistik, parameter dan satuan, solusi analitik sebagai alat validasi, dan skema simulasi.
- Bagian 2: Implementasi Simulasi — fungsi ODE,
ode45deterministik, validasi terhadap analitik, dan struktur hasil. - Bagian 3: Visualisasi Pertumbuhan — kurva dengan anotasi, kurva laju dan titik belok, perbandingan skenario, dan persiapan heatmap.
- Bagian 4: Analisis Parameter — sweep grid r x K, sensitivitas, laporan otomatis, dan uji menyeluruh.
Mulailah dari Bagian 1 dan ikuti urutannya karena setiap bagian dibangun di atas kode bagian sebelumnya.
Turunkan model pertumbuhan logistik dan tetapkan makna serta rentang tiap parameter.
Buka → # Bagian 2: Implementasi SimulasiImplementasikan model sebagai fungsi ODE dan jalankan integrasi numeriknya.
Buka → # Bagian 3: Visualisasi PertumbuhanVisualisasikan kurva pertumbuhan, bandingkan skenario, dan tampilkan fase pertumbuhan.
Buka → # Bagian 4: Analisis ParameterSweep laju pertumbuhan dan kapasitas, lalu baca sensitivitas hasil simulasinya.
Buka →