我正在研究 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));
谢谢!