我正在为行列式 a 编写解析表达式,如下所示:
detW = &
(one+be*(u11+u22+u33)-&
be2*(u12sq+u13sq-u11*u22+u23sq-u11*u33-u22*u33)-&
al2*(-(u11*u22)+u13sq*(one+three*be*u22)-six*be*u12*u13*u23+u23sq+three*be*u11*u23sq-&
u11*u33-u22*u33-three*be*u11*u22*u33+u12sq*(one+three*be*u33))-&
al3*(u13sq*u22-two*u12*u13*u23+u12sq*u33+u11*(u23sq-u22*u33))-&
be3*(u13sq*u22-two*u12*u13*u23+u12sq*u33+u11*(u23sq-u22*u33))+&
al*(u22+u33-three*be2*(u13sq*u22-two*u12*u13*u23+u12sq*u33)-&
two*be*(u12sq+u13sq+u23sq-u22*u33)+&
u11*(one+two*be*(u22+u33)-three*be2*(u23sq-u22*u33))))
print*, 'detW = ', detW
print*, 'ga3 = ', ga3
detW = ga3/detW
Ng = (det1*detW)**pt5
行列式的真值是以第一大部分为分母,以 ga3 为分子。我发现当我不计算这个行列式时,我的代码(总共约 176,000 行代码)大约需要 0.07 秒,而计算这个行列式会使整个程序花费大约 2.5 秒。此外,我发现罪魁祸首是 line detW = ga3/detW
。当我注释掉这条线时,运行时间又回落到 0.07。
detW
仅当线上的值detW = ga3/detW
恰好为 1.0时才需要这么长时间。为什么会出现这种情况?为什么除以 1.0 会导致程序运行 3571% 的时间?