很长一段时间的浏览器,第一次问问这里.我编写了许多用于执行各种一维数值积分方法的脚本,并将它们编译成一个库.我希望该库尽可能灵活地集成它的功能.
这里我举一个例子:一个非常简单的梯形规则示例,我将指针传递给要集成的函数.
// Numerically integrate (*f) from a to b
// using the trapezoidal rule.
double trap(double (*f)(double), double a, double b) {
int N = 10000;
double step = (b-a)/N;
double s = 0;
for (int i=0; i<=N; i++) {
double xi = a + i*step;
if (i == 0 || i == N) { s += (*f)(xi); }
else { s += 2*(*f)(xi); }
}
s *= (b-a)/(2*N);
return s;
}
Run Code Online (Sandbox Code Playgroud)
这适用于只接受一个参数的简单函数.例:
double a = trap(sin,0,1);
Run Code Online (Sandbox Code Playgroud)
但是,有时我可能想要集成具有更多参数的东西,例如二次多项式.在该示例中,系数将在集成之前由用户定义.示例代码:
// …Run Code Online (Sandbox Code Playgroud)