統合にGSLを使用したい http://www.gnu.org/software/gsl/manual/html_node/Numerical-Integration.html
(例の関数 f http://www.gnu.org/software/gsl/manual/html_node/Numerical-integration-examples.html )
インテグレータにエラーを報告できます。失敗する可能性のある統合の結果である関数を統合したいと考えています。これは私のサンプルプログラムです
#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;
}
出力 status = 0 status = -1 になります
インテグレーターは停止してエラー コードを返す必要があると思います。どうすればこれを達成できますか?
ご助力ありがとうございます!!!
2011-04-27: Brian Gough が私に言った後、私もこの変種を試しました。
#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;
}
それも役に立ちませんでした。バグレポートに記入します。