2014-01-22 2 views
1

Я программирую на C++ Мне нужно интегрировать функцию двух переменных, например f (x, y), только по одному из два:численное интегрирование двух переменных функций по одной переменной только в C++ (с использованием библиотек числовых рецептов)

I (у) = Int F (х, у) дх

Я использую библиотеки образуют численные рецепты. однако, если я использую функции 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

В старшем C++ у вас были такие вещи, как std::bind2nd, которые дали бы новый объект функции путем привязки второго аргумента к предоставленному постоянному значению; в C++ 11 это всего лишь std::bind (который использует заполнители для обозначения того, что еще не связано).

Таким образом, вы могли бы иметь что-то вроде

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

где 0,75 ваш угол (если вам нужны различные значения у, как вы идете, вы должны будете снова связать). Я многое забыл о вещах std::.

Смежные вопросы