DoubleBlockContinuousStaticSystem.java

  1. /**
  2.  * $Id$
  3.  *
  4.  * Copyright (C) 2004-2005 Koga Laboratory. All rights reserved.
  5.  */

  6. package org.mklab.tool.control.system.continuous;

  7. import java.util.List;

  8. import org.mklab.nfc.matrix.DoubleMatrix;
  9. import org.mklab.nfc.ode.SolverStopException;
  10. import org.mklab.tool.control.system.DoubleSystemOperator;


  11. /**
  12.  * 連続代数方程式で表現されるブロック連続時間静的システムを表すクラスです。
  13.  *
  14.  * @author koga
  15.  * @version $Revision$
  16.  */
  17. public class DoubleBlockContinuousStaticSystem extends DoubleBlockContinuousSystem implements DoubleContinuousStaticSystem {

  18.   /**
  19.    * 新しく生成された<code>BlockContinuousStaticSystem</code>オブジェクトを初期化します。
  20.    *
  21.    * @param elements 隣接行列
  22.    * @param inputNodes 入力ノード番号のリスト(番号は1から始まります)
  23.    * @param outputNodes 出力ノード番号のリスト(番号は1から始まります)
  24.    */
  25.   public DoubleBlockContinuousStaticSystem(final DoubleSystemOperator[][] elements, final List<Integer> inputNodes, final List<Integer> outputNodes) {
  26.     super(elements, inputNodes, outputNodes);
  27.     setDynamic(false);
  28.   }

  29.   /**
  30.    * {@inheritDoc}
  31.    */
  32.   public DoubleMatrix outputEquation(final double t, final DoubleMatrix u) throws SolverStopException {
  33.     resetNodeValue();
  34.     setInputNodeValue(u);
  35.     calcNodeValue(t);
  36.     return getOutputNodeValue();
  37.   }

  38.   /**
  39.    * {@inheritDoc}
  40.    */
  41.   public DoubleMatrix outputEquation(final double t) throws SolverStopException {
  42.     resetNodeValue();
  43.     setInputNodeValue(new DoubleMatrix(getInputSize(), 1));
  44.     calcNodeValue(t);
  45.     return getOutputNodeValue();
  46.   }

  47.   /**
  48.    * {@inheritDoc}
  49.    */
  50.   public DoubleMatrix inputOutputEquation(final double t) throws SolverStopException {
  51.     final DoubleMatrix u = new DoubleMatrix(getInputSize(), 1);
  52.     final DoubleMatrix y = outputEquation(t);
  53.     return u.appendDown(y);
  54.   }
  55. }