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

実装

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

/* 行ベクトルと行列の積 */
void WH_Matrix__whRv_mul_whM_OUT_whRv
(int nColumns_a, double whRv_a[],
 int nRows_B, int nColumns_B, void *whM_B,
 int nColumns_c, double OUT__whRv_c[])
/*
  入力引数:
    nColumns_a は行ベクトル whRv_a の列数
    whRv_a は行ベクトル
    nRows_B は行列 whM_B の行数
    nColumns_B は行列 whM_B の列数
    whM_B は行列
    nColumns_c は行ベクトル OUT__whRv_c の列数
  出力引数:
    OUT__whRv_cは行ベクトルで、whRv_a と whM_B の積
*/
{
  int i, j;

  assert(nColumns_a == nRows_B);
  assert(nColumns_c == nColumns_B);

  for (j = 0; j < nColumns_B; j++) {
    OUT__whRv_c[j] = 0.0;
  }

  for (i = 0; i < nRows_B; i++) {
    for (j = 0; j < nColumns_B; j++) {
      OUT__whRv_c[j] += 
        whRv_a[i]
          * WH_MATRIX__AT(whM_B, 
                nRows_B, nColumns_B, i, j);
    }
  }
}

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

/* 列ベクトルの転置と行列の積 */
void WH_Matrix__whTrans_whCv_mul_whM_OUT_whRv
(int nRows_a, double whCv_a[],
 int nRows_B, int nColumns_B, void *whM_B,
 int nColumns_c, double OUT__whRv_c[])
/*
  入力引数:
    nRows_a は列ベクトル whCv_a の行数
    whCv_a は列ベクトル
    nRows_B は行列 whM_B の行数
    nColumns_B は行列 whM_B の列数
    whM_B は行列
    nColumns_c は行ベクトル OUT__whRv_c の列数
  出力引数:
    OUT__whRv_cは行ベクトルで、whRv_a と whM_B の積
*/
{
  int i, j;

  assert(nRows_a == nRows_B);
  assert(nColumns_c == nColumns_B);

  for (j = 0; j < nColumns_B; j++) {
    OUT__whRv_c[j] = 0.0;
  }

  for (i = 0; i < nRows_B; i++) {
    for (j = 0; j < nColumns_B; j++) {
      OUT__whRv_c[j] += 
        whCv_a[i]
          * WH_MATRIX__AT(whM_B, 
                nRows_B, nColumns_B, i, j);
    }
  }
}



Hiroshi KAWAI 平成15年8月11日