DoublePolePlaceStateFeedback.java
/*
* $Id: PolePlaceStateFeedback.java,v 1.4 2008/07/16 04:58:04 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.tool.control.system.DoubleSystemOperator;
import org.mklab.tool.control.system.math.DoubleConstantSystem;
import org.mklab.tool.control.system.parameter.Parameter;
import org.mklab.tool.control.system.parameter.ParameterUpdator;
/**
* 極配置による安定化制御のための状態フィードバックコントローラ(定数行列)を表すクラスです。
*
* @author koga
* @version $Revision: 1.4 $, 2004/05/31
*/
public class DoublePolePlaceStateFeedback extends DoubleConstantSystem implements ParameterUpdator {
/** 極配置のための状態フィードバックの設計器 */
private DoublePolePlaceDesigner designer;
/** 閉ループ系の極 */
@Parameter(name = "closedLoopPoles", description = "閉ループ系の極", update = true)
private DoubleComplexMatrix closedLoopPoles = new DoubleComplexMatrix(new double[] {-1}, new double[] {0}).transpose();
/**
* 新しく生成された<code>PolePlaceStateFeedback</code>オブジェクトを初期化します。
*
* @param plant 制御対象(線形システム)
*/
public DoublePolePlaceStateFeedback(final DoubleSystemOperator plant) {
super(plant.getStateSize(), plant.getInputSize());
this.designer = new DoublePolePlaceDesigner(plant);
}
/**
* 閉ループ系の指定極を設定します。
*
* @param closedLoopPoles 閉ループ系の指定極
*/
public void setClosedLoopPoles(final DoubleComplexMatrix closedLoopPoles) {
this.closedLoopPoles = closedLoopPoles.createClone();
this.designer.setClosedLoopPoles(closedLoopPoles);
setGain(this.designer.getStateFeedback());
}
/**
* @see org.mklab.tool.control.system.parameter.ParameterUpdator#updateWith(java.lang.String)
*/
public boolean updateWith(final String parameter) {
if (parameter.equals("closedLoopPoles")) { //$NON-NLS-1$
setClosedLoopPoles(this.closedLoopPoles);
return true;
}
return false;
}
}