Tfn2ss.java
/*
* $Id: Tfn2ss.java,v 1.17 2008/03/24 23:45:43 koga Exp $
*
* Copyright (C) 2004 Koga Laboratory. All rights reserved.
*/
package org.mklab.tool.control;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.mklab.nfc.matrix.ComplexNumericalMatrix;
import org.mklab.nfc.matrix.DoubleMatrix;
import org.mklab.nfc.matrix.RealNumericalMatrix;
import org.mklab.nfc.scalar.AnyRealRationalPolynomial;
import org.mklab.nfc.scalar.ComplexNumericalScalar;
import org.mklab.nfc.scalar.DoubleRationalPolynomial;
import org.mklab.nfc.scalar.RealNumericalScalar;
/**
* 伝達関数(有理多項式)から状態空間表現に変換するクラスです。
*
* <p> Transfer function to state-space conversion
*
* @author koga
* @version $Revision: 1.17 $
* @see org.mklab.tool.control.Tfn2tf
* @see org.mklab.tool.control.Tfn2tfm
* @see org.mklab.tool.control.Tfn2zp
* @see org.mklab.tool.control.Ss2tfn
*/
public class Tfn2ss {
/**
* 伝達関数が<code>g</code>であるシステムの状態空間表現
*
* <pre><code> . x = Ax + Bu y = Cx + Du </code></pre>
*
* を求めます。 係数行列<code>A,B,C,D</code>は、可制御正準形で返されます。
*
* @param g 伝達関数
* @return {A,B,C,D} (状態空間表現) state space representation
*/
public static List<DoubleMatrix> tfn2ss(DoubleRationalPolynomial g) {
DoubleMatrix numerator = g.getNumerator().getCoefficients().flipLeftRight();
DoubleMatrix denominator = g.getDenominator().getCoefficients().flipLeftRight();
List<DoubleMatrix> tmp = Tf2ss.tf2ss(numerator, denominator);
DoubleMatrix A = tmp.get(0);
DoubleMatrix B = tmp.get(1);
DoubleMatrix C = tmp.get(2);
DoubleMatrix D = tmp.get(3);
return new ArrayList<>(Arrays.asList(new DoubleMatrix[] {A, B, C, D}));
}
/**
* 伝達関数が<code>g</code>であるシステムの状態空間表現
*
* <pre><code> . x = Ax + Bu y = Cx + Du </code></pre>
*
* を求めます。 係数行列<code>A,B,C,D</code>は、可制御正準形で返されます。
*
* @param g 伝達関数
* @return {A,B,C,D} (状態空間表現) state space representation
* @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>> List<RM> tfn2ss(
AnyRealRationalPolynomial<RS, RM, CS, CM> g) {
RM numerator = g.getNumerator().getCoefficients().flipLeftRight();
RM denominator = g.getDenominator().getCoefficients().flipLeftRight();
List<RM> tmp = Tf2ss.tf2ss(numerator, denominator);
RM A = tmp.get(0);
RM B = tmp.get(1);
RM C = tmp.get(2);
RM D = tmp.get(3);
List<RM> abcd = new ArrayList<>();
abcd.add(A);
abcd.add(B);
abcd.add(C);
abcd.add(D);
return abcd;
}
// /**
// * 伝達関数が<code>g</code>であるシステムの状態空間表現
// *
// * <pre><code> . x = Ax + Bu y = Cx + Du </code></pre>
// *
// * を求めます。 係数行列<code>A,B,C,D</code>は、可制御正準形で返されます。
// *
// * @param <RPS> 実多項式の型
// * @param <RPM> 実多項式行列の型
// * @param <CPS> 複素多項式の型
// * @param <CPM> 複素多項式行列の型
// * @param <RRS> 実有理多項式の型
// * @param <RRM> 実有理多項式行列の型
// * @param <CRS> 複素有理多項式の型
// * @param <CRM> 複素有理多項式行列の型
// * @param <RES> 実係数スカラーの型
// * @param <REM> 実係数行列の型
// * @param <CES> 複素係数スカラーの型
// * @param <CEM> 複素係数行列の型
// * @param g 伝達関数
// * @return {A,B,C,D} (状態空間表現) state space representation
// */
// public static <RPS extends
// RealPolynomial<RPS,RPM,CPS,CPM,RRS,RRM,CRS,CRM,RES,REM,CES,CEM>, RPM extends
// RealPolynomialMatrix<RPS,RPM,CPS,CPM,RRS,RRM,CRS,CRM,RES, REM,CES,CEM>, CPS
// extends ComplexPolynomial<RPS,RPM,CPS,CPM,RRS,RRM,CRS,CRM,RES, REM, CES,
// CEM>, CPM extends
// ComplexPolynomialMatrix<RPS,RPM,CPS,CPM,RRS,RRM,CRS,CRM,RES,REM,CES,CEM>, RRS
// extends
// RealRationalPolynomial<RPS,RPM,CPS,CPM,RRS,RRM,CRS,CRM,RES,REM,CES,CEM>, RRM
// extends
// RealRationalPolynomialMatrix<RPS,RPM,CPS,CPM,RRS,RRM,CRS,CRM,RES,REM,CES,CEM>,
// CRS extends
// ComplexRationalPolynomial<RPS,RPM,CPS,CPM,RRS,RRM,CRS,CRM,RES,REM,CES,CEM>,
// CRM extends
// ComplexRationalPolynomialMatrix<RPS,RPM,CPS,CPM,RRS,RRM,CRS,CRM,RES,REM,CES,CEM>,
// RES extends RealNumericalScalar<RES,REM,CES,CEM>, REM extends
// RealNumericalMatrix<RES,REM,CES,CEM>, CES extends
// ComplexNumericalScalar<RES,REM,CES,CEM>, CEM extends
// ComplexNumericalMatrix<RES,REM,CES,CEM>> List<REM> tfn2ss(
// RRS g) {
// REM numerator = g.getNumerator().getCoefficients().flipLeftRight();
// REM denominator = g.getDenominator().getCoefficients().flipLeftRight();
// List<REM> tmp = Tf2ss.tf2ss(numerator, denominator);
// REM A = tmp.get(0);
// REM B = tmp.get(1);
// REM C = tmp.get(2);
// REM D = tmp.get(3);
// List<REM> ans = new ArrayList<>();
// ans.add(A);
// ans.add(B);
// ans.add(C);
// ans.add(D);
// return ans;
// }
}