ł邯ǃeLXgx[Xʓ|Ȃ̂ŏȗ 
 
QNb^|}[X@ 
QNb^@͗^ꂽ֐fȏꍇ͖Ȃ 
ɕsA_֐̌`Gȕ͌vZłȂ 
ŃQNb^@̊{̂悤ɕό` 
k0=h*(f(xi,yi)/3 
k1=h*f(xi+h/3,yi+k0)/3 
k2=h*f(xi+h/3,yi+k0/2+k1/2)/3 
k3=h*f(xi+h/2,yi+3/8*k0+9/8*k2)/3 
k4=h*f(xi+h,yi+3/2*k0-9/2*k2+6*k3)/3 
yi+1=yi+(k0+4*k3+k4)/2+O(h^5) 
ŋe덷ÂƂꍇΌ덷'͈ȉ̎ŌvZł 
'=(k0-9/2*k2+4*k3-1/2*k4)/5 
Âƃ'Ƃ̊֌W͌vZݕhƊ֘A 
|'|ÂȂyi+1͌vZłƂɂȂ邪 
|'|/32Ȃ΍ݕQ{ɂł 
|'|/32ȂΓŌvZ 
|'|ÂȂ΍̌vZsK̂ōݕh=h/2 
ɂčēx'vZ|'|Â̏܂ŌJԂ 

public double[] RungeKuttaGill(double Y0,double XST,double DX,int N)
   { double[]Y = new double[N]; double X; int i; double S2=Math.sqrt(2);
     double A1 = 1 / 4 - 1 / (2*S2);  double A2 = 1/2 - 1 /(2* S2);
     double B1 = 1 / S2            ;  double B2 = 1 + 1 / S2;
     double C1 =  2 - 2 / S2       ;  double C2 = 2 + 2 / S2;
  
     for(Y[0] = Y0, X = XST, i = 1; i < N; i++, X += DX)
     {
       double K1 = g(X, Y[i - 1]);
       double K2 = g(X + DX / 2, Y[i - 1] + DX * K1 / 2                );
       double K3 = g(X + DX / 2, Y[i - 1] - A1 * DX * K1 + A2 * DX * K2);
       double K4 = g(X + DX    , Y[i - 1] - B1 * DX * K2 + B2 * DX * K3);
       Y[i] = Y[i - 1] + (K1 + C1 * K2 + C2 * K3 + K4) * DX / 6;
     }
     return Y;
   }
