01 /*
02 * $Id: DiscreteObserver.java,v 1.14 2008/06/26 10:10:35 koga Exp $
03 *
04 * Copyright (C) 2004 Koga Laboratory. All rights reserved.
05 *
06 */
07 package matxbook.chap21;
08
09 import org.mklab.nfc.matrix.DoubleMatrix;
10 import org.mklab.nfc.matrix.Matrix;
11 import org.mklab.tool.control.system.discrete.BaseDiscreteDynamicSystem;
12
13
14 /**
15 * 離散時間オブザーバーを表すクラスです。
16 *
17 * @author koga
18 * @version $Revision: 1.14 $, 2004/04/23
19 */
20 public class DiscreteObserver extends BaseDiscreteDynamicSystem {
21
22 /** オブザーバーの係数行列 */
23 Matrix Ahd = new DoubleMatrix(new double[] {0.223});
24 /** オブザーバーの係数行列 */
25 Matrix Bhd = new DoubleMatrix(new double[] {-1.554});
26 /** オブザーバーの係数行列 */
27 Matrix Jhd = new DoubleMatrix(new double[] {0.259});
28 /** オブザーバーの係数行列 */
29 Matrix Chd = new DoubleMatrix(new double[][] { {0}, {1}});
30 /** オブザーバーの係数行列 */
31 Matrix Dhd = new DoubleMatrix(new double[][] { {1}, {2}});
32
33 /**
34 * コンストラクター
35 */
36 public DiscreteObserver() {
37 super(1, 2, 1);
38 }
39
40 /**
41 * @see org.mklab.tool.control.system.discrete.DiscreteDynamicSystem#stateEquation(int, org.mklab.nfc.matrix.Matrix, org.mklab.nfc.matrix.Matrix)
42 */
43 @SuppressWarnings("unused")
44 public Matrix stateEquation(int k, Matrix xd, Matrix uy) {
45 Matrix u = uy.getSubVector(1, 1);
46 Matrix y = uy.getSubVector(2, 2);
47 Matrix nextXd = this.Ahd.multiply(xd).add(this.Bhd.multiply(y)).add(this.Jhd.multiply(u));
48 return nextXd;
49 }
50
51 /**
52 * @see org.mklab.tool.control.system.discrete.DiscreteDynamicSystem#outputEquation(int, org.mklab.nfc.matrix.Matrix, org.mklab.nfc.matrix.Matrix)
53 */
54 @Override
55 @SuppressWarnings("unused")
56 public Matrix outputEquation(int k, Matrix xd, Matrix y) {
57 Matrix xh = this.Chd.multiply(xd).add(this.Dhd.multiply(y));
58 return xh;
59 }
60 }
|