Obsm.java

/*
 * $Id: Obsm.java,v 1.5 2008/03/08 00:17:41 koga Exp $
 *
 * Copyright (C) 2004 Koga Laboratory. All rights reserved.
 */
package org.mklab.tool.control;

import org.mklab.nfc.matrix.ComplexNumericalMatrix;
import org.mklab.nfc.matrix.DoubleMatrix;
import org.mklab.nfc.matrix.RealNumericalMatrix;
import org.mklab.nfc.scalar.ComplexNumericalScalar;
import org.mklab.nfc.scalar.RealNumericalScalar;


/**
 * 可観測性行列を求めるクラスです。
 * 
 * <p>Observability matrix
 * 
 * @author koga
 * @version $Revision: 1.5 $
 * @see org.mklab.tool.control.Ctrm
 * @see org.mklab.tool.control.Obsf
 */
public class Obsm {

  /**
   * 可観測行列
   * 
   * <pre><code> N = [[C][CA][CA&circ;2 ...]] </code></pre>
   * 
   * を返します。
   * 
   * @param A システム行列A(n*n)
   * @param C システム行列B(l*n)
   * @return 可観測行列
   * 
   */
  public static DoubleMatrix obsm(DoubleMatrix A, DoubleMatrix C) {
    return Ctrm.ctrm(A.conjugateTranspose(), C.conjugateTranspose()).conjugateTranspose();
  }

  /**
   * 可観測行列
   * 
   * <pre><code> N = [[C][CA][CA&circ;2 ...]] </code></pre>
   * 
   * を返します。
   * 
   * @param <RS> スカラーの型
   * @param <RM> 行列の型
   * @param <CS> 複素スカラーの型
   * @param <CM> 複素行列の型
   * @param A システム行列A(n*n)
   * @param C システム行列B(l*n)
   * @return 可観測行列
   * 
   */
  public static <RS extends RealNumericalScalar<RS, RM, CS, CM>, RM extends RealNumericalMatrix<RS, RM, CS, CM>, CS extends ComplexNumericalScalar<RS, RM, CS, CM>, CM extends ComplexNumericalMatrix<RS, RM, CS, CM>> RM obsm(
      RM A, RM C) {
    return Ctrm.ctrm(A.conjugateTranspose(), C.conjugateTranspose()).conjugateTranspose();
  }

}