LoginSignup
4
2

More than 1 year has passed since last update.

[備忘録]Juliaで絵文字プログラミング

Posted at

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とし、人数ではなく割合で表す。

SIR_plots.jl
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")

このまま実行すると、以下のように🌝と🤧が文字化けしてしまう。(豆腐◻︎と呼ばれている)
フォントやエンコーディングを変えても豆腐📛のままだった。
SIR_plots.png

Pyplotによる可視化

Pyplotで可視化した場合、以下のようになる。

SIR.jl
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の恩恵とは言えない気がする😅)

SIR.png

Plotsで絵文字を使う方法や、もっと上手い方法を知っている方がいたら教えて下さい🙏。

参考

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2