DoubleLqServoIntegratorGain.java
/*
* $Id: LqServoIntegratorGain.java,v 1.3 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.DoubleMatrix;
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;
/**
* 入力外乱に対するLQ最適サーボのための積分ゲイン(定数行列)を表すクラスです。
*
* @author koga
* @version $Revision: 1.3 $, 2004/05/31
*/
public class DoubleLqServoIntegratorGain extends DoubleConstantSystem implements ParameterUpdator {
/** 出力に関する重み行列 */
@Parameter(name = "Qe", description = "出力に関する重み行列", update = true)
private DoubleMatrix Qe = new DoubleMatrix(new double[] {1}).vectorToDiagonal();
/** 入力に関する重み行列 */
@Parameter(name = "Re", description = "入力に関する重み行列", update = true)
private DoubleMatrix Re = new DoubleMatrix(new double[] {1});
/** 入力外乱に対するLQ最適サーボのための積分ゲインの設計器 */
private DoubleLqServoDesigner designer;
/**
* コンストラクター
*
* @param plant 制御対象(線形システム)
*/
public DoubleLqServoIntegratorGain(final DoubleSystemOperator plant) {
super(plant.getInputSize(), plant.getInputSize());
this.designer = new DoubleLqServoDesigner(plant);
}
/**
* 重み行列QeとReを設定します。
*
* @param Qe 出力に関する重み行列
* @param Re 入力に関する重み行列
*/
public void setWeightingMatrices(final DoubleMatrix Qe, final DoubleMatrix Re) {
this.Qe = Qe.createClone();
this.Re = Re.createClone();
this.designer.setWeightingMatrices(Qe, Re);
//this.designer.showClosedLoopPoles();
setGain(this.designer.getIntegratorGain());
}
/**
* @see org.mklab.tool.control.system.parameter.ParameterUpdator#updateWith(java.lang.String)
*/
public boolean updateWith(final String parameter) {
if (parameter.equals("Qe") || parameter.equals("Re")) { //$NON-NLS-1$ //$NON-NLS-2$
setWeightingMatrices(this.Qe, this.Re);
return true;
}
return false;
}
}