我用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函数)。
你们中有谁有一个聪明而简单的出路吗? 非常感谢
答案 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::
的东西。