2013-05-15 2 views
1

누군가이 작업을 수행하는 방법을 이해할 수 있습니까? 나는 문서를보고있다. 그러나 나는 길 잃은 선형 대수학 타입을해야하기 때문에 오랜 시간이 걸렸다.gsl 복잡한 행렬 * 복소수 벡터

나는 Y라고 불리는 14x14의 복합 행렬과 I라는 복잡한 벡터를 가지고 있습니다. 그것들을 곱하고 그 결과를 IL이라는 복잡한 벡터로 설정해야합니다.

은 지금까지 내가 사용할 필요가 있음을 알아 낸 :

gsl_blas_zgemv (CBLAS_TRANSPOSE_t TransA, const gsl_complex alpha, const 
       gsl_matrix_complex * A, const gsl_vector_complex * x, const 
       gsl_complex beta, gsl_vector_complex * y) 

을하지만 어디에서 어떤 일이 일어나는지 확실하지 않다. 어디로 가는지 확실하지 않습니다. 이 같은? 알파와 베타는 무엇입니까?

gsl_blas_zgemv(CblasNoTrans, ???, &Y, &I, ???, IL); 
+1

와 기능 아니오 'CblasNOTrans'는 를 y = 알파 * A * X + 베타 * y를 그래서 제가 'gsl_blas_zgemv (CblasNoTrans, GSL_COMPLEX_ONE, Y, I, GSL_COMPLEX_ZERO, IL)로 부르는 것이다' –

+0

그게 무슨 뜻인지 모르겠다. –

+0

오. 내가 참조. GSL_COMPLEX_ONE 및 GSL_COMPLEX_ZERO은 무엇입니까? 나는 이것들을 정의 할 필요가 있는가? –

답변

4

실제하고있는 것을 보지 않고 올바른 헤더를 포함하지 않은 것 같습니다.

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

#include <gsl/gsl_blas.h> 
#include <gsl/gsl_complex_math.h> 

int 
main(int argc, char **argv) 
{ 

    int size = 14; 
    gsl_matrix_complex *A = NULL; 
    gsl_vector_complex *x = NULL; 
    gsl_vector_complex *y = NULL; 

    A = gsl_matrix_complex_alloc(size, size); 
    x = gsl_vector_complex_alloc(size); 
    y = gsl_vector_complex_alloc(size); 

    gsl_matrix_complex_set_all(A, GSL_COMPLEX_ONE); 
    gsl_vector_complex_set_all(x, GSL_COMPLEX_ONE); 
    gsl_vector_complex_set_all(y, GSL_COMPLEX_ZERO); 

    gsl_blas_zgemv(CblasNoTrans, GSL_COMPLEX_ONE, A, x, 
      GSL_COMPLEX_ZERO, y); 

    return(EXIT_SUCCESS); 

} 

그리고

gcc -o test -I/opt/local/include/gsl -L/opt/local/lib -lgsl -lgslcblas test.c 

(예, 나는 MacPorts를를 사용하여 Mac에서 오전)로 컴파일 : 나를 위해 오류없이 다음 작품으로.

+0

아, 네, gsl/gsl_complex_math.h가 없어서 제 자신만을 정의 했으므로 작동했지만, 이제는 GSL_COMPLEX_ONE과 GSL_COMPLEX_ZERO가이 헤더에 있습니다. 감사는 –

+0

'-I/opt/local/include/gsl -L/opt/local/lib -lgsl -lgslcblas'는 백 슬릭을 포함하여'\'gsl-config --cflags --libs \ "로 대체 될 수 있습니다. –