Motor2ObserverRKFSimulationAuto.java
01 /*
02  * $Id: Motor2ObserverRKFSimulationAuto.java,v 1.4 2008/02/02 03:06:25 koga Exp $
03  *
04  * Copyright (C) 2004 Koga Laboratory. All rights reserved.
05  *
06  */
07 package matxbook.chap21;
08 
09 import java.io.IOException;
10 
11 import org.mklab.nfc.matrix.DoubleMatrix;
12 import org.mklab.nfc.matrix.Matrix;
13 import org.mklab.nfc.ode.DifferentialEquationAutoSolver;
14 import org.mklab.nfc.ode.RungeKuttaFehlberg;
15 import org.mklab.nfc.util.Pause;
16 import org.mklab.tool.control.system.SystemSolver;
17 import org.mklab.tool.graph.gnuplot.Canvas;
18 import org.mklab.tool.graph.gnuplot.Gnuplot;
19 
20 
21 /**
22  * モータと連続時間オブザーバの結合システムのシミュレーション計算をRKF法(誤差指定)で行うサンプルです。
23  @author koga
24  @version $Revision: 1.4 $, 2004/04/23
25  */
26 public class Motor2ObserverRKFSimulationAuto {
27 
28   /**
29    * メインメソッド
30    
31    @param args コマンドライン引数
32    @throws InterruptedException 強制終了された場合
33    @throws IOException キーボードから入力できない場合
34    */
35   @SuppressWarnings("nls")
36   public static void main(String[] argsthrows InterruptedException, IOException {
37     Motor2ContinuousObserver2 system = new Motor2ContinuousObserver2();
38     Matrix x0 = new DoubleMatrix(new double[] {00}).transpose();
39     Matrix z0 = new DoubleMatrix(new double[] {1});
40     Matrix initialState = x0.appendDown(z0);
41     system.setInitialState(initialState);
42 
43     DifferentialEquationAutoSolver solver = new RungeKuttaFehlberg();
44     solver.setTolerance(1.0E-5);
45     new SystemSolver(solver).solveAuto(system, 010);
46     DoubleMatrix tt = solver.getTimeSeries();
47     DoubleMatrix xx = solver.getContinuousStateSeries();
48     DoubleMatrix io = solver.getInputOutputSeries();
49 
50     Gnuplot gnuplot = new Gnuplot();
51     Canvas canvas = gnuplot.createCanvas();
52     canvas.setHolding(true);
53     canvas.plot(tt, xx.getRowVectors(12)new String[] {"x1""x2"});
54     canvas.plot(tt, io.getRowVectors(34)new String[] {"xh1""xh2"});
55     canvas.setHolding(false);
56     Pause.pause();
57     gnuplot.close();
58   }
59 }