odeint中的重复delta函数

时间:2013-01-15 16:19:49

标签: c++ odeint

我有以下odeint程序:

#include <boost/array.hpp>
#include <boost/numeric/odeint.hpp>
using namespace std;

typedef boost::array< double , 1 > state_type;

void eqsystem(const state_type &x, state_type &dxdt, double t) {
    dxdt[0] = 3;
}

void write_system( const state_type &x , const double t ) {
    cout << t << '\t' << x[0] << endl;
}

int main(){
    double t0=0, t1=100;
    double tstep0=0.01;
    state_type x = {{ 0 }};
    cout<<"t\tValue"<<endl;
    boost::numeric::odeint::integrate( eqsystem , x , t0 , t1 , tstep0 , write_system );
}

每次t是10的倍数时,我都想设置x[0]=0.1

也就是说,我希望有一个重复的delta函数。

或者,如果我可以在有限的时间点发生delta函数,我将能够近似重复。

不幸的是,我无法在odeint中找到delta函数的文档。有谁知道如何实现这个目标?

1 个答案:

答案 0 :(得分:0)

这在odeint中是不可能的,至少不是一般的。您有两种选择:

首先用非常尖锐的高斯近似近似峰值。

其次,整合到峰值的时间点。应用增量峰值,即向现有解决方案添加一个步骤,然后从此点开始积分到下一个峰值,依此类推。

有als&#34;异国情调&#34;具有不连续性的ODE的方法,但是当ODE本身具有不连续性而不是外部驱动时,它们通常会处理这种情况。