0

私はそのようなコードを持っています:

#include <gsl/gsl_integration.h>
#include <stdio.h>
#include <time.h>
#include <math.h>

double func1(double x, void* params) {
   return 1/(x-1);
}

int main() {
   int num = 100;
   gsl_integration_workspace *workspace = gsl_integration_workspace_alloc(num); 
   double result, error;    
   double alpha;    
   alpha = 1;
   gsl_function F;  
   F.function = &func1; 
   F.params = &alpha;   
   double a, b;
   a=0; 
   b=2;
   double err1= 0;  
   double err2 = 1e-7;
   gsl_integration_qawc (&F, a, b, 1.0, err1, err2, num, workspace,&result, &error);

   printf("Function QAWC - Cauchy Principal value\n");
   printf("Result: %f\n", result);
   printf("Error: %f\n", error);

   result = 0; 
   gsl_integration_workspace_free(workspace);   //zwolnienie pamięci dla całkowania
   return 0;
}

このような関数を処理できると思いましたが、「関数を統合できませんでした」というエラーが表示されます。なんで?

4

1 に答える 1

2

それほど難しいことではありません。単純に、計算される関数の形式はF(x)= g(x)* w(x)です。ここで、g(x)はユーザーが定義する必要のある関数です。w(x)はcパラメーターを使用して作成され、形式はw(x)= 1 /(xc)です。したがって、関数f(x)= 1 /(x-1)の主値を計算する場合、func1は次のようになります。

double func1(double x, void* params) {
   return 1;
}

そして、パラメータc(4.関数gsl_integration_qawcのパラメータ)は1である必要があります。

于 2012-06-13T23:57:34.487 に答える