/********************************/ /* 台形則 */ /* coded by Y.Suganuma */ /********************************/ import java.io.*; class Daikei { static void main(String args[]) throws IOException { double y; Kansu kn = new Kansu(0); y = App.daikei(0.0, 0.5*Math.PI, 100, kn); System.out.println("result " + y); } } ------------------------------------------ /********************/ /* 関数値の計算 */ /********************/ class Kansu { private int sw; // コンストラクタ Kansu (int s) {sw = s;} // double型関数 double snx(double x) { double y = 0.0; switch (sw) { // 関数値(f(x))の計算 case 0: y = Math.sin(x); break; } return y; } } ---------------------------------------- /****************************/ /* 科学技術系算用の手法 */ /****************************/ class App { /**********************************************************/ /* 数値積分(台形則) */ /* x1 : 下限 */ /* x2 : 上限 */ /* n : 分割数 */ /* kn : 関数値を計算するクラスのオブジェクト */ /* return : 積分値 */ /**********************************************************/ static double daikei(double x1, double x2, int n, Kansu kn) { double s = 0.0; double x, h; int i1; h = (x2 - x1) / n; x = x1; for (i1 = 0; i1 < n-1; i1++) { x += h; s += kn.snx(x); } s = 0.5 * h * (kn.snx(x1) + kn.snx(x2) + 2.0 * s); return s; } }