我有一个 Fortran 子程序,它使用 BLAS 的子程序 dgemm、dgemv 和 ddot,它们计算矩阵 * 矩阵、矩阵 * 向量和向量 * 向量。我有 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。