DoublePolePlaceDesigner.java
/*
* $Id: PolePlaceDesigner.java,v 1.4 2008/06/11 05:40:39 koga Exp $
*
* Copyright (C) 2004 Koga Laboratory. All rights reserved.
*
*/
package org.mklab.tool.control.system.controller;
import org.mklab.nfc.matrix.DoubleComplexMatrix;
import org.mklab.nfc.matrix.DoubleMatrix;
import org.mklab.tool.control.Pplace;
import org.mklab.tool.control.system.DoubleLinearSystemOperator;
import org.mklab.tool.control.system.DoubleSystemOperator;
/**
* 極配置のための状態フィードバックを設計するクラスです。
*
* @author koga
* @version $Revision: 1.4 $, 2004/05/31
*/
public class DoublePolePlaceDesigner {
/** 制御対象(線形システム) */
private DoubleLinearSystemOperator plant;
/** 閉ループ系の指定極 */
private DoubleComplexMatrix closedLoopPoles;
/** 極配置のための状態フィードバック行列 */
private DoubleMatrix F;
/**
* コンストラクター
*
* @param plant 制御対象(線形システム)
*/
public DoublePolePlaceDesigner(DoubleSystemOperator plant) {
this.plant = (DoubleLinearSystemOperator)plant;
}
/**
* 極配置のための状態フィードバック行列を返します。
*
* @return 状態フィードバック行列
*/
public DoubleMatrix getStateFeedback() {
design();
return this.F;
}
/**
* 極配置のための状態フィードバック行列を設計します。
*/
private void design() {
this.F = Pplace.pplace(this.plant.getA(), this.plant.getB(), this.closedLoopPoles);
}
/**
* 閉ループ系の指定極を設定します。
*
* @param closedLoopPoles 閉ループ系の指定極
*/
public void setClosedLoopPoles(DoubleComplexMatrix closedLoopPoles) {
this.closedLoopPoles = closedLoopPoles;
}
// /**
// * メインメソッド
// *
// * @param args
// * コマンドライン引数
// */
// public static void main(String[] args) {
// PolePlaceDesigner designer = new PolePlaceDesigner(new LinearSinglePendulum());
// DoubleMatrix closedLoopPoles = new DoubleComplexMatrix(new double[] {-20, -20, -2, -2}, new double[] {0, 0, 0, 0}).transpose();
// designer.setClosedLoopPoles(closedLoopPoles);
// designer.getStateFeedback().print("F: 極配置のための状態フィードバック行列");
// }
}