У меня есть подпрограмма 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)
Итак, мой фактический вопрос: я прав, что подпрограммы этих BLAS не работают должным образом, когда m = 1, или в моем коде просто что-то не так? Может ли компилятор повлиять на это? Я использую гфортран.