我正在通过GSL函数来计算Z * Z ^ T,其中Z是n * 1列向量,但我找不到任何拟合函数,非常感谢每一个帮助。
答案 0 :(得分:1)
GSL支持BLAS(基本线性代数子程序), 见[http://www.gnu.org/software/gsl/manual/html_node/GSL-BLAS-Interface.html][1]。
根据操作的复杂程度对功能进行分类:
对于float,double和复数,大多数函数都有不同的版本。您的操作基本上是矢量Z的外部产品。 您可以将矢量初始化为列向量(此处为双精度数字):
gsl_matrix * Z = gsl_matrix_calloc (n,1);
然后使用BLAS函数 gsl_blas_dgemm 进行计算 Z * Z ^ T.此函数的第一个参数确定输入矩阵是否应在矩阵乘法之前进行转置:
gsl_blas_dgemm (CblasNoTrans, CblasTrans, 1.0, Z, Z, 0.0, C);
这是一个有效的测试程序(您可能需要将其与gsl和blas链接):
#include <gsl/gsl_matrix.h>
#include <gsl/gsl_blas.h>
int main(int argc, char ** argv)
{
size_t n = 4;
gsl_matrix * Z = gsl_matrix_calloc (n,1);
gsl_matrix * C = gsl_matrix_calloc (n,n);
gsl_matrix_set(Z,0,0,1);
gsl_matrix_set(Z,1,0,2);
gsl_matrix_set(Z,2,0,0);
gsl_matrix_set(Z,3,0,1);
gsl_blas_dgemm (CblasNoTrans,
CblasTrans, 1.0, Z, Z, 0.0, C);
int i,j;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf ("%g\t", gsl_matrix_get (C, i, j));
}
printf("\n");
}
gsl_matrix_free(Z);
gsl_matrix_free(C);
return 0;
}