Я использую boost/odeint для решения оды первого порядка.boost odeint слишком много аргументов для функции
Определение системы в raman_system.h
выглядит следующим образом:
class raman_signal_system {
double alpha_s;
double dB_to_neper;
double g_pump_b;
double P_p;
public:
raman_signal_system()
: alpha_s(0.00021181),
dB_to_neper(0.23025850929940458),
g_pump_b(0.00044446),
P_p(0.494) {}
void operator() (const double P_s, double& dPsdz, const double z)
{
dPsdz = -alpha_s * dB_to_neper * P_s + P_s * P_p * g_pump_b;
}
};
Мой main
метод raman.cpp следующим образом:
/**
* @author Harun Kara
* @date 23.01.2017
* @brief Implementaion of the Raman amplification for fiber communications systems
*/
#include "raman_system.h"
#include <fstream>
#include <iostream>
#include <vector>
#include<boost/numeric/odeint.hpp>
int main(int argc, char *argv[]) {
namespace odeint = boost::numeric::odeint;
odeint::runge_kutta4<double> rk4;
raman_signal_system sys();
double P_s = 0.00079433;
double z = 0.0; // initial (forward/signal)
double l = 80e3; // Fiberlenght in m
size_t steps = 200;
const double dz = l/steps; // stepsize
std::vector<double> P_s_vec;
std::vector<double> places;
P_s_vec.push_back(P_s);
places.push_back(z);
for(size_t i=0; i<steps; ++i) {
rk4.do_step(sys, P_s, z, dz);
z += dz;
P_s_vec.push_back(P_s);
places.push_back(z);
}
return 0;
}
Если я пытаюсь построить, я получаю следующее сообщение об ошибке :
/home/kara/raman/src/raman.cpp:43: required from here
/home/kara/raman/include/boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp:229: error: too many arguments to function
sys(x , m_dxdt.m_v ,t);
Я не мог найти причину этого ошибки или. Может ли кто-нибудь помочь мне, узнать, что не так с моим кодом?
Использование подталкивание 1.60.0, Qt, CMake
Большое спасибо. Это решило проблему. –
Может ли увольняющий мозг объяснить, пожалуйста? Я не мог найти соответствующий дубликат. –