通过函数调用运算符重载将矩阵作为参数传递

时间:2016-12-11 08:59:14

标签: c++ boost odeint

我知道函数调用操作符重载用于将任意数量的参数传递给类中的函数。是否也可以通过二维数组?

以下代码中的类似内容:已修改

    class harm_osc {
    vector< vector<double> >& m_gam;
public:
    harm_osc( vector< vector<double> > &gam ) : m_gam(gam) { }

    void operator() ( const state_type &x , state_type &dxdt , const double /* t */ )
    {
        dxdt[0] = m_gam[0][0]*x[1];
        dxdt[1] = m_gam[1][0]*x[0] - m_gam[1][1]*x[1];
    }
};

当我们有一个庞大的方程组时,有很多参数。

以下是来自odeint库的示例,其中包含一些修改,只有一个参数:已修改

#include <iostream>
#include <vector>
#include <boost/numeric/odeint.hpp>

using namespace std;
/* The type of container used to hold the state vector */
typedef vector< double > state_type;

/* The rhs of x' = f(x) defined as a class */
class harm_osc {
    vector< vector<double> >& m_gam;
public:
    harm_osc( vector< vector<double> > &gam ) : m_gam(gam) { }

    void operator() ( const state_type &x , state_type &dxdt , const double /* t */ )
    {
        dxdt[0] = m_gam[0][0]*x[1];
        dxdt[1] = m_gam[1][0]*x[0] - m_gam[2][2]*x[1];
    }
};    

int main(int /* argc */ , char** /* argv */ )
{
    using namespace boost::numeric::odeint;

    //[ state_initialization
    state_type x(2);
    x[0] = 1.0; // start at x=1.0, p=0.0
    x[1] = 0.0;
    //]


    //[ integration_class
    vector< vector<double> > par {{1.,0.},{-1.,0.15}};
    harm_osc ho(par);
    size_t steps = integrate( ho ,
            x , 0.0 , 10.0 , 0.1);
    //]
}

感谢您的任何指导或评论。 enter image description here

0 个答案:

没有答案