Je veux utiliser le GSL pour l'intégration http://www.gnu.org/software/gsl/manual/html_node/Numerical-Integration.html Cependant, je ne trouve pas moyen pratique comment la fonction intégréeGSL: rapports d'erreur
(la fonction f dans l'exemple http://www.gnu.org/software/gsl/manual/html_node/Numerical-integration-examples.html)
peut signaler une erreur à l'intégrateur. Je veux intégrer une fonction qui elle-même résulte d'une intégration qui pourrait échouer. Ceci est mon exemple de programme
#include <stdio.h>
#include <math.h>
#include <gsl/gsl_integration.h>
#include <gsl/gsl_errno.h>
double f (double x, void * params) {
GSL_ERROR("test error",GSL_FAILURE);
return 0.0;
}
int main (void)
{
gsl_integration_workspace * w = gsl_integration_workspace_alloc (1000);
double result, error;
gsl_function F;
F.function = &f;
gsl_set_error_handler_off();
int status = gsl_integration_qags (&F, 0, 1, 0, 1e-7, 1000,
w, &result, &error);
printf ("status = %d\n", status);
status = GSL_FAILURE;
printf ("status = %d\n", status);
gsl_integration_workspace_free (w);
return 0;
}
entraînant la sortie status = 0 status = -1
Je pense que l'intégrateur devrait plutôt arrêter et retourner mon code d'erreur. Comment puis-je atteindre cet objectif?
Merci beaucoup pour votre aide !!!
2011-04-27: J'ai aussi essayé cette variante, après Brian Gough m'a dit,
#include <stdio.h>
#include <math.h>
#include <gsl/gsl_integration.h>
#include <gsl/gsl_errno.h>
double f (double x, void * params) {
GSL_ERROR("test error",GSL_FAILURE);
return GSL_NAN;
}
int main (void)
{
gsl_integration_workspace * w = gsl_integration_workspace_alloc (1000);
double result, error;
gsl_function F;
F.function = &f;
gsl_set_error_handler_off();
int status = gsl_integration_qags (&F, 0, 1, 0, 1e-7, 1000,
w, &result, &error);
printf ("status = %d\n", status);
status = GSL_FAILURE;
printf ("status = %d\n", status);
gsl_integration_workspace_free (w);
return 0;
}
il n'a pas aidé non plus. Je vais maintenant remplir un rapport de bug.
Bonjour Rhys, merci pour l'indice, c'est comme ça qu'un collègue le fait. Je pense qu'il serait préférable (aussi concernant la vitesse) d'arrêter réellement l'évaluation. Actuellement, je compile le GSL avec CFLAG -fexception et utilise la gestion des exceptions C++. Cependant, normalement le GSL ne supporte pas les exceptions et ils sont en C++, j'ai donc cherché un moyen plus direct. – 7asd23hasd