UnitSystem.java
/**
* $Id: UnitSystem.java,v 1.10 2008/07/16 03:51:37 koga Exp $
*
* Copyright (C) 2004-2005 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 koga
* @version $Revision: 1.10 $
* @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 UnitSystem<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 UnitSystem(final int degree, RS sunit) {
super(degree, degree, sunit);
if (degree != -1) {
setGain(sunit.createUnitGrid(degree, degree));
} else {
setAutoSize(true);
}
if (degree == 1) {
setExpression("1"); //$NON-NLS-1$
} else {
setExpression("I"); //$NON-NLS-1$
}
}
/**
* 新しく生成された<code>UnitSystem</code>オブジェクトを初期化します。
*
* @param inputSize 入力サイズ
* @param outputSize 出力サイズ
* @param sunit unit of scalar
*/
public UnitSystem(int inputSize, int outputSize, RS sunit) {
super(inputSize, outputSize, sunit);
if (inputSize != -1 || outputSize != -1) {
setGain(sunit.createUnitGrid(inputSize, outputSize));
} else {
setAutoSize(true);
}
if (inputSize == 1 && outputSize == 1) {
setExpression("1"); //$NON-NLS-1$
} else {
setExpression("I"); //$NON-NLS-1$
}
}
/**
* {@inheritDoc}
*/
@Override
public void setInputSize(final int inputSize) {
if (inputSize == -1) {
return;
}
super.setInputSize(inputSize);
super.setOutputSize(inputSize);
setGain(this.sunit.createUnitGrid(inputSize, inputSize));
}
/**
* {@inheritDoc}
*/
@Override
public void setOutputSize(final int outputSize) {
if (outputSize == -1) {
return;
}
super.setInputSize(outputSize);
super.setOutputSize(outputSize);
setGain(this.sunit.createUnitGrid(outputSize, outputSize));
}
/**
* {@inheritDoc}
*/
@Override
public ConstantSystem<RS,RM,CS,CM> multiply(ConstantSystem<RS,RM,CS,CM> opponent) {
return opponent;
}
/**
* {@inheritDoc}
*/
@Override
public ConstantSystem<RS,RM,CS,CM> unaryMinus() {
return new NegativeUnitSystem<>(getInputSize(), this.sunit);
}
/**
* {@inheritDoc}
*/
@Override
public boolean isUnit() {
return true;
}
/**
* {@inheritDoc}
*/
@Override
public boolean isUnitOperand() {
return true;
}
/**
* {@inheritDoc}
*/
@Override
public ConstantSystem<RS,RM,CS,CM> invertSign(){
return unaryMinus();
}
/**
* {@inheritDoc}
*/
@Override
public String toString(){
return "I"; //$NON-NLS-1$
}
}