Xcov.java

/*
 * $Id: Xcov.java,v 1.9 2008/03/08 00:17:40 koga Exp $
 * 
 * Copyright (C) 2004 Koga Laboratory. All rights reserved.
 */
package org.mklab.tool.signal;

import org.mklab.nfc.matrix.DoubleMatrix;


/**
 * 分散を求めるクラスです。
 * 
 * <p>Cross-covariance function
 * 
 * @author koga
 * @version $Revision: 1.9 $
 * @see org.mklab.tool.signal.Xcorr
 * @see org.mklab.tool.matrix.Cov
 */
public class Xcov {

  /**
   * もし<code>x</code>がベクトルなら、自己分散を返します。
   * 
   * <p> もし<code>x</code>が<code>m</code>×<code>n</code>の行列なら、 <code>x</code>の全ての成分の組み合わせの共分散を含む行列を返します。
   * 
   * @param x データ
   * @return 自己分散 (cross-covariance)
   */
  public static DoubleMatrix xcov(DoubleMatrix x) {
    DoubleMatrix ox = x.createOnes(x.getRowSize(), 1);
    DoubleMatrix c = Xcorr.xcorr(x.subtract(ox.multiply(x.transpose().meanRowWise())));
    return c;
  }

  /**
   * ベクトル<code>x</code>と<code>y</code>とのcross-covarianceを返します。
   * 
   * @param x データ1
   * @param y データ2
   * @return 共分散 (cross-covariance)
   */
  public static DoubleMatrix xcov(DoubleMatrix x, DoubleMatrix y) {
    DoubleMatrix ox = x.createOnes(x.getRowSize(), 1);

    DoubleMatrix oy = y.createOnes(y.getRowSize(), 1);
    DoubleMatrix c = Xcorr.xcorr(x.subtract(ox.multiply(x.transpose().meanRowWise())), y.subtract(oy.multiply(y.transpose().meanRowWise())));

    return c;
  }

}