在GSL获得外部产品的最佳方式

时间:2016-10-07 20:49:48

标签: c++ gsl

我有两个向量,x,y和我需要获得外部产品,即xy'。我必须在GSL库中执行此操作,我不确定是否有函数可以执行此操作。

有人能告诉我是否有在GSL中计算外部产品的功能或程序?

3 个答案:

答案 0 :(得分:1)

我相信您要查找的功能在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矩阵分配一个len矩阵,并且假设x的长度为len,则将把外积产生到A的上三角部分。

答案 1 :(得分:1)

我将使用功能

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

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

答案 2 :(得分:0)

cross(v0,v1) 

2D中的“外部产品”与交叉产品相同,尽管Z没有真正定义。

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

另请注意,结果将是:

  • 标量作为2D向量的外积,
  • 矢量作为3D矢量的外积。