next up previous contents
: 4階のテンソル : 3階テンソルとベクトルのドット積 : 3階テンソルとベクトルのドット積   目次

実装

3階テンソルとベクトルのドット積を関数として以下のように実装する。

/* 3階テンソルとベクトルのドット積 */
void WH_Tensor2D__whT3_cdot_whV_OUT_whT
(double whT3_B[2][2][2],
 double whV_f[2],
 double OUT__whT_X[2][2])
/*
  入力引数:
    whT3_B は3階テンソル
    whV_f はベクトル
  出力引数:
    OUT__whT_Xはテンソルで、whT3_B と whV_f のドット積
*/
{
  int i, j, k;

  for (i = 0; i < 2; i++) {
    for (j = 0; j < 2; j++) {
      double tmp = 0;

      for (k = 0; k < 2; k++) {
        tmp += whT3_B[i][j][k] * whV_f[k];
      }
      OUT__whT_X[i][j] = tmp;
    }
  }
}

/* ベクトルと3階テンソルのドット積 */
void WH_Tensor2D__whV_cdot_whT3_OUT_whT
(double whV_f[2],
 double whT3_B[2][2][2],
 double OUT__whT_X[2][2])
/*
  入力引数:
    whV_f はベクトル
    whT3_B は3階テンソル
  出力引数:
    OUT__whT_Xはテンソルで、whV_f と whT3_B のドット積
*/
{
  int i, j, k;

  for (j = 0; j < 2; j++) {
    for (k = 0; k < 2; k++) {
      double tmp = 0;

      for (i = 0; i < 2; i++) {
        tmp += whV_f[i] * whT3_B[i][j][k];
      }
      OUT__whT_X[j][k] = tmp;
    }
  }
}



Hiroshi KAWAI 平成15年4月19日