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);
}
}