//--------------------------------------------------//
// //
// 加速度の直接積分プログラム //
// Direct Integration for multi date //
// //
// 2005/10/05 //
// //
// at Toyohashi Unversity of Technology //
// //
// coded by J.P. //
// //
//--------------------------------------------------//
import java.util.*;
import java.io.*;
public class DI01m{
public static void main(String args[]){
//--------------------------------------------------
// 変数の定義
//--------------------------------------------------
int ndat=10; //number of date
int ndit=2; //number of item
int i, j;
double dy, ya0, yv0, yd0;
double dltt, alph, beta;
double dat[][] = new double[ndat][ndit];
double yv[][] = new double[ndat][ndit];
double yd[][] = new double[ndat][ndit];
//--------------------------------------------------
// ファイル入出力用
//--------------------------------------------------
Scanner sc;
PrintWriter fo1, fo2, fo3; //出力用変数
//--------------------------------------------------
// データ入力
//--------------------------------------------------
try {
sc = new Scanner(new File("入力ファイル名"));
for (i = 0; i <= ndat - 1; i++){
dltt = sc.nextDouble();
// System.out.printf("%10f", dltt);
for (j = 0; j <= ndit - 1; j++){
dat[i][j] = sc.nextDouble();
}
}
sc.close();
}
catch(Exception e){
System.out.println("Error of reading: "+ e);
System.exit(1);
}
//--------------------------------------------------
// 初期条件
//--------------------------------------------------
alph = 0.5;
beta = 0.25;
dltt = 0.01;
yv[0][0] = 0.0;
yd[0][0] = 0.0;
//--------------------------------------------------
// 計算部分
//--------------------------------------------------
for (j = 0; j <= ndit - 1; j++){
for (i = 0; i <= ndat - 2; i++){
yd[i + 1][j] = alph * dat[i][j] * dltt * dltt + beta * (dat[i + 1][j] - dat[i][j]) * dltt * dltt + yv[i][j] *
dltt + yd[i][j];
yv[i + 1][j] = dat[i][j] * dltt + 0.5 * (dat[i + 1][j] - dat[i][j]) * dltt + yv[i][j];
}
}
//--------------------------------------------------
// 出力
//--------------------------------------------------
try {
fo1 = new PrintWriter(new BufferedWriter(new FileWriter("acc_out.dat")));
fo2 = new PrintWriter(new BufferedWriter(new FileWriter("vel_out.dat")));
fo3 = new PrintWriter(new BufferedWriter(new FileWriter("dis_out.dat")));
fo1.printf("%8s %15s%n", "time", "acc.");
fo1.printf("%8s %15s%n", "[s]", "[cm/s^2]");
fo2.printf("%8s %15s%n", "time", "vel.");
fo2.printf("%8s %15s%n", "[s]", "[cm/s]");
fo3.printf("%8s %15s%n", "time", "disp.");
fo3.printf("%8s %15s%n", "[s]", "[cm]");
for (i = 0; i <= ndat - 1; i++){
fo1.printf("%8f", (dltt * i));
fo2.printf("%8f", (dltt * i));
fo3.printf("%8f", (dltt * i));
for (j = 0; j <= ndit - 1; j++){
fo1.printf("%15f", dat[i][j]);
fo2.printf("%15f", yv[i][j]);
fo3.printf("%15f", yd[i][j]);
}
fo1.println();
fo2.println();
fo3.println();
}
fo1.close();
fo2.close();
fo3.close();
}
catch(Exception e) {
System.out.println("Error of writing:" + e);
System.exit(1);
}
}
}
これで、入力の加速度から速度と変位を出力できます☆
お試しアレー☆