2014-06-06 3 views
2

GSL을 사용하여 일정한 간격으로 부드러운 단일 모드 함수를 수치 적으로 통합하는 간단한 예제를 게시 할 수 있습니까?GSL과의 부드러운 단일 모드 함수의 수치 적 통합?

+0

부드럽습니까? 입술? –

+0

@SteveCox 그것은 고차원까지 연속 유도체를 가지고 있다고 말합니다. – becko

+0

역시 분석적입니까? 또는 n 배의 차별화가 가능한가? –

답변

5

은 [0,1000]에 1/(t^2 + 1)을 통합 한 예입니다. 특이점이 없으므로 가장 간단한 규칙 집합을 사용하여 적응 적 통합을 사용합니다.

#include <stdio.h> 
#include <math.h> 
#include <gsl/gsl_integration.h> 

double f (double x, void * params) { 
    double alpha = *(double *) params; 
    double f = alpha/(x * x + 1); 
    return f; 
} 

    int 
main (void) 
{ 
    gsl_integration_workspace * w 
     = gsl_integration_workspace_alloc (1000); 

    double result, error; 
    double alpha = 1.0; 


    gsl_function F; 
    F.function = &f; 
    F.params = &alpha; 

    gsl_integration_qag (&F, 
         0.0, 1000.0, 
         0.0, 1e-7, 1000, 
         GSL_INTEG_GAUSS15, 
         w, 
         &result, &error); 

    printf ("result   = % .18f\n", result); 
    printf ("estimated error = % .18f\n", error); 

    gsl_integration_workspace_free (w); 

    return 0; 
} 

그리고 그 결과는 적분 PI/2에 대해해야하기 때문에 의미가

result   = 1.569796327128230029 
estimated error = 0.000000000092546021 

있습니다.

+0

일곱 번째 인수를 명확히하려면 "GSL_INTEG_GAUSS15"매크로를 사용해야합니다. –

+0

@ViniciusMiranda 전화하세요. –

+0

은 완벽합니다. – 4pie0