LoginSignup
1
1

More than 1 year has passed since last update.

Julia でオイラー法を実装してみる

Posted at

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")

スクリーンショット 2022-10-06 21.16.34.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")

スクリーンショット 2022-10-06 21.16.52.png

1
1
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
1
1