Juliaでは変数や関数の名前にUnicode文字を使うことができる。
従って、絵文字も利用することができ、公式ドキュメントにも下記の通り利用例が記載されている。
f = @ode_def begin
d🐁 = α*🐁 - β*🐁*🐈
d🐈 = -γ*🐈 + δ*🐁*🐈
end α β γ δ
これはLotka-Volterraの方程式と呼ばれる、捕食者(🐈)と被食者(🐁)の個体数の変動を表現する数理モデルである。
このように、変数に絵文字を使うことでコード内の変数の意味の直感的な理解が可能になる。
SIRモデル
SIRモデルは感染症の基本的な数理モデルであり、Susceptible(感染可能者)、Infectious(感染者)、Removed/Recovered(感染後死亡者、もしくは免疫獲得者)の変動を記述する。
\begin{align}
\frac{dS}{dt} &= -\beta SI \\
\frac{dI}{dt} &= \beta SI -\gamma I \\
\frac{dR}{dt} &= \gamma I \\
\end{align}
Plotsによる可視化
このモデルを先ほどのLotka-Volterraの方程式のようにJuliaで計算する。
ここでは感染可能者Sを🌝、感染者Iを🤧、免疫獲得者Rを😷で記述し、Plotsで可視化する。
但し、総人口を1とし、人数ではなく割合で表す。
using DifferentialEquations
using Plots
sir_ode = @ode_def SIRModel begin
d🌝 = -β*🌝*🤧
d🤧 = β*🌝*🤧-γ*🤧
d😷 = γ*🤧
end β γ
parms = [0.1,0.05]
init = [0.99,0.01,0.0]
tspan = (0.0,200.0)
sir_prob = ODEProblem(sir_ode,init,tspan,parms)
sir_sol = solve(sir_prob,saveat = 0.1);
plot(sir_sol,xlabel="Time",ylabel="Number")
savefig("SIR_plots.png")
このまま実行すると、以下のように🌝と🤧が文字化けしてしまう。(豆腐◻︎と呼ばれている)
フォントやエンコーディングを変えても豆腐📛のままだった。
Pyplotによる可視化
Pyplotで可視化した場合、以下のようになる。
using DifferentialEquations
using PyCall,PyPlot
sir_ode = @ode_def SIRModel begin
d🌝 = -β*🌝*🤧
d🤧 = β*🌝*🤧-γ*🤧
d😷 = γ*🤧
end β γ
parms = [0.1,0.05]
init = [0.99,0.01,0.0]
tspan = (0.0,200.0)
sir_prob = ODEProblem(sir_ode,init,tspan,parms)
sir_sol = solve(sir_prob,saveat = 0.1);
rc("font", family="Segoe UI Emoji")
plot(sir_sol.t,sir_sol[1,:],lw=1,label="💪😀")
plot(sir_sol.t,sir_sol[2,:],lw=1,label="🦠🤧")
plot(sir_sol.t,sir_sol[3,:],lw=1,label="💉😷")
xlabel("Time")
ylabel("Number")
legend()
savefig("SIR.png")
Pyplotで可視化した場合、以下のように凡例に絵文字を使うことができる。
(ただこれはJuliaの恩恵とは言えない気がする😅)
Plotsで絵文字を使う方法や、もっと上手い方法を知っている方がいたら教えて下さい🙏。