DoubleNegativeUnitSystem.java
/*
* Created on 2007/10/17
* Copyright (C) 2007 Koga Laboratory. All rights reserved.
*
*/
package org.mklab.tool.control.system.math;
import org.mklab.nfc.matrix.DoubleMatrix;
/**
* マイナスの単位システムを表わすクラスです。
*
* @author Anan
* @version $Revision: 1.6 $, 2007/10/17
*/
public class DoubleNegativeUnitSystem extends DoubleConstantSystem {
/**
* 新しく生成された<code>UnitSystem</code>オブジェクトを初期化します。
*
* @param degree 次数
*/
public DoubleNegativeUnitSystem(final int degree) {
super(degree, degree);
if (degree != -1) {
setGain(DoubleMatrix.unit(degree, degree).unaryMinus());
} else {
setAutoSize(true);
}
setNegative(false);
if (degree == 1) {
setExpression("-1"); //$NON-NLS-1$
} else {
setExpression("-I"); //$NON-NLS-1$
}
}
// /**
// * 数式を設定します。
// *
// * @param size 大きさ
// */
// private void setUnitExpression(final int size) {
// if (size == 1) {
// setExpression("1"); //$NON-NLS-1$
// } else {
// setExpression("I(" + size + ")"); //$NON-NLS-1$ //$NON-NLS-2$
// }
// }
/**
* @see org.mklab.tool.control.system.SystemOperator#setInputSize(int)
*/
@Override
public void setInputSize(final int inputSize) {
if (inputSize == -1) {
return;
}
super.setInputSize(inputSize);
super.setOutputSize(inputSize);
setGain(DoubleMatrix.unit(inputSize, inputSize).unaryMinus());
//setUnitExpression(inputSize);
}
/**
* @see org.mklab.tool.control.system.math.ConstantSystem#multiply(org.mklab.tool.control.system.math.ConstantSystem)
*/
@Override
public DoubleConstantSystem multiply(DoubleConstantSystem opponent) {
if (opponent instanceof DoubleNegativeUnitSystem) {
return new DoubleUnitSystem(getInputSize());
}
//return super.multiply(opponent);
return opponent.unaryMinus();
}
/**
* @see org.mklab.tool.control.system.LinearSystemOperator#unaryMinus()
*/
@Override
public DoubleConstantSystem unaryMinus() {
return new DoubleUnitSystem(getInputSize());
}
/**
* @see org.mklab.tool.control.system.SystemOperator#setOutputSize(int)
*/
@Override
public void setOutputSize(final int outputSize) {
if (outputSize == -1) {
return;
}
super.setInputSize(outputSize);
super.setOutputSize(outputSize);
setGain(DoubleMatrix.unit(outputSize, outputSize).unaryMinus());
//setUnitExpression(outputSize);
}
/**
* @see org.mklab.tool.control.system.math.ConstantSystem#isNegativeUnit()
*/
@Override
public boolean isNegativeUnit() {
return true;
}
/**
* @see org.mklab.tool.control.system.math.ConstantSystem#isNegativeUnitOperand()
*/
@Override
public boolean isNegativeUnitOperand() {
return true;
}
/**
* {@inheritDoc}
*/
@Override
public DoubleConstantSystem invertSign(){
return unaryMinus();
}
/**
* {@inheritDoc}
*/
@Override
public String toString(){
return "-I"; //$NON-NLS-1$
}
}