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;
}
}
}