Zp2tfn.java
/*
* $Id: Zp2tfn.java,v 1.18 2008/05/12 10:47:58 koga Exp $
*
* Copyright (C) 2004 Koga Laboratory. All rights reserved.
*/
package org.mklab.tool.control;
import java.util.List;
import org.mklab.nfc.matrix.DoubleComplexMatrix;
import org.mklab.nfc.matrix.DoubleMatrix;
import org.mklab.nfc.scalar.DoubleRationalPolynomial;
/**
* 極とゼロ点から伝達関数(有理多項式)に変換するクラスです。
*
* <p>Zero-pole to transfer function conversion
*
* @author koga
* @version $Revision: 1.18 $
* @see org.mklab.tool.control.Zp2tf
* @see org.mklab.tool.control.Zp2tfm
* @see org.mklab.tool.control.Zp2ss
* @see org.mklab.tool.control.Tfn2zp
*/
public class Zp2tfn {
/**
* 極<code>p</code>、ゼロ点<code>z</code>、ゲイン<code>k</code>である1入力1出力システム
*
* <pre><code> (s-z1)(s-z2)...(s-zn) g(s) = k --------------------- (s-p1)(s-p2)...(s-pn) </code></pre>
*
* の伝達関数を返します。
*
* @param zeros ゼロ点の集合
* @param poles 極の集合
* @param gain ゲイン
* @return 伝達関数 (transfer function)
*/
public static DoubleRationalPolynomial zp2tfn(DoubleComplexMatrix zeros, DoubleComplexMatrix poles, DoubleMatrix gain) {
int outputNumber = 1;
return zp2tfn(zeros, poles, gain, outputNumber);
}
/**
* 1入力多出力システムの<code>inputNumber</code>番目の入力から出力までの伝達関数を返します。
*
* @param zeros ゼロ点の集合
* @param poles 極の集合
* @param gain ゲイン
* @param outputNumber 出力番号
* @return 伝達関数 (transfer function)
*/
public static DoubleRationalPolynomial zp2tfn(DoubleComplexMatrix zeros, DoubleComplexMatrix poles, DoubleMatrix gain, int outputNumber) {
final DoubleMatrix k = gain.getSubVector(outputNumber, outputNumber);
final List<DoubleMatrix> ans;
if (zeros.getColumnSize() == 0) {
ans = Zp2tf.zp2tf(zeros, poles, k);
} else {
ans = Zp2tf.zp2tf(zeros.getRowVector(outputNumber), poles, k);
}
final DoubleMatrix numerator = ans.get(0);
final DoubleMatrix denominator = ans.get(1);
return Tf2tfn.tf2tfn(numerator, denominator);
}
}