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:

text
== 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 #

FiturPerilaku
Model logistikdP/dt = r*P*(1 - P/K) sebagai berkas fungsi dengan parameter struct r, K, P0
Solver deterministikode45 dengan tspan vektor 0:1:120 dan RelTol 1e-10, AbsTol 1e-12; dua kali berjalan menghasilkan isequal
Validasi analitikgalat terhadap solusi eksak P(t) = K/(1 + (K/P0 - 1)*exp(-r*t)) diuji < 1e-6
Analisis faseeksponensial (P < 0.3K), transisi, jenuh (P > 0.7K): durasi tiap fase + laju maksimum
t50 otomatiswaktu P mencapai K/2 lewat interpolasi interp1
Tiga visualisasikurva 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 4matriks P akhir, t50, dan laju maksimum untuk r dan K — plus heatmap contourf
Laporan otomatislaporan.txt ringkas hasil seluruh studi
Uji otomatis17 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 ode45 dengan tspan vektor dan odeset agar 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 fprintf ke 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/:

text
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 assert

Cara Menjalankan #

Buka folder src/ lalu jalankan simulasi dasar atau studi lengkap dari Command Window:

text
>> 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:

  1. Bagian 1: Perancangan Model — fenomena, penurunan model logistik, parameter dan satuan, solusi analitik sebagai alat validasi, dan skema simulasi.
  2. Bagian 2: Implementasi Simulasi — fungsi ODE, ode45 deterministik, validasi terhadap analitik, dan struktur hasil.
  3. Bagian 3: Visualisasi Pertumbuhan — kurva dengan anotasi, kurva laju dan titik belok, perbandingan skenario, dan persiapan heatmap.
  4. 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.