我想使用“ C的数字配方”中定义的qtrap函数对函数f进行数值积分。
double qtrap(double (*func)(double), double a, double b);
如图所示,它是double类型变量的一维积分。
但是我要集成的函数有一个附加参数a:
double f(double x, int a)
{
return a + x * x;
}
现在,我正在寻找一种方法来针对不同的a值对f进行积分。
到目前为止,我的想法是
typedef double (*fctp1_t)(double); //function pointer type for 1 arg
typedef double (*fctp2_t)(double, int); //function pointer type for 2 args
int a = 10;
fctp1_t = f1d;
f1d = reduceArgument(f, a);
qtrap(f1d, 0, 1);
与reduceArgument类似的东西:
fctp1_t reduceArgument(fctp2_t f2d, int ia)
{
return f2d(x, ia);
}
此代码导致错误:未声明'x'。
谢谢您的建议。
答案 0 :(得分:0)
C不允许构建这样的函数。您可以通过两种方式解决问题:
修改qtrap,使其能够处理参数化函数;
使用全局变量隐式传递参数。