동역학계로써의 조류-동물성플랑크톤 모델
모델 1
$$ \begin{align*} \dot{A} =& r A \left( 1 - \frac{A}{K} \right) - g Z \frac{A}{A + h_{A}} + i \left( K - A \right) \\ \dot{Z} =& e g Z \frac{A}{A + h_{A}} - m Z - F {\frac{ Z^{2} }{ Z + h_{Z} }} \end{align*} $$
변수
- $A$: 조류algae의 밀도
- $Z$: 동물성플랑크톤zooplankton의 밀도
파라미터
- $r = 0.5$: 조류의 성장률
- $K = 6$: 조류의 환경수용력carrying capacity
- $g = 0.4$: 동물성플랑크톤의 섭식률grazing rate
- $h_{A} = 0.6$: 조류의 반포화상수half-saturation constant
- $i = 0.1$: 조류의 유입률inflow rate
- $e = 0.6$: 동물성플랑크톤의 섭식효율grazing efficiency
- $m = 0.15$: 동물성플랑크톤의 자연사망률natural mortality rate
- $F$: 물고기 집단fish community에 의한 손실
- $h_{Z} = 0.5$: 동물성플랑크톤의 반포화상수
설명
조류-동물성플랑크톤 모델algae-zooplankton model은 전형적인 롯카-볼테라 포식자-피식자 모델의 변형으로써, 수중에서 조류와 동물성플랑크톤의 상호작용을 설명하는 수리적 모델이다.
본문의 모델에서 항은 다음과 같은 의미를 가진다.
- $\dot{A} = \cdots$
- $r A \left( 1 - \frac{A}{K} \right)$: 조류의 성장, 로지스틱 성장을 따른다.
- $g Z \frac{A}{A + h_{A}}$: 동물성플랑크톤에 의한 조류의 섭식, 홀링타입 1 함수형 반응을 따른다.
- $i \left( K - A \right)$: 조류의 유입, 환경수용력 $K$ 에 따른 제한이 있으며 오일러 이동 모델을 따른다.
- $\dot{Z} = \cdots$
- $e g Z \frac{A}{A + h_{A}}$: 조류에 의한 동물성플랑크톤의 성장, 섭식 효율 $e \le 1$ 에 영향을 받는다.
- $m Z$: 동물성플랑크톤의 자연사망이다.
- $F {\frac{ Z^{2} }{ Z + h_{Z} }}$: 물고기에 의해 먹히는 동물성플랑크톤을 의미하며, 홀링타입 2 함수형 반응을 따른다.
B-티핑

주어진 방정식은 $F$ 의 변화에 따라 위와 유사한 바이퍼케이션 다이어그램을 보인다. 두 종류의 새들-노드 바이퍼케이션이 있어 이력현상을 보이며, 자연스럽게 B-티핑이 발생한다.

이러한 바이퍼케이션 다이어그램은 위 그림에서 (a) $K = 4, 6, 8, 10$, (b) $i = 0.025, 0.05, 0.075, 0.1$, (c) $g = 0.35, 0.40, 0.45, 0.50$, (d) $m = 0.10, 0.12, 0.14, 0.16$ 에 대해 다르게 나타난다.
코드
다음은 조류-동물성플랑크톤 모델을 시뮬레이션 할 수 있는 줄리아 코드다.
using DataFrames, DifferentialEquations, OrdinaryDiffEqLowOrderRK
function factory_algaezooplankton(F::Number; ic = [5, 5], saveat = 0:1e-2:100)
r, K, g, hA, i, e, m, hZ = (
0.5, 6, 0.4, 0.6, 0.1, 0.6, 0.15, 0.5 )
function sys(du, u, p, t)
A,Z = u
F = p[1]
du[1] = r*A*(1 - frac(A,K)) - g*Z*frac(A, A + hA) + i*(K - A)
du[2] = e*g*Z*frac(A, A + hA) - m*Z - F*frac(Z^2, Z^2 + hZ^2)
return du
end
sol = solve(ODEProblem(sys, ic, (0, last(saveat)), [F]), RK4(), dt = saveat.step.hi, adaptive=false, maxiters = 1e+7)
matrix = Matrix([sol.t'; sol[:, :]; stack([sys(zeros(2), u, [F], 0) for u in sol.u])]')
return matrix[sol.t .≥ first(saveat), :][1:end-1, :]
end
factory_algaezooplankton(T::Type, args...; kargs...) =
DataFrame(factory_algaezooplankton(args...; kargs...), ["t", "A", "Z", "dA", "dZ"])
Chattopadhyay, S. N., & Gupta, A. K. (2024). B-tipping points in plankton dynamics: Stochasticity and early warning signals. Physical Review E, 110(6), 064218. https://doi.org/10.1103/PhysRevE.110.064218 ↩︎

저희들의 저서 「줄리아 프로그래밍」이 2024 세종도서 학술부문에 선정되었습니다!

