저는 CQUAD
GSL 의 저자입니다 . 인터페이스는 인터페이스와 거의 동일 QAGS
하므로 후자를 사용한 경우 전자를 시도하는 것이 전혀 어렵지 않습니다. integrand에서 NaN
s와 Inf
s를 0 으로 변환하지 마십시오 . 코드는이 자체를 처리합니다.
이 루틴은 Octave quadcc
와 Matlab 에서도 제공 됩니다 .
당신이 다루고있는 정수의 예를 들어 주시겠습니까?
최신 정보
다음 CQUAD
은 엔드 포인트 중 하나에서 함수를 특이점과 통합하는 데 사용하는 예입니다 .
#include <stdio.h>
#include <gsl/gsl_integration.h>
/* Our test integrand. */
double thefunction ( double x , void *param ) {
return sin(x) / x;
}
/* Driver function. */
int main ( int argc , char *argv[] ) {
gsl_function f;
gsl_integration_cquad_workspace *ws = NULL;
double res, abserr;
size_t neval;
/* Prepare the function. */
f.function = &thefunction;
f.params = NULL;
/* Initialize the workspace. */
if ( ( ws = gsl_integration_cquad_workspace_alloc( 200 ) ) == NULL ) {
printf( "main: call to gsl_integration_cquad_workspace_alloc failed.\n" );
abort();
}
/* Call the integrator. */
if ( gsl_integration_cquad( &f, 0.0 , 1.0 , 1.0e-10 , 1.0e-10 , ws , &res , &abserr , &neval ) != 0 ) {
printf( "main: call to gsl_integration_cquad failed.\n" );
abort();
}
/* Print the result. */
printf( "main: int of sin(x)/x in [0,1] is %.16e +/- %e (%i evals).\n" ,
res , abserr , neval );
/* Free the workspace. */
gsl_integration_cquad_workspace_free( ws );
/* Bye. */
return 0;
}
내가 컴파일했습니다 gcc -g -Wall cquad_test.c -lgsl -lcblas
. 출력은
main: int of sin(x)/x in [0,1] is 9.4608307036718275e-01 +/- 4.263988e-13 (63 evals).
0.94608307036718301494
CQUAD
특이점이 어디에 있는지, 또는 적분 그 자체 내에서 특별한 대우를하는 것도 특별한 것은 없습니다 . 나는 단지 NaN
s를 리턴하게 하고, 적분기는 그것들을 자동적으로 처리한다.
또한 최신 GSL 버전 1.15에는 특이점 처리에 영향을 줄 수있는 버그가 있습니다. 수정되었지만 공식 배포판에는 적용되지 않았습니다. 로 다운로드 된 최신 소스를 사용했습니다 bzr branch http://bzr.savannah.gnu.org/r/gsl/trunk/
.