DiscreteObserver.java
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(121);
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(11);
46     Matrix y = uy.getSubVector(22);
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 }