Parallel.java
/*
* $Id: Parallel.java,v 1.10 2008/03/23 23:41:55 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;
/**
* 2つ線形システムを並列結合したシステムを求めるクラスです。
*
* <p>Parallel connection of two systems
*
* @author koga
* @version $Revision: 1.10 $
* @see org.mklab.tool.control.Series
*/
public class Parallel {
/**
* システム1
*
* <pre><code>
*
* . x1 = A1 x1 + B1 u1 y1 = C1 x1 + D1 u1 </code></pre>
*
* とシステム2
*
* <pre><code>
*
* . x2 = A2 x2 + B2 u2 y2 = C2 x2 + D2 u2 </code></pre>
*
* を並列結合(y = y1 + y2)したシステム
*
* <pre><code> . [x1] = [A1 0] [x1] + [B1 0] [x2] [0 A2] [x2] + [0 B2]
*
* y = y1 + y2 = [C1 C2] [x1] + [D1 D2] [u1] [x2] [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 並列結合したシステム (connected system)
*/
public static List<DoubleMatrix> parallel(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 RuntimeException(message1);
}
String message2;
if ((message2 = Abcdchk.abcdchk(A2, B2, C2, D2)).length() > 0) {
throw new RuntimeException(message2);
}
DoubleMatrix A = Diag.diag(A1, A2);
DoubleMatrix B = Diag.diag(B1, B2);
DoubleMatrix C = C1.appendRight(C2); // [C1 C2];
DoubleMatrix D = D1.appendRight(D2); // [D1 D2];
return new ArrayList<>(Arrays.asList(new DoubleMatrix[] {A, B, C, D}));
//return new MatxList(new Object[] {A, B, C, D});
}
}