ki(1)=fi(x,y1,y2,...,yn) ki(2)=fi(x+h/2,y1+h*k1(1)/2,y2+h*k2(1)/2,...,yn+h*kn(1)/2) ki(3)=fi(x+h,y1-h*k1(1)+2h*k1(2),y2-h*k2(1)+2h*k2(2),...,yn-h*kn(1)+2h*kn(2)) |
sphbes.java |
---|
... // クラスの宣言 public class sphbes extends java.applet.Applet{ ... // ペイント・メソッドで、数値計算をやらしている public void paint(Graphics g){ ... // rngkt クラスを継承したクラスのオブジェクト変数 myrngkt rngktObj; ... // x の初期値 x = 1.0; // y の初期値 y[0] = Math.sin(x)/x; // y' の初期値 y[1] = (x * Math.cos(x) - Math.sin(x)) / (x*x); ... // ルンゲクッタ・クラスのサブクラスのオブジェクトを生成 rngktObj = new myrngkt(); ... // x の値が 10 以上か、画面の外に出たら計算を終了 while(x < 10.0 && StringHeight < Sheight){ // ルンゲクッタ法による近似計算を実施 ans = rngktObj.rngkt_func(x,y,h); y[0] = ans[0]; y[1] = ans[1]; // 理論解の値を計算 x = x + h; z = Math.sin(x)/x; zz = (x * Math.cos(x) - Math.sin(x)) / (x*x); // y の値の理論解と近似解の差を計算 dz = y[0] - z; ... } } |
myrngkt.java |
// ルンゲクッタ法を継承したサブクラス public class myrngkt extends rngkt{ ... public double[] fncrgk(double x,double y[]){ ... // ここが、ルンゲクッタ法の k の値 ans[0] = y[1]; ans[1] = -(y[0] + (2.0 * y[1])/x); // 戻して終了 return ans; } } |