NegativeUnitSystem.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.ComplexNumericalMatrix;
import org.mklab.nfc.matrix.RealNumericalMatrix;
import org.mklab.nfc.scalar.ComplexNumericalScalar;
import org.mklab.nfc.scalar.RealNumericalScalar;
/**
* マイナスの単位システムを表わすクラスです。
*
* @author Anan
* @version $Revision: 1.6 $, 2007/10/17
* @param <RS> type of real scalar
* @param <RM> type of real matrix
* @param <CS> type of complex scalar
* @param <CM> type of complex matrix
*/
public class NegativeUnitSystem<RS extends RealNumericalScalar<RS,RM,CS,CM>, RM extends RealNumericalMatrix<RS,RM,CS,CM>, CS extends ComplexNumericalScalar<RS,RM,CS,CM>, CM extends ComplexNumericalMatrix<RS,RM,CS,CM>> extends ConstantSystem<RS,RM,CS,CM> {
/**
* 新しく生成された<code>UnitSystem</code>オブジェクトを初期化します。
*
* @param degree 次数
* @param sunit unit of scalar
*/
public NegativeUnitSystem(final int degree, RS sunit) {
super(degree, degree, sunit);
if (degree != -1) {
setGain(sunit.createUnitGrid(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(this.sunit.createUnitGrid(inputSize, inputSize).unaryMinus());
//setUnitExpression(inputSize);
}
/**
* @see org.mklab.tool.control.system.math.ConstantSystem#multiply(org.mklab.tool.control.system.math.ConstantSystem)
*/
@Override
public ConstantSystem<RS,RM,CS,CM> multiply(ConstantSystem<RS,RM,CS,CM> opponent) {
if (opponent instanceof NegativeUnitSystem) {
return new UnitSystem<>(getInputSize(), this.sunit);
}
//return super.multiply(opponent);
return opponent.unaryMinus();
}
/**
* @see org.mklab.tool.control.system.LinearSystemOperator#unaryMinus()
*/
@Override
public ConstantSystem<RS,RM,CS,CM> unaryMinus() {
return new UnitSystem<>(getInputSize(), this.sunit);
}
/**
* @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(this.sunit.createUnitGrid(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 ConstantSystem<RS,RM,CS,CM> invertSign(){
return unaryMinus();
}
/**
* {@inheritDoc}
*/
@Override
public String toString(){
return "-I"; //$NON-NLS-1$
}
}