我正在使用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