逆テンソルを関数として以下のように実装する。
/* テンソルの逆テンソル */
void WH_Tensor2D__whInv_whT_OUT_whT
(double whT_X[2][2],
double OUT__whT_Y[2][2])
/*
入力引数:
whT_X はテンソル
出力引数:
OUT__whT_Yはテンソルで、whT_X の逆テンソル
*/
{
double whDet_whT_X;
double frac;
WH_Tensor2D__whDet_whT_OUT_s
(whT_X,
&whDet_whT_X);
frac = 1 / whDet_whT_X;
OUT__whT_Y[0][0] = frac * whT_X[1][1];
OUT__whT_Y[0][1] = -frac * whT_X[0][1];
OUT__whT_Y[1][0] = -frac * whT_X[1][0];
OUT__whT_Y[1][1] = frac * whT_X[0][0];
}
また、対称テンソルの場合には、以下のようになる。
/* 対称テンソルの逆テンソル */
void WH_Tensor2D__whInv_whST_OUT_whST
(double whST_X[3],
double OUT__whST_Y[3])
/*
入力引数:
whST_X は対称テンソル
出力引数:
OUT__whST_Yは対称テンソルで、whST_X の逆テンソル
*/
{
double whDet_whST_X;
double frac;
WH_Tensor2D__whDet_whST_OUT_s
(whST_X,
&whDet_whST_X);
frac = 1 / whDet_whST_X;
OUT__whST_Y[0] = frac * whST_X[1];
OUT__whST_Y[1] = frac * whST_X[0];
OUT__whST_Y[2] = -frac * whST_X[2];
}