我有以下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函数的文档。有谁知道如何实现这个目标?
答案 0 :(得分:0)
这在odeint中是不可能的,至少不是一般的。您有两种选择:
首先用非常尖锐的高斯近似近似峰值。
其次,整合到峰值的时间点。应用增量峰值,即向现有解决方案添加一个步骤,然后从此点开始积分到下一个峰值,依此类推。
有als&#34;异国情调&#34;具有不连续性的ODE的方法,但是当ODE本身具有不连续性而不是外部驱动时,它们通常会处理这种情况。