Abcdchk.java
/*
* $Id: Abcdchk.java,v 1.13 2008/07/17 07:30:03 koga Exp $
*
* Copyright (C) 2004 Koga Laboratory. All rights reserved.
*/
package org.mklab.tool.control;
import org.mklab.nfc.matrix.Matrix;
import org.mklab.nfc.scalar.Scalar;
/**
* システム行列の大きさが整合しているか判定するクラスです。
*
* <p>Check the dimensions of the system matrices
*
* @author koga
* @version $Revision: 1.13 $
*/
public class Abcdchk {
/**
* 行列A, B, C, Dの大きさが整合しているか判定します。
*
* <p>整合していれば空文字列、整合していなければエラーメッセージを返します。
*
* @param <S> スカラーの型
* @param <M> 行列の型
*
* @param nargs 引数の数
* @param A A
* @param B B
* @param C C
* @param D D
* @return error message
*/
@SuppressWarnings("boxing")
private static <S extends Scalar<S, M>, M extends Matrix<S, M>> String abcdchk(int nargs, M A, M B, M C, M D) {
int mb = 0;
int nb = 0;
int mc = 0;
int nc = 0;
int md = 0;
int nd = 0;
int ma = A.getRowSize();
int na = A.getColumnSize();
if (ma != na) {
return String.format(Messages.getString("Abcdchk.0"), ma, na); //$NON-NLS-1$
}
if (nargs > 1) {
mb = B.getRowSize();
nb = B.getColumnSize();
if (ma != mb) {
return String.format(Messages.getString("Abcdchk.1"), ma, na, mb, nb); //$NON-NLS-1$
}
}
if (nargs > 2) {
mc = C.getRowSize();
nc = C.getColumnSize();
if (nc != ma) {
return String.format(Messages.getString("Abcdchk.2"), ma, na, mc, nc); //$NON-NLS-1$
}
}
if (nargs > 3) {
md = D.getRowSize();
nd = D.getColumnSize();
if (md != mc) {
return String.format(Messages.getString("Abcdchk.3"), mc, nc, md, nd); //$NON-NLS-1$
}
if (nd != nb) {
return String.format(Messages.getString("Abcdchk.4"), mb, nb, md, nd); //$NON-NLS-1$
}
}
return ""; //$NON-NLS-1$
}
/**
* 行列A, B, C, Dの大きさが整合しているか判定します。
*
* <p>整合していれば空文字列、整合していなければエラーメッセージを返します。
*
* @param <S> スカラーの型
* @param <M> 行列の型
* @param A A行列
* @param B B行列
* @param C C行列
* @param D D行列
* @return エラーメッセージ (error message)
*/
public static <S extends Scalar<S, M>, M extends Matrix<S, M>> String abcdchk(M A, M B, M C, M D) {
return abcdchk(4, A, B, C, D);
}
/**
* 行列A, B, Cの大きさが整合しているか判定します。
*
* <p>整合していれば空文字列、整合していなければエラーメッセージを返します。
*
* @param <S> スカラーの型
* @param <M> 行列の型
* @param A A行列
* @param B B行列
* @param C C行列
* @return エラーメッセージ (error message)
*/
public static <S extends Scalar<S, M>, M extends Matrix<S, M>> String abcdchk(M A, M B, M C) {
return abcdchk(3, A, B, C, null);
}
/**
* 行列AとBの大きさが整合しているか判定します。
*
* <p>整合していれば空文字列、整合していなければエラーメッセージを返します。
*
* @param <S> スカラーの型
* @param <M> 行列の型
* @param A A行列
* @param B B行列
* @return エラーメッセージ (error message)
*/
public static <S extends Scalar<S, M>, M extends Matrix<S, M>> String abcdchk(M A, M B) {
return abcdchk(2, A, B, null, null);
}
/**
* 行列Aの大きさが整合しているか判定します。
*
* <p>整合していれば空文字列、整合していなければエラーメッセージを返します。
*
* @param <S> スカラーの型
* @param <M> 行列の型
* @param A A行列
* @return エラーメッセージ (error message)
*/
public static <S extends Scalar<S, M>, M extends Matrix<S, M>> String abcdchk(M A) {
return abcdchk(1, A, null, null, null);
}
}