私は、科学計算用の GNU ライブラリを使用して、C に取り組んでいます。基本的に、次の 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 の要素ごとの積です (結果はベクトルになるはずです)。残念ながら、私はこれに固執しており、それを行う機能を見つけることができません。
誰かがそれについて私を助けることができれば、私はとても感謝しています. さらに、これまでのところhttps://www.gnu.org/software/gsl/manual/html_node/GSL-BLAS-Interface.html#GSL-BLAS-Interfaceよりも優れたGNUのドキュメントがあるかどうかは誰にもわかりません私を混乱させています。
最後に、単純に 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));
ありがとう!