【问题标题】:numerical integration of two variable function over one variable only in C++ (using Numerical Recipes libraries)仅在 C++ 中对一个变量进行两个变量函数的数值积分(使用数值配方库)
【发布时间】:2014-02-12 15:48:46
【问题描述】:

我正在用 C++ 编程 我需要整合两个变量的函数,比如 f(x,y),只在两个变量中的一个上:

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

我正在使用数字食谱形式的库。但是,如果我使用 quadrature.h 例程,例如 qsimp、qtrap,它们只是一维的;如果我改用 quad3d.h,它只包含 3D 版本。

这是我的代码(简化版):

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++ integration numerical


    【解决方案1】:

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

    所以你可能有类似的东西

    bind2nd(NFW_rho, 0.75); //older
    bind(NFW_rho, _1, 0.75); //newer
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-12
      • 2016-08-14
      • 2016-11-05
      • 2021-07-23
      • 2019-01-23
      • 2019-03-28
      • 2011-01-31
      相关资源
      最近更新 更多