HarmonicOscillator.java

HarmonicOscillator.java
package pendulum;
import
import
import
import
import
import
java.awt.geom.Point2D;
java.io.BufferedWriter;
java.io.IOException;
java.util.List;
myLib.rungeKutta.Dynamics;
myLib.utils.FileIO;
/**
* 調和振動子
* @author tadaki
*/
public class HarmonicOscillator extends Dynamics {
private final double k;//omega^2に相当するパラメタ
/**
* コンストラクタ
*
* @param x 振幅の初期値
* @param v 速度の初期値
* @param k 角速度の2乗に相当するパラメタ
*/
public HarmonicOscillator(double x, double v, double k) {
super(2, x, v);//スーパークラスによる初期化
this.k = k;
//微分方程式の記述
equation = (double xx, double[] yy) -> {
double dy[] = new double[numVar];
dy[0] = yy[1];// dx/dt = v
dy[1] = -k * yy[0];// dv/dt = - omega^2 x
return dy;
};
}
/**
* @param args the command line arguments
* @throws java.io.IOException
*/
public static void main(String[] args) throws IOException {
HarmonicOscillator sys = new HarmonicOscillator(0., 1., 1.);
double t = 50.;
int nstep = 10000;
// 時間50を10000に区分して、積分を実行
// 結果を(t,x)のリストで得る
1/2 ページ
HarmonicOscillator.java
List<Point2D.Double> points = sys.evolution(t, nstep);
// 結果をファイルへ出力
BufferedWriter out = FileIO.openWriter("output.csv");
for (Point2D.Double p : points) {
FileIO.writeSSV(out, p.x,p.y);
}
}
}
2/2 ページ