我正在尝试将一个函数传递给另一个集成的函数,并且我不断获得零。我不确定这是否是我传递参数的方式,或者它是否只是数学中的逻辑错误。这是功能。
double linear(double x){
return x;
}
double quadratic(double x){
return x*x;
}
double sinByX(double x){
return sin(x)/x;
}
double rectangleIntegration(double a, double b, double n, double (*f)(double)){
double integral = 0;
double h = (b-a) / n;
int i;
for (i = 0; i < n; i++){
integral = (f(a + (i * h))) * h;
}
return integral;
}
double trapazoidIntegration(double a, double b, double n, double (*f)(double)){
double integral = 0;
double h = (b-a) / n;
int i;
for (i = 0; i < n; i++){
((f(a+(i*h)) + f(a+((i+1)*h))) / 2) * h;
}
return integral;
}
double simpsonIntegration(double a, double b, double n, double (*f)(double)){
double integral = 0;
double h = (b-a) / n;
int i;
for (i = 0; i < n; i++){
integral = (4*f((f(a+(i*h)) + f(a+((i+1)*h)))/2)) + f(a + (i*h)) + f(a + ((i + 1)*h));
}
return integral;
}
这就是我称之为......
double a = rectangleIntegration(2, 4, 2, linear(2));
printf("%f\n", a);
a = trapazoidIntegration(2, 4, 2, linear(2));
printf("%f\n", a);
a = simpsonIntegration(2, 4, 2, linear(2));
printf("%f\n", a);
并打印
0.000000
0.000000
0.000000
答案 0 :(得分:1)
传递像这样的函数参数
a = rectangleIntegration(2, 4, 2, linear(2));
本身不应该使用任何参数,它只是函数的名称,它是从rectangleIntegration()
调用的。如上所述,它不会编译。
您调用它的方式就好像传递了linear()
的返回值,而不是函数本身。试试这个
a = rectangleIntegration(2, 4, 2, linear);
答案 1 :(得分:0)
尝试rectangleIntegration(2, 4, 2, linear);