在 GSL 中获得外积的最佳方式

best way to get outer product in GSL

我有两个向量 x、y,我需要得到外积,即 xy'。我必须在 GSL 库中执行此操作,但我不确定是否有执行此操作的功能。

谁能告诉我GSL中是否有计算外积的函数或程序?

cross(v0,v1) 

2D 中的 "outer product" 与叉积相同,尽管 Z 并未真正定义。

http://allenchou.net/2013/07/cross-product-of-2d-vectors/

此外,请注意结果将是:

  • 作为二维向量外积的标量,
  • 向量作为 3D 向量的外积。

我相信您要找的函数在 BLAS 接口中,其原型如下:

int gsl_blas_dsyr(CBLAS_UPLO_t Uplo, double alpha, const gsl_vector * x, gsl_matrix * A

此函数发送 A -> A + alpha x x'。要计算外积,请考虑 alpha = 1 和 A=0 的情况。请注意,Uplo = CblasUpper 指定,由于 A 是对称的,因此仅计算上三角项。如果你想要完整的矩阵,一定要在之后进行对称化。所以,

int outerProduct(gsl_matrix* A, const gsl_vector *x, const int len){
  A = gsl_matrix_calloc(len,len);
  return gsl_blas_dsyr(CblasUpper,1.0,x,A);
}

将分配一个 len by len 矩阵,并且假设 x 的长度为 len,会将外积生成到 A 的上三角部分。

我会使用函数

int gsl_blas_dger(double alpha, const gsl_vector * x, const gsl_vector * y, gsl_matrix * A)

函数发送 A -> A + alpha x y'。