Я работаю над C, используя библиотеку GNU для научных вычислений. По сути, мне нужно сделать эквивалент следующего кода MATLAB:
x=x.*(A*x);
где x — gsl_vector, а A — gsl_matrix.
Мне удалось сделать (A*x) с помощью следующей команды:
gsl_blas_dgemv(CblasNoTrans, 1.0, A, x, 1.0, res);
где res — это другой gsl_vector, в котором хранится результат. Если матрица A имеет размер m * m, а вектор x имеет размер m * 1, то вектор res будет иметь размер m * 1.
Теперь осталось произвести поэлементное произведение векторов x и res (в результате должен получиться вектор). К сожалению, я застрял на этом и не могу найти функцию, которая это делает.
Если кто-нибудь может помочь мне в этом, я был бы очень благодарен. Кроме того, кто-нибудь знает, есть ли документация по GNU лучше, чем https://www.gnu.org/software/gsl/manual/html_node/GSL-BLAS-Interface.html#GSL-BLAS?-Interface, который до сих пор меня смущает .
Наконец, потеряю ли я время выполнения, если выполню этот шаг, просто используя цикл for (размер вектора составляет около 11000, и этот шаг будет повторяться 500-5000 раз)?
for (i = 0; i < m; i++)
gsl_vector_set(res, i, gsl_vector_get(x, i) * gsl_vector_get(res, i));
Спасибо!