Julia에서 로지스틱 방정식 풀기
0. 이전: 대학 도서관에서 재미있는 책을 발견했다
어느 날, 대학의 도서관을 평소처럼 물색하고 있다고 수학의 선반에 있던 1권의 책을 손에 들었다.
미분 방정식으로 수학 모델을 만들자 · 일본 평론사 (서적 자세한 것은 여기)
미분방정식에서 다양한 현상을 모델화하고 있는 것 같다. Julia에서 수치 계산이거나 미분 방정식을 푸는 수단인지를 알게 된 직후였기 때문에 연습하고 싶다고 생각하고 도서관에서 빌려왔다.
이 기사에서는 실제로이 책에 쓰여진 "인구 문제"에 대해 Julia에서 풀어 봤기 때문에보고합니다.
뭐, 타이틀에도 있듯이 「로지스틱 방정식」을 풀어 본 것이다.
1. 로지스틱 방정식이란?
Wikipedia에 따르면,
로지스틱 방정식(로지스틱 편견, 영어: logistic equation[1])은 생물체의 개체수의 변화의 모습을 나타내는 수리 모델의 일종이다. 특정 단일 생물체가 특정 환경에서 성장할 때 생물체의 개체 수 (개체 그룹 크기)의 변화를 예측할 수 있습니다. 인간의 경우라면 인구의 변동을 나타내는 모델이다.
라고 적혀있다. 인간으로 말하는 곳의 인구 변동을 나타내는 모델, 이것으로 어쩐지 이해는 해 주셨을 것이다.
구체적으로 로지스틱 방정식은
$$
\frac{dN}{dt} =\gamma N\left(1 -\frac{N}{N_{\infty}}\right)
$$
같이 기술된다. 여기서, $ N = N (t) $는 "임의의 시간 $ t $에서 특정 국가의 총 인구"를 나타냅니다. $N_{\infty}$는 "인구가 증가한 상한"이다.
이것을 미분 적분학의 지식을 사용하여 엄격하게 풀면,
$$
N(t) =\frac{N_{\infty}}{1 -\left(1 -\frac{N_{\infty}}{N_0}\right)e^{-\gamma t}}
$$
된다. 여기서 초기 조건을 $N(0) = N_0$ 로 하고 있다.
상수에 대해 이번에는
N_0 = 3.9 \times 10^6 \\
N_{\infty} = 1.97 \times 10^8 \\
\gamma = 0.3134
한다.
2. 코드에 떨어뜨림
그럼 이번에도 Ordinary Differential Equations 을 참고하면서 코딩해 나가자.
PopulationProblem.jlusing DifferentialEquations
using Plots; gr()
#微分方程式を定義
f(y , t) = 0.3134y*(1-y/1.97e8)
#初期値
y0 = 3.9e6
#時間間隔
tspan = (0.0, 70.0)
#微分方程式を解かせる
prob = ODEProblem(f, y0, tspan)
sol = solve(prob)
#グラフをplot
plot(sol; legend=:topleft , title = "PopulationProblem" , lw = 5 , label = "Numerical" , color =:black)
#厳密解を定義してグラフに追加する
g(t) = 1.97e8/(1 - (1 - 1.97e8/3.9e6)*exp.(-0.3134*t))
plot!(g , linestyle =:dash , lw = 3 , label = "Exact" , color =:red)
이것을 실행하면, 제대로 그래프를 낼 수 있었다. $t\to\infty$ 로 $N(t)\to N_{\infty}$ 에 수렴하는 것은 엄밀해에서도 알 수 있다.
3. 마지막으로
Twitter에서 조언을 주면서 이번에도 쓸 수 있었습니다. 참고 자료는 본문중에 링크를 메우고 있습니다.
Julia는 매우 쉽게 작성할 수 있습니다!
Reference
이 문제에 관하여(Julia에서 로지스틱 방정식 풀기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/MizutoKadowaki0312/items/2e1c4e59cd3ab8e4f737
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Wikipedia에 따르면,
로지스틱 방정식(로지스틱 편견, 영어: logistic equation[1])은 생물체의 개체수의 변화의 모습을 나타내는 수리 모델의 일종이다. 특정 단일 생물체가 특정 환경에서 성장할 때 생물체의 개체 수 (개체 그룹 크기)의 변화를 예측할 수 있습니다. 인간의 경우라면 인구의 변동을 나타내는 모델이다.
라고 적혀있다. 인간으로 말하는 곳의 인구 변동을 나타내는 모델, 이것으로 어쩐지 이해는 해 주셨을 것이다.
구체적으로 로지스틱 방정식은
$$
\frac{dN}{dt} =\gamma N\left(1 -\frac{N}{N_{\infty}}\right)
$$
같이 기술된다. 여기서, $ N = N (t) $는 "임의의 시간 $ t $에서 특정 국가의 총 인구"를 나타냅니다. $N_{\infty}$는 "인구가 증가한 상한"이다.
이것을 미분 적분학의 지식을 사용하여 엄격하게 풀면,
$$
N(t) =\frac{N_{\infty}}{1 -\left(1 -\frac{N_{\infty}}{N_0}\right)e^{-\gamma t}}
$$
된다. 여기서 초기 조건을 $N(0) = N_0$ 로 하고 있다.
상수에 대해 이번에는
N_0 = 3.9 \times 10^6 \\
N_{\infty} = 1.97 \times 10^8 \\
\gamma = 0.3134
한다.
2. 코드에 떨어뜨림
그럼 이번에도 Ordinary Differential Equations 을 참고하면서 코딩해 나가자.
PopulationProblem.jlusing DifferentialEquations
using Plots; gr()
#微分方程式を定義
f(y , t) = 0.3134y*(1-y/1.97e8)
#初期値
y0 = 3.9e6
#時間間隔
tspan = (0.0, 70.0)
#微分方程式を解かせる
prob = ODEProblem(f, y0, tspan)
sol = solve(prob)
#グラフをplot
plot(sol; legend=:topleft , title = "PopulationProblem" , lw = 5 , label = "Numerical" , color =:black)
#厳密解を定義してグラフに追加する
g(t) = 1.97e8/(1 - (1 - 1.97e8/3.9e6)*exp.(-0.3134*t))
plot!(g , linestyle =:dash , lw = 3 , label = "Exact" , color =:red)
이것을 실행하면, 제대로 그래프를 낼 수 있었다. $t\to\infty$ 로 $N(t)\to N_{\infty}$ 에 수렴하는 것은 엄밀해에서도 알 수 있다.
3. 마지막으로
Twitter에서 조언을 주면서 이번에도 쓸 수 있었습니다. 참고 자료는 본문중에 링크를 메우고 있습니다.
Julia는 매우 쉽게 작성할 수 있습니다!
Reference
이 문제에 관하여(Julia에서 로지스틱 방정식 풀기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/MizutoKadowaki0312/items/2e1c4e59cd3ab8e4f737
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
using DifferentialEquations
using Plots; gr()
#微分方程式を定義
f(y , t) = 0.3134y*(1-y/1.97e8)
#初期値
y0 = 3.9e6
#時間間隔
tspan = (0.0, 70.0)
#微分方程式を解かせる
prob = ODEProblem(f, y0, tspan)
sol = solve(prob)
#グラフをplot
plot(sol; legend=:topleft , title = "PopulationProblem" , lw = 5 , label = "Numerical" , color =:black)
#厳密解を定義してグラフに追加する
g(t) = 1.97e8/(1 - (1 - 1.97e8/3.9e6)*exp.(-0.3134*t))
plot!(g , linestyle =:dash , lw = 3 , label = "Exact" , color =:red)
Twitter에서 조언을 주면서 이번에도 쓸 수 있었습니다. 참고 자료는 본문중에 링크를 메우고 있습니다.
Julia는 매우 쉽게 작성할 수 있습니다!
Reference
이 문제에 관하여(Julia에서 로지스틱 방정식 풀기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/MizutoKadowaki0312/items/2e1c4e59cd3ab8e4f737텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)