所以该方法本身可以正常工作:
double trap_method(double a, double b, double n){
int i = 1; double area = 0; double h = (b-a)/(n-1);
double x = a+h;
while(i <= n-2){
area = area + exp(x)*h;
x = x+h;
i++;
}
area = area + (exp(a) + exp(b)) * h/2;
return area;
}
但是,如您所见,它仅适用于e ^ x或您对其进行硬编码的任何内容。我是C ++的新手,我想知道是否有人可以告诉我如何在函数中添加参数,以便每次都可以将要集成的表达式更改为我想要的值。有点像
double trap_method(double a, double b, double n, function f){
int i = 1; double area = 0; double h = (b-a)/(n-1);
double x = a+h;
while(i <= n-2){
area = area + f(x)*h;
x = x+h;
i++;
}
area = area + (f(a) + f(b)) * h/2;
return area;
}
非常感谢。另外,我不明白为什么代码块弄乱了,对不起。
template<typename func_type>
double trap_method(double a, double b, double n, func_type f){
int i = 1; double area = 0; double h = (b-a)/(n-1);
double x = a+h;
while(i <= n-2){
area = area + f(x)*h;
x = x+h;
i++;
}
area = area + (f(a) + f(b)) * h/2;
return area;
}
然后再来....
double result = trap_method(a, b, n, std::exp);
您可以使用函数指针或模板来传递lambda函数。
double f(double x){
return x*x;
}
double trap_method(double a, double b, int n, double (*func)(double)){
int i = 1; double area = 0; double h = (b-a)/(n-1);
double x = a+h;
while(i <= n-2){
area = area + func(x)*h;
x = x+h;
i++;
}
area = area + (func(a) + func(b)) * h/2;
return area;
}
template<typename FUNC>
double trap_method(double a, double b, int n, FUNC func){
int i = 1; double area = 0; double h = (b-a)/(n-1);
double x = a+h;
while(i <= n-2){
area = area + func(x)*h;
x = x+h;
i++;
}
area = area + (func(a) + func(b)) * h/2;
return area;
}
主要
cout << trap_method(0, 1, 100, f) << endl;
cout << trap_method(0, 1, 100, [](double x){return x*x;}) << endl;