next up previous contents
: 行ベクトルと行列の積 : 行列と列ベクトルの積 : 行列と列ベクトルの積   目次

実装

行列と列ベクトルの積演算を関数として以下のように実装する。

/* 行列と列ベクトルの積 */
void WH_Matrix__whM_mul_whCv_OUT_whCv
(int nRows_A, int nColumns_A, void *whM_A,
 int nRows_b, double whCv_b[],
 int nRows_c, double OUT__whCv_c[])
/*
  入力引数:
    nRows_A は行列 whM_A の行数
    nColumns_A は行列 whM_A の列数
    whM_A は行列
    nRows_b は列ベクトル whCv_b の行数
    whCv_b は列ベクトル
    nRows_c は列ベクトル OUT__whCv_c の行数
  出力引数:
    OUT__whCv_cは列ベクトルで、whM_A と whCv_b の積
*/
{
  int i, j;

  assert(nRows_b == nColumns_A);
  assert(nRows_c == nRows_A);

  for (i = 0; i < nRows_A; i++) {
    OUT__whCv_c[i] = 0.0;
    for (j = 0; j < nColumns_A; j++) {
      OUT__whCv_c[i] += 
        WH_MATRIX__AT(whM_A, nRows_A, nColumns_A, i, j) 
          * whCv_b[j];
    }
  }
}

行列と行ベクトルの転置の積演算を関数として以下のように実装する。

/* 行列と行ベクトルの転置の積 */
void WH_Matrix__whM_mul_whTrans_whRv_OUT_whCv
(int nRows_A, int nColumns_A, void *whM_A,
 int nColumns_b, double whRv_b[],
 int nRows_c, double OUT__whCv_c[])
/*
  入力引数:
    nRows_A は行列 whM_A の行数
    nColumns_A は行列 whM_A の列数
    whM_A は行列
    nColumns_b は行ベクトル whRv_b の列数
    whRv_b は行ベクトル
    nRows_c は列ベクトル OUT__whCv_c の行数
  出力引数:
    OUT__whCv_cは列ベクトルで、whM_A と whCv_b の積
*/
{
  int i, j;

  assert(nColumns_b == nColumns_A);
  assert(nRows_c == nRows_A);

  for (i = 0; i < nRows_A; i++) {
    OUT__whCv_c[i] = 0.0;
    for (j = 0; j < nColumns_A; j++) {
      OUT__whCv_c[i] += 
        WH_MATRIX__AT(whM_A, nRows_A, nColumns_A, i, j) 
          * whRv_b[j];
    }
  }
}



Hiroshi KAWAI 平成15年8月11日