我想用GSL整合 http://www.gnu.org/software/gsl/manual/html_node/Numerical-Integration.html 不过,我觉得没有简便的方法如何综合功能GSL:错误报告
可以报告错误(在本例中http://www.gnu.org/software/gsl/manual/html_node/Numerical-integration-examples.html函数f)给集成商。我想集成一个本身可能导致失败的集成的函数。这是我的示例程序
#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;
}
导致输出 状态= 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;
}
它并没有帮助。我现在将填写一份错误报告。
你好莱斯,谢谢你的提示,那是一个同事这样做的方式。我认为真正停止评估会更好(也关于速度)。目前,我使用-fexception CFLAG编译GSL并使用C++异常处理。但是,通常GSL不支持异常,它们是C++,所以我寻找更直接的方法。 – 7asd23hasd 2011-04-19 16:07:03