내가 통합 그러나 http://www.gnu.org/software/gsl/manual/html_node/Numerical-Integration.html 의 GSL을 사용하려면보고 오류, 내가 어떻게 통합 기능 더 편리한 방법을 찾을GSL :
가 오류를보고 할 수 있습니다 (예 http://www.gnu.org/software/gsl/manual/html_node/Numerical-integration-examples.html의 함수 f) 통합 자에게. 나는 그 자체가 실패 할 수있는 통합으로부터 오는 기능을 통합하고 싶다. 이 출력 상태 = 0 상태의 결과로 내 샘플 프로그램
#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;
}
= -1 나는 통합 오히려 중지하고 내 오류 코드를 반환해야한다고 생각
입니다. 이것을 어떻게 할 수 있습니까?
도움 주셔서 감사합니다.
2011-04-27 : 브라이언 고프는 나에게 말했다 후 나는 또한,이 변형을 시도
#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;
}
가 도움이되지 않았다. 이제 버그 보고서를 작성하겠습니다.
안녕하세요 Rhys, 힌트를 주셔서 감사합니다, 동료가하는 방식입니다. 나는 평가를 정말로 멈추는 것이 더 좋을 것이라고 생각한다. 현재 -fexception CFLAG로 GSL을 컴파일하고 C++ 예외 처리를 사용합니다. 그러나 일반적으로 GSL은 예외를 지원하지 않으며 C++이기 때문에 좀 더 직접적인 방법으로 검색했습니다. – 7asd23hasd