gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:56:28 25 4
gpt4 key购买 nike

我正在用 C++ 编程我需要对两个变量的函数进行积分,比如 f(x,y),仅对两个变量之一进行积分:

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

我正在使用 Numerical Recipes 中的库。但是,如果我使用 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 是一个二维函数)。

你们有没有聪明而简单的出路?非常感谢

最佳答案

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

所以你可能有类似的东西

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

其中 0.75 是您的角度(如果您需要不同的 y 值,则需要再次绑定(bind))。我省略了很多 std:: 内容。

关于c++ - 仅在 C++ 中对一个变量进行两个变量函数的数值积分(使用 Numerical Recipes 库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21285435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com