JAVA でルンゲクッタ法による近似数値計算をしよう

ルンゲクッタ法を計算する Java クラスです。

微分方程式などをルンゲクッタ法による近似計算できます。


謝辞
大学での Fortran77 での計算機実習でのコードを Java 化しただけです。

青山学院大学理工学部物理学科の先生方に厚く感謝したいと思います。


ルンゲクッタ法とは


yi(x)
(i=1,2,3,....,n)

の微分式が
y'i(x) = fi(x,y1(x),y2(x),...,yn(x))

として与えられた時、
yi(x+h) = yi(x) + h*(ki(1)+4*ki(2)+ki(3))

が近似解となる。

誤差は、h4である。

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


でーす。


サンプル


y'' + 2y'/x + y = 0

について、近似解と理論解を比べて見る。

理論解は、
sin(x)/x

で、以下の Applet の z の値がそれ。

近似解をルンゲクッタ法で計算している。y の値がそれ。

y と z の差が h4 程度でしょ。
h=0.1 で計算 さて、ソースコードは、sphbes.java(メイン) と myrngkt.java(ルンゲクッタ法のクラス rngkt を継承したクラス) です。

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;
}
}



著作権は保持しません。(とりあえず...)
しかし、プログラムの実行においては、各自の責任で行ってください。
プログラムの改変については、各自の責任で行う分については、自由に行って結構です。(参考になりましたメールをくれると、うれしい...(*^_^*))


download
All files set(ソースファイルと、クラスファイルと、サンプルHTML)
rngkt.lzh LZH file (8,544byte)



動作確認ブラウザ
Netscape Navigator 3.04en for MS-Windows2000
------------NG(言語モードが Latin の場合 OK{getParameter() の問題})
Netscape Communicator 4.6jp for MS-Windows9x
?
Netscape Communicator 4.75jp for MS-Windows2000
?
Netscape 6jp for MS-Windows2000
?
Internet Explorer 4.72.3110.1 SP1 for MS-Windows9x
?
Internet Explorer 4.72.2106.9 for MS-WindowsNT4.0
?
Internet Explorer 5.00.2920.0000 for MS-Windows2000
?
Netscape Communicator 4.7jp for MacOS9.04
?



ソースの説明

省略

サンプル・ページ




mail to active@window.goukaku.com