我正在使用GNU库进行科学计算。从本质上讲,我需要做下面的MATLAB代码相当于:使用GNU Blas子例程的矢量和矩阵之间的元素乘积
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));
谢谢!
事实上,这似乎是完全按照我想要的。 – TheRevanchist