質問

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を使用しています。

scroll top