仅在C ++中使用一个变量对两个变量函数进行数值积分(使用Numerical Recipes库)

时间:2014-01-22 14:20:01

标签: c++ integration numerical

我用C ++编程 我需要在两个变量之一中集成两个变量的函数,比如f(x,y):

I(y)= int f(x,y)dx

我正在使用数字食谱的库。但是,如果我使用quadrature.h例程,例如qsimp,qtrap,那些只是一维的;如果我使用quad3d.h,它只包含三维版本。

这是我的代码的简化版本:

Doub NFW_rho(Doub variable,double angle) {
    return 1 / (pow(variable,2) + ... + cos(angle)) ;
}
int main ()
{
...
for (double angle = pi/36; angle < fi_max; angle += incr) {
    double min = D * cos(angle) - sqrt(pow(rt,2.) - pow(D * sin(angle),2.)) ;
    double max = D * cos(angle) + sqrt(pow(rt,2.) - pow(D * sin(angle),2.)) ;
...
Doub NFW_int = qsimp(NFW_rho,min,max) ;
double NFW = NFW_const * NFW_int ;
}

编译时,我收到一条相对于qsimp调用的错误消息,说明对qsimp的调用是错误的(显然,因为NFW_rho是2D函数)。

你们中有谁有一个聪明而简单的出路吗? 非常感谢

1 个答案:

答案 0 :(得分:0)

在较旧的C ++中,你有std::bind2nd这样的东西可以通过将第二个参数“绑定”到提供的常量值来提供新的函数对象;在C ++ 11中,它只是std::bind(它使用占位符来表示仍未绑定的内容)。

所以你可能有像

这样的东西
bind2nd(NFW_rho, 0.75); //older
bind(NFW_rho, _1, 0.75); //newer

其中0.75是你的角度(如果你需要不同的y值,你需要再次绑定)。我已经离开了很多std::的东西。