Augment.java
/*
* $Id: Augment.java,v 1.11 2008/03/23 14:29:08 koga Exp $
*
* Copyright (C) 2004 Koga Laboratory. All rights reserved.
*
*/
package org.mklab.tool.control;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.mklab.nfc.matrix.DoubleMatrix;
import org.mklab.tool.matrix.Diag;
/**
* 拡張システムを生成するクラスです。
*
* <p>Augmented system
*
* @author koga
* @version $Revision: 1.11 $
* @see org.mklab.tool.control.Series
* @see org.mklab.tool.control.Parallel
*/
public class Augment {
/**
* 2つの線形システムから拡張システムを生成します。
*
* <p>生成されるシステムは、以下の通りです。
*
* <pre><code> . [x1] = [A1 0] [x1] + |B1 0] |u1] [x2] [0 A2] [x2] + [0 B2] |u2]
*
* [y1] = [C1 0] [x1] + |D1 0] |u1] [y2] [0 C2] [x2] + [0 D2] |u2] </code></pre>
*
* @param A1 A1行列
* @param B1 B1行列
* @param C1 C1行列
* @param D1 D1行列
* @param A2 A2行列
* @param B2 B2行列
* @param C2 C2行列
* @param D2 D2行列
* @return A,B,C,D(拡張システム)(augmented system)
*/
public static List<DoubleMatrix> augment(DoubleMatrix A1, DoubleMatrix B1, DoubleMatrix C1, DoubleMatrix D1, DoubleMatrix A2, DoubleMatrix B2, DoubleMatrix C2, DoubleMatrix D2) {
String message1;
if ((message1 = Abcdchk.abcdchk(A1, B1, C1, D1)).length() > 0) {
throw new IllegalArgumentException(message1);
}
String message2;
if ((message2 = Abcdchk.abcdchk(A2, B2, C2, D2)).length() > 0) {
throw new IllegalArgumentException(message2);
}
DoubleMatrix A = Diag.diag(A1, A2);
DoubleMatrix B = Diag.diag(B1, B2);
DoubleMatrix C = Diag.diag(C1, C2);
DoubleMatrix D = Diag.diag(D1, D2);
return new ArrayList<>(Arrays.asList(new DoubleMatrix[] {A, B, C, D}));
//return new MatxList(new Object[] {A, B, C, D});
}
}