У меня есть подпрограмма 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, или в моем коде что-то не так? Может ли компилятор повлиять на это? Я использую гфортран.