/* * <日付を入力> * 例題6.7 * オイラー法による近似解を求めるクラス. * DifferentialEquationSolver.java * ファイル書き込みのためにjava.ioクラスを使用. */ import java.io.*; // ファイル操作を行うためのインポート public class DifferentialEquationSolver { // フィールド int division_number; // 分割数 double initial_x; // xの初期値 double initial_y; // yの初期値 double maximum_x; // xの最大値 // コンストラクタ DifferentialEquationSolver(int n, double xi, double yi, double xm) { division_number = n; // 分割数を代入 initial_x = xi; // xの初期値を代入 initial_y = yi; // yの初期値を代入 maximum_x = xm; // xの最大値を代入 } // 関数の定義 f(x, y) = 2x public double defineFunction(double x, double y) { return 2*x; } // オイラー法を行うメソッド double calculateEuler() { try { // ファイル書き込みの失敗等による例外処理を考慮 // ファイル書き込みオブジェクトの作成 FileWriter fout = new FileWriter("euler.txt"); /* 初期値および区間幅の設定 */ double x = initial_x; // xの初期値を代入 double y = initial_y; // yの初期値を代入 double h = (maximum_x - initial_x) / (double)division_number; // 区分幅の計算 /* オイラー法による計算 */ for (int i=1; i<=division_number; i++) { // y = y + h * f(x, y).関数f(x, y)は,defineFunctionメソッドで定義 y += h * defineFunction(x, y); // 次のxの値を代入. x = initial_x + i * h; // 計算結果をファイルへ出力 fout.write(x + " " + y + "\n"); // 計算結果の確認のため,標準出力へ出力 System.out.println(x + " " + y); } // ファイルを閉じる fout.close(); return y; } catch (Exception e) { // 例外処理 System.out.println(e); return -1; } } // double calculateEuler() } // class DifferentialEquationSolver