BLAS のサブルーチン dgemm、dgemv、および ddot を使用する Fortran サブルーチンがあります。これらは、行列 * 行列、行列 * ベクトル、およびベクトル * ベクトルを計算します。m * m 行列と m * 1 ベクトルがあります。場合によっては、m=1 です。これらの場合、これらのサブルーチンはうまく機能しないようです。エラーは出ませんが、結果に数値的な不安定性があるようです。だから私は次のようなものを書く必要があります:
if(m>1) then
vtuni(i,t) = yt(i,t) - ct(i,t) - ddot(m, zt(i,1:m,(t-1)*tvar(3)+1), 1, arec, 1)
else
vtuni(i,t) = yt(i,t) - ct(i,t) - zt(i,1,(t-1)*tvar(3)+1)*arec(1)
したがって、私の実際の質問は、m=1 の場合にこれらの BLAS のサブルーチンが正しく機能しないということですか、それとも私のコードに何か問題があるのでしょうか? コンパイラはこれに影響を与えることができますか? 私はgfortranを使用しています。