MATLAB によるプログラムを Julia で書いてみた。
若干簡潔に書けるのかな?
using Plots
# オイラー法
function EulerMethod(func, x, y0)
# func:微分方程式の関数
# x:積分範囲
# y0:初期値
ncol = length(y0)
nrow = length(x)
y = zeros(nrow, ncol);
y[1, :] .= y0 # 初期値の代入
h = x[2] - x[1] # 刻み幅
for k = 1:nrow-1
y[k+1, :] = y[k, :] .+ h .* func(y[k, :]) # 前進差分
end
y;
end
# 微分方程式
func(y) = -2*y
y0 = 1 # 初期値
h = 0.01 # 刻み幅
x = 0:h:10 # 積分範囲
y1 = exp.(-2x); # 真の解
y2 = EulerMethod(func, x, y0) # 近似解
gr(fontfamily="IPAMincho", foreground_color_legend = nothing)
plot(x, y1, label="真の解")
plot!(x, y2, label="近似解")
savefig("a.png")
# ファン・デル・ポール方程式
func(y) = [y[2], 2(1 - y[1]^2) * y[2] - y[1]]
y0 = [1, 0] # 初期値
h = 0.01 # 刻み幅
x = 0:h:10 # 積分範囲
y = EulerMethod(func, x, y0) # 近似解
plot(x, y) # 近似解の描画
savefig("b.png")