Dlyap.java

/*
 * $Id: Dlyap.java,v 1.10 2008/02/28 00:42:50 koga Exp $
 *
 * Copyright (C) 2004 Koga Laboratory. All rights reserved.
 */
package org.mklab.tool.control;

import org.mklab.nfc.matrix.DoubleMatrix;


/**
 * 離散時間系のリヤプノ方程式の解を求めるクラスです。
 * 
 * <p>Solution of discrete-time Lyapunov equation
 * 
 * @author koga
 * @version $Revision: 1.10 $
 * @see org.mklab.tool.control.Lyap
 */
public class Dlyap {

  /**
   * 離散時間システムのリカッティ方程式
   * 
   * <pre><code> A*P*A# + Q = P </code></pre>
   * 
   * の解を返します。
   * 
   * @param A 離散時間系のシステム行列 (system matrix)
   * @param Q 定数行列 (constant matrix)
   * @return 解 (solution)
   */
  public static DoubleMatrix dlyap(DoubleMatrix A, DoubleMatrix Q) {
    String message;
    if ((message = Abcdchk.abcdchk(A)).length() > 0) {
      throw new RuntimeException(message);
    }

    final int n = A.getRowSize();
    final DoubleMatrix A2 = A.add(A.createUnit(n)).leftDivide(A.subtract(A.createUnit(n)));
    final DoubleMatrix Q2 = (A.createUnit(n).subtract(A2)).multiply(Q).multiply((A.createUnit(n).subtract(A2.conjugateTranspose())).divide(2));
    return Lyap.lyap(A2, Q2);
  }

}