Tf2tfn.java

/*
 * $Id: Tf2tfn.java,v 1.9 2007/04/24 23:19:39 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.AnyRealPolynomial;
import org.mklab.nfc.scalar.AnyRealRationalPolynomial;
import org.mklab.nfc.scalar.ComplexNumericalScalar;
import org.mklab.nfc.scalar.DoublePolynomial;
import org.mklab.nfc.scalar.DoubleRationalPolynomial;
import org.mklab.nfc.scalar.RealNumericalScalar;


/**
 * 伝達関数(係数からなる行列)か伝達関数(有理多項式)に変換するクラスです。
 * 
 * <p>Transfer function to transfer function conversion
 * 
 * @author koga
 * @version $Revision: 1.9 $
 * @see org.mklab.tool.control.Tf2tfm
 * @see org.mklab.tool.control.Tf2ss
 * @see org.mklab.tool.control.Tf2zp
 * @see org.mklab.tool.control.Tfn2tf
 */
public class Tf2tfn {

  /**
   * 1入力多出力システムの<code>i</code>番目の入力から出力までの 伝達関数を求めます。
   * 
   * @param numeratorCoefficient 伝達関数の分子多項式の係数
   * @param denominatorCoefficient 伝達関数の分母多項式の係数
   * @param inputNumber 入力番号
   * @return 伝達関数 (transfer function)
   */
  public static DoubleRationalPolynomial tf2tfn(DoubleMatrix numeratorCoefficient, DoubleMatrix denominatorCoefficient, int inputNumber) {
    final DoublePolynomial numerator = new DoublePolynomial(numeratorCoefficient.getRowVector(inputNumber));
    final DoublePolynomial denominator = new DoublePolynomial(denominatorCoefficient);
    return new DoubleRationalPolynomial(numerator, denominator);
  }

  /**
   * 1入力1出力システム
   * 
   * <pre><code> num(s) g(s) = ------- den(s) </code></pre>
   * 
   * の伝達関数を分子多項式の係数<code>num</code>と 分母多項式の係数<code>den</code>から求めます。
   * 
   * @param numeratorCoefficient 伝達関数の分子多項式の係数
   * @param denominatorCoefficient 伝達関数の分母多項式の係数
   * @return 伝達関数 (transfer function)
   */
  public static DoubleRationalPolynomial tf2tfn(DoubleMatrix numeratorCoefficient, DoubleMatrix denominatorCoefficient) {
    final int inputNumber = 1;
    return tf2tfn(numeratorCoefficient, denominatorCoefficient, inputNumber);
  }

  /**
   * 1入力多出力システムの<code>i</code>番目の入力から出力までの 伝達関数を求めます。
   * 
   * @param numeratorCoefficient 伝達関数の分子多項式の係数
   * @param denominatorCoefficient 伝達関数の分母多項式の係数
   * @param inputNumber 入力番号
   * @return 伝達関数 (transfer function)
   * @param <RS> type of real scalar
   * @param <RM> type of real matrix
   * @param <CS> type of complex scalar
   * @param <CM> type of complex matrix
   */
  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>> AnyRealRationalPolynomial<RS, RM, CS, CM> tf2tfn(
      RM numeratorCoefficient, RM denominatorCoefficient, int inputNumber) {
    final AnyRealPolynomial<RS, RM, CS, CM> numerator = new AnyRealPolynomial<>(numeratorCoefficient.getRowVector(inputNumber));
    final AnyRealPolynomial<RS, RM, CS, CM> denominator = new AnyRealPolynomial<>(denominatorCoefficient);
    return new AnyRealRationalPolynomial<>(numerator, denominator);
  }

  /**
   * 1入力1出力システム
   * 
   * <pre><code> num(s) g(s) = ------- den(s) </code></pre>
   * 
   * の伝達関数を分子多項式の係数<code>num</code>と 分母多項式の係数<code>den</code>から求めます。
   * 
   * @param numeratorCoefficient 伝達関数の分子多項式の係数
   * @param denominatorCoefficient 伝達関数の分母多項式の係数
   * @return 伝達関数 (transfer function)
   * @param <RS> type of real scalar
   * @param <RM> type of real matrix
   * @param <CS> type of complex scalar
   * @param <CM> type of complex matrix
   */
  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>> AnyRealRationalPolynomial<RS, RM, CS, CM> tf2tfn(
      RM numeratorCoefficient, RM denominatorCoefficient) {
    final int inputNumber = 1;
    return tf2tfn(numeratorCoefficient, denominatorCoefficient, inputNumber);
  }

}