/* <日付を入力> * 演習6.2 * f(x) = sin(x) の微分を求めるサンプルプログラム * ファイル書き込みのためにjava.ioクラスを使用. */ import java.io.*; // ファイル操作を行うためのインポート public class Differential2 { // フィールドの定義 static final int DIV_NUM = 100; // 区間の分割数(整数) static final double X_MAX = 2.0 * Math.PI; // 計算の最大値(0 - 2π) static final double MIN_DIV = X_MAX/(double)DIV_NUM; // 微小区間の定義 // メインメソッド public static void main(String [] args) { try { // 変数の定義 double dx = MIN_DIV; // xの微小区間 double x = 0.0; // 独立変数 double dy = 0.0; // 1階の導関数の値 double d2y = 0.0; // 2階の導関数の値 double d3y = 0.0; // 3階の導関数の値 // 定義関数の計算用 double y0 = 0.0; double y1 = 0.0; double y2 = 0.0; double y3 = 0.0; // ファイル書き込みオブジェクトの作成 FileWriter fout = new FileWriter("sin.txt"); // defineFunctionメソッドを使うためにオブジェクトを作成 Differential2 differential = new Differential2(); // 差分商による微分計算 for (int i=0; i<=DIV_NUM; i++) { y0 = differential.defineFunction(x); y1 = differential.defineFunction(x + dx); y2 = differential.defineFunction(x + 2*dx); y3 = differential.defineFunction(x + 3*dx); // 1階差分商の計算 dy = (y1 - y0) / dx; // 2階差分商の計算 d2y = (y2 - 2*y1 + y0) / (dx*dx); // 3階差分商の計算 d3y = (y3 - 3*y2 + 3*y1 - y0) / (dx*dx*dx); // 計算結果のファイル出力 fout.write(x + " " + y0 + " " + dy + " " + d2y + " " + d3y + " " + "\n"); // 計算結果の標準出力(確認用) System.out.println(x + " " + y0 + " " + dy + " " + d2y + " " + d3y + " " + "\n"); x += dx; } // ファイルを閉じる fout.close(); } catch (Exception e) { System.out.println(e); } } // main // 微分する関数の定義 double defineFunction(double x) { return Math.sin(x); } } // class Differential2