CQUAD
GSL'de yazarım . Arayüz neredeyse aynıdır QAGS
, bu yüzden ikincisini kullandıysanız, ilkini denemek zor olmamalıdır. NaN
S ve Inf
s'lerinizi integralde sıfırlara dönüştürmemeyi unutmayın - kod bunlarla ilgilenecektir.
Rutin olarak da Octave mevcuttur quadcc
ve Matlab burada .
Karşılaştığınız integrallere bir örnek verebilir misiniz?
Güncelleme
Aşağıda, CQUAD
bir 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 CQUAD
tekilliğ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 NaN
ve 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/
.