Tfn2zp.java

/*
 * $Id: Tfn2zp.java,v 1.11 2008/03/25 01:12:40 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.DoubleComplexMatrix;
import org.mklab.nfc.matrix.DoubleMatrix;
import org.mklab.nfc.scalar.DoubleRationalPolynomial;


/**
 * 伝達関数(有理多項式)から極とゼロ点の集合に変換するクラスです。
 * 
 * <p>Transfer function to zero-pole conversion
 * 
 * @author koga
 * @version $Revision: 1.11 $
 * @see org.mklab.tool.control.Tfn2tf
 * @see org.mklab.tool.control.Tfn2tfm
 * @see org.mklab.tool.control.Tfn2ss
 * @see org.mklab.tool.control.Zp2tfn
 */
public class Tfn2zp {

  /**
   * 伝達関数が
   * 
   * <pre><code> (s-z1)(s-z2)...(s-zn) g(s) = k --------------------- (s-p1)(s-p2)...(s-pn) </code></pre>
   * 
   * であるシステムのゼロ点<code>z</code>、極<code>p</code>、ゲイン<code>k</code>を求めます。
   * 
   * @param g 伝達関数
   * @return {z, po, k} (ゼロ点, 極, ゲイン) (zero-pole representation)
   */
  public static List<DoubleComplexMatrix> tfn2zp(DoubleRationalPolynomial g) {
    List<DoubleMatrix> tmp = Tfn2tf.tfn2tf(g);
    DoubleMatrix NUM = tmp.get(0);
    DoubleMatrix denominator = tmp.get(1);
    List<DoubleComplexMatrix> tmp2 = Tf2zp.tf2zp(NUM, denominator);
    DoubleComplexMatrix z = tmp2.get(0);
    DoubleComplexMatrix p = tmp2.get(1);
    DoubleComplexMatrix k = tmp2.get(2);

    //return new MatxList(new Object[] {z, p, k});
    return new ArrayList<>(Arrays.asList(new DoubleComplexMatrix[] {z, p, k}));
  }

}