Sistem persamaan diferensial

Sistem persamaan diferensial dengan lebih dari satu variabel keadaan dapat ditangani juga. Sebagai ilustrasi, berikut adalah model SIR penyebaran epidemi, di mana keadaan adalah jumlah S yang rentan dan jumlah infektif I dalam populasi. Rentan menjadi infektif dengan bertemu infektif, infektif pulih dan meninggalkan sistem. Ada satu persamaan untuk perubahan S dan persamaan yang sesuai untuk perubahan I. I awal = 1, sesuai dengan awal epidemi.

epi <- integrateODE(dS ~ -a * S * I,
                    dI ~ a * S * I - b * I,
                    a = 0.0026, b = 0.5, S=762, I = 1,
                    tdur = 20)

Sistem dua persamaan diferensial ini diselesaikan untuk menghasilkan dua fungsi, S(t) dan I(t).

library(mosaicCalc)
slice_plot(epi$S(t) ~ t, domain(t=0:20)) %>%
  slice_plot(epi$I(t) ~ t, color = "red")

Dalam solusinya, Anda dapat melihat epidemi tumbuh ke puncak mendekati t=5. Pada titik ini, jumlah yang rentan telah turun drastis sehingga jumlah yang menular juga mulai turun. Pada akhirnya, hampir setiap orang yang rentan telah terinfeksi.

9.2.1 Contoh: Menyelam dari papan tinggi

Pertimbangkan seorang penyelam saat dia melompat dari papan setinggi 5 meter dan terjun ke air. Secara khusus, misalkan Anda ingin memahami gaya yang bekerja. Untuk melakukannya, Anda membuat model dinamis dengan variabel status v (kecepatan) dan x (posisi). Seperti yang mungkin Anda ingat dari ilmu fisika, benda yang jatuh akan dipercepat ke bawah dengan percepatan 9,8 meter per detik2. Kami akan menentukan bahwa lompatan awal di papan adalah ke atas dengan kecepatan 1 meter per detik.

dive <- integrateODE(dv ~ -9.8, dx ~ v, 
                     v = 1, x = 5, tdur = 1.2)
slice_plot(dive$x(t) ~ t, domain(t = range(0, 1.2))) %>%
  gf_labs(y = "Height (m)", x = "time (s)")

Penyelam menyentuh air sekitar t=1,1 s. Tentu saja, begitu berada di dalam air, penyelam tidak lagi berakselerasi ke bawah, sehingga model tidak valid untuk x<0

Apa yang baik tentang format persamaan diferensial adalah mudah untuk menambahkan fitur seperti daya apung air dan tarikan air. Kami akan melakukannya di sini dengan mengubah akselerasi (dv ) sehingga ketika x<0 percepatannya sedikit positif (buoyant) dengan gaya hambat sebanding dengan v2 dalam arah berlawanan dengan gerak.

library(mosaicCalc)
diveFloat <- integrateODE( 
        dv ~ ifelse(x <  0, 1 - 2 * sign(v) * v^2, -9.8), 
        dx ~ v, 
        v = 1, x = 5, tdur = 10)
slice_plot(diveFloat$x(t) ~ t, domain(t = 0:10)) %>%
  gf_labs(ylab="Height (m)", xlab="time (s)")

Menurut model, penyelam muncul kembali sekitar 5 detik, dan kemudian terombang-ambing di dalam air.

Daftar pusaka : https://dtkaplan.github.io/RforCalculus/solving.html