Tôi là tác giả của CQUAD
GSL. Giao diện gần giống với giao diện QAGS
, vì vậy nếu bạn đã sử dụng cái sau, thì không khó để thử cái trước. Chỉ cần nhớ không chuyển đổi NaN
s và Inf
s của bạn thành số không trong tích phân - mã sẽ tự xử lý.
Các thói quen cũng có sẵn trong Octave như quadcc
, và trong Matlab ở đây .
Bạn có thể cung cấp một ví dụ về các thương hiệu bạn đang giao dịch?
Cập nhật
Đây là một ví dụ về việc sử dụng CQUAD
để tích hợp một chức năng với một điểm kỳ dị tại một trong các điểm cuối:
#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;
}
mà tôi biên soạn với gcc -g -Wall cquad_test.c -lgsl -lcblas
. Đầu ra là
main: int of sin(x)/x in [0,1] is 9.4608307036718275e-01 +/- 4.263988e-13 (63 evals).
0,94608307036718495494
Lưu ý rằng không có gì đặc biệt ở đây, cũng không cho biết CQUAD
điểm kỳ dị ở đâu, hay bất kỳ sự đối xử đặc biệt nào trong chính thương hiệu. Tôi chỉ để nó trả về NaN
s và bộ tích hợp sẽ tự động chăm sóc chúng.
Cũng lưu ý rằng có một lỗi trong phiên bản GSL mới nhất 1.15 có thể ảnh hưởng đến việc điều trị các điểm kỳ dị. Nó đã được sửa chữa, nhưng chưa được phân phối chính thức. Tôi đã sử dụng các nguồn gần đây nhất, tải về với bzr branch http://bzr.savannah.gnu.org/r/gsl/trunk/
.