CQUADGSL'de yazarım . Arayüz neredeyse aynıdır QAGS, bu yüzden ikincisini kullandıysanız, ilkini denemek zor olmamalıdır. NaNS ve Infs'lerinizi integralde sıfırlara dönüştürmemeyi unutmayın - kod bunlarla ilgilenecektir.
Rutin olarak da Octave mevcuttur quadccve Matlab burada .
Karşılaştığınız integrallere bir örnek verebilir misiniz?
Güncelleme
Aşağıda, CQUADbir işlevi uç noktalardan birinde tekillikle birleştirmek için kullanılan bir örnek verilmiştir :
#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;
}
hangi ile derledim gcc -g -Wall cquad_test.c -lgsl -lcblas. Çıktı
main: int of sin(x)/x in [0,1] is 9.4608307036718275e-01 +/- 4.263988e-13 (63 evals).
20 basamağa hesaplanan sonuç verildiğinde, , 14 basamağa doğrudur.,94608307036718301494
Burada CQUADtekilliğin nerede olduğunu ya da integralin içindeki herhangi bir özel muameleyi anlatmak için özel bir şey olmadığını unutmayın . Sadece geri dönmesine izin verdim NaNve entegratör bunlarla otomatik olarak ilgilenir.
Ayrıca, en son GSL sürüm 1.15'te tekilliklerin tedavisini etkileyebilecek bir hata olduğuna dikkat edin. Düzeltildi, ancak resmi dağıtım için yapılmadı. İle indirilen en son kaynağı kullandım bzr branch http://bzr.savannah.gnu.org/r/gsl/trunk/.