MotorStateFeedbackRK4Simulation2.java
01 /*
02  * $Id: MotorStateFeedbackRK4Simulation2.java,v 1.3 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.DifferentialEquationSolver;
14 import org.mklab.nfc.ode.RungeKutta4;
15 import org.mklab.nfc.ode.SolverStopException;
16 import org.mklab.nfc.util.Pause;
17 import org.mklab.tool.control.system.SystemSolver;
18 import org.mklab.tool.graph.gnuplot.Canvas;
19 import org.mklab.tool.graph.gnuplot.Gnuplot;
20 
21 
22 /**
23  * モータの状態フィードバック制御のシミュレーションを4次のルンゲ・クッタ法(ソルバー)で実行するクラスです。
24  
25  @author koga
26  @version $Revision: 1.3 $, 2004/04/23
27  */
28 public class MotorStateFeedbackRK4Simulation2 {
29 
30   /**
31    * メインメソッド
32    
33    @param args コマンドライン引数
34    @throws InterruptedException 強制終了された場合
35    @throws IOException キーボードから入力できない場合
36    @throws SolverStopException ソルバーが停止された場合
37    */
38   @SuppressWarnings("nls")
39   public static void main(String[] argsthrows InterruptedException, IOException, SolverStopException {
40     MotorStateFeedback2 system = new MotorStateFeedback2();
41     Matrix x0 = new DoubleMatrix(new double[] {10}).transpose();
42     system.setInitialState(x0);
43 
44     DifferentialEquationSolver solver = new RungeKutta4();
45     solver.setTimeStep(0.1);
46     new SystemSolver(solver).solve(system, 010);
47     DoubleMatrix tt = solver.getTimeSeries();
48     DoubleMatrix xx = solver.getContinuousStateSeries();
49     DoubleMatrix io = solver.getInputOutputSeries();
50 
51     Gnuplot gnuplot = new Gnuplot();
52     Canvas canvas = gnuplot.createCanvas();
53     canvas.setHolding(true);
54     canvas.plot(tt, xx, new String[] {"x1""x2"});
55     canvas.plot(tt, io.getRowVectors(12)new String[] {"u""y"});
56     canvas.setHolding(false);
57     Pause.pause();
58     gnuplot.close();
59   }
60 }