常微分方程式


ルンゲ・クッタ法 ・ ミルン法 ・ オイラー法

1.ルンゲ・クッタ法

  1階常微分方程式 dy/dx=f(x,y) を初期条件 y(x0)=y0 のもとで求める。
  求めるべき区間を間隔dxでn分割する。
        x0, x1=x0+dx, x2=x0+2dx,・・・, xn=x0+ndx
  において、y0に対する近似増分kを補助増分k1,k2,k3,k4のつぎのように重み付き平均値として求め
        k=1/6(k1+2k2+2k3+k4)
  これよりy1を求める。
        y1=y0+(k1+k2+k3+k4)/6

        k1=f(x0,y0)dx
        k2=f(x0+dx/2,y0+k1/2)dx
        k3=f(x0+dx/2,y0+k2/2)dx
        k4=f(x0+dx,y0+k3)dx
  一般に
        yn+1=yn+(k1+2k2+2k3+k4)/6

        k1=f(xn,yn)dx
        k2=f(xn+dx/2,yn+k1/2)dx
        k3=f(xn+dx/2,yn+k2/2)dx
        k4=f(xn+dx,yn+k3)dx
  このようにynを求める方法をルンゲ・クッタ法という。


2.ミルン法

  求めるべき区間を間隔dxでn分割する。
        x0,x1=x0+dx, x2=x0+2dx,・・・, xn=x0+ndx
  初期条件の(x0,y0)から(x1,y1),(x2,y2),(x3,y3)をルンゲクッタ法で求める。次式で予測子y'4を求める。
        y'4=y0+4/3dx{2f(x1,y1)-f(x2,y2)+2f(x3,y39}
  この予測子を用いてy4求める。
        y4=y2+dx/3{f(xn,yn)+4f(x3,y3)+f(x4,y)}
  一般に予測子が決まり
        yn+1=yn-3+4/3dx{2f(xn-2,yn-2)+f(xn-1,yn-1)+2f(xn,yn)}
  yの値が決まる。
        yn+1=yn-1+dx/3{f(xn-1,yn-1)+4f(xn,yn)+f(xn+1,yn+1)}
  と表される式によって求める方法をミルン法という。


3.オイラー法

  オイラー法はテイラー展開の1次近似式であるが、微分方程式の簡単な近似値を求めるとときに用いられる。オイラー法の反復公式は、次のような微分方程式と初期条件
        y'=dy/dx=f(x,y), y(x0)=y0
  が与えられているとき、y(xnのテイラー展開より求められる。いま、
xn=xn-1+hとして、y(xn-1+h)のテイラー展開は
        y(xn)=yn=y(xn-1+h)=y(xn-1)+hy'(xn-1)+・・・
  と著される。上式の第2項までとり、y'に式 (1) を用いると
        y(xn)=y(xn-1)+hf(xn-1,yn-1)
  と表される式によって順次yを求める方法をオイラー法という。




  操作方法
    1, ルンゲ・クッタ法 ・ ミルン法 ・ オイラー法を選択してください。
    2, f(x,y)=のウインドウにx,yの関数を入力して下さい。
       ※使用する演算子は +, -, *, /, ^ です。
       ※入力できる関数は、tan[x],sin[x],cos[x],log[x],exp[x],sqr[x],abs[x],Int[x]です。
    3, x(min),x(max),y(ini),dx を入力して下さい。
    4, <実行>を押すと実行されます。

 runge.java runge.class

 Labo_Util.java Labo_Util.class

 zValue.java  zValue.class
 こちらの入力した文字列を関数として利用するソースコードとクラスは大西義一氏の作成したプログラムです。
 大西義一氏の許可を受けて著作権を明示した上で、当研究室で作成するJAVAプログラムに利用させていただいております。(大西氏のホームページ