【发布时间】:2009-06-17 11:29:45
【问题描述】:
我有一个 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。
【问题讨论】:
标签: matrix fortran gfortran scalar