我是C ++的新手,想用它来解决一个ODE系统。我使用了ODEINT简单示例中的一些代码并对其进行了修改,如下所示。
void rhs( const double YN1 , double &dYN1dz , const double z )
{
double k1 = boost::math::cyl_bessel_k(1, z);
double k2 = boost::math::cyl_bessel_k(2, z);
double K = 0.0001;
double YN1eq = (z*z*k2)/(4*g);
double nN1eq = (3/8)*(z*z*k2);
double D = K*(k1/k2)*z;
dYN1dz = -D*(YN1-nN1eq);
};
void write_cout( const double &YN1 , const double z )
{
cout << z << ' ' << YN1 << endl;
};
typedef runge_kutta_dopri5< double > stepper_type;
int solN1()
{
double YN1 = 0.75;
integrate_adaptive( make_controlled( 1E-12 , 1E-12 , stepper_type()),
rhs , YN1 , 0.001 ,100 , 0.1 , write_cout );
};
我需要使用z
和YN1
来解决另一个ODE
,因此我需要存储它们。我不确定如何最好地这样做。我正在考虑使用矢量矢量双,但我不知道如何最好地继续。