static VALUE rb_gsl_blas_zher2k(VALUE obj, VALUE u, VALUE t, VALUE a, VALUE aa, VALUE bb, VALUE b, VALUE cc) { gsl_matrix_complex *A = NULL, *B = NULL, *C = NULL; gsl_complex *pa = NULL; double beta; CBLAS_UPLO_t Uplo; CBLAS_TRANSPOSE_t Trans; CHECK_FIXNUM(u); CHECK_FIXNUM(t); CHECK_COMPLEX(a); Need_Float(b); CHECK_MATRIX_COMPLEX(aa); CHECK_MATRIX_COMPLEX(bb); CHECK_MATRIX_COMPLEX(cc); Uplo = FIX2INT(u); Trans = FIX2INT(t); Data_Get_Struct(a, gsl_complex, pa); beta = NUM2DBL(b); Data_Get_Struct(aa, gsl_matrix_complex, A); Data_Get_Struct(bb, gsl_matrix_complex, B); Data_Get_Struct(cc, gsl_matrix_complex, C); gsl_blas_zher2k(Uplo, Trans, *pa, A, B, beta, C); return cc; }
static VALUE rb_gsl_blas_zher2k2(VALUE obj, VALUE u, VALUE t, VALUE a, VALUE aa, VALUE bb, VALUE b, VALUE cc) { gsl_matrix_complex *A = NULL, *B = NULL, *C = NULL, *Cnew = NULL; gsl_complex alpha, *pa = α double beta; CBLAS_UPLO_t Uplo; CBLAS_TRANSPOSE_t Trans; CHECK_FIXNUM(u); CHECK_FIXNUM(t); CHECK_COMPLEX(a); Need_Float(b); CHECK_MATRIX_COMPLEX(aa); CHECK_MATRIX_COMPLEX(bb); CHECK_MATRIX_COMPLEX(cc); Uplo = FIX2INT(u); Trans = FIX2INT(t); Data_Get_Struct(a, gsl_complex, pa); beta = NUM2DBL(b); Data_Get_Struct(aa, gsl_matrix_complex, A); Data_Get_Struct(bb, gsl_matrix_complex, B); Data_Get_Struct(cc, gsl_matrix_complex, C); Cnew = gsl_matrix_complex_alloc(C->size1, C->size2); gsl_matrix_complex_memcpy(Cnew, C); gsl_blas_zher2k(Uplo, Trans, alpha, A, B, beta, Cnew); return Data_Wrap_Struct(cgsl_matrix_complex, 0, gsl_matrix_complex_free, Cnew); }
/** * C++ version of gsl_blas_zher2k(). * @param Uplo Upper or lower triangular * @param Trans Transpose type * @param alpha A constant * @param A A matrix * @param B Another matrix * @param beta Another constant * @param C Another matrix * @return Error code on failure */ int zher2k( CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans, complex const& alpha, matrix_complex const& A, matrix_complex const& B, double beta, matrix_complex& C ){ return gsl_blas_zher2k( Uplo, Trans, alpha.get(), A.get(), B.get(), beta, C.get() ); }