仅在C 中的一个变量上,两个变量函数的数值集成(使用数值配方库)

numerical integration of two variable function over one variable only in C++ (using Numerical Recipes libraries)

本文关键字:变量 方库 集成 函数 一个 仅在 两个      更新时间:2023-10-16

我在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函数)。

你们中的任何人都有聪明而简单的出路吗?非常感谢

在较旧的C 中,您拥有诸如std::bind2nd之类的东西,可以通过将第二个参数"绑定"到提供的常数值来给出一个新的函数对象;在C 11中,它只是std::bind(使用占位符表示仍然没有结合的内容)。

所以您可能有

之类的东西
bind2nd(NFW_rho, 0.75); //older
bind(NFW_rho, _1, 0.75); //newer

其中0.75是您的角度(如果您需要Y的不同值,则需要再次绑定)。我没有很多std::的东西。