Diag.java

/*
 * $Id: Diag.java,v 1.7 2008/03/03 15:18:35 koga Exp $
 * 
 * Copyright (C) 2004 Koga Laboratory. All rights reserved.
 */
package org.mklab.tool.matrix;

import org.mklab.nfc.matrix.ComplexNumericalMatrix;
import org.mklab.nfc.matrix.DoubleMatrix;
import org.mklab.nfc.matrix.RealNumericalMatrix;
import org.mklab.nfc.matrix.misc.DiagonalMatrix;
import org.mklab.nfc.scalar.ComplexNumericalScalar;
import org.mklab.nfc.scalar.RealNumericalScalar;


/**
 * 対角行列を求めるクラスです。
 * 
 * <p>Diagonal matrix
 * 
 * @author koga
 * @version $Revision: 1.7 $
 */
public class Diag {

  /**
   * <code>a1</code>と<code>a2</code>が対角に並ぶ対角行列を求める
   * 
   * @param a1 左上ブロック行列
   * @param a2 右下ブロック行列
   * @return 対角行列 (diagonal matrix)
   */
  public static DoubleMatrix diag(DoubleMatrix a1, DoubleMatrix a2) {
    return DiagonalMatrix.create(a1, a2);
  }

  /**
   * <code>a1</code>と<code>a2</code>が対角に並ぶ対角行列を求める
   * 
   * @param a1 左上ブロック行列
   * @param a2 右下ブロック行列
   * @return 対角行列 (diagonal matrix)
   * @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 static <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>> RM diag(
      RM a1, RM a2) {
    return DiagonalMatrix.create(a1, a2);
  }

  /**
   * <code>a1</code>、<code>a2</code>、<code>a3</code>が対角に並ぶ対角行列を求める
   * 
   * @param a1 行列1
   * @param a2 行列2
   * @param a3 行列3
   * @return 対角行列 (diagonal matrix)
   */
  public static DoubleMatrix diag(DoubleMatrix a1, DoubleMatrix a2, DoubleMatrix a3) {
    return DiagonalMatrix.create(a1, a2, a3);
  }
}