odeint中的循环函数

Recurring delta function in odeint

本文关键字:函数 循环 odeint      更新时间:2023-10-16

我有以下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<<"ttValue"<<endl;
    boost::numeric::odeint::integrate( eqsystem , x , t0 , t1 , tstep0 , write_system );
}

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

也就是说,我想要一个循环函数

或者,如果我可以让函数出现在有限个数的时间点上,我将能够近似递归。

不幸的是,我无法在odeint中找到delta函数的文档。有人知道如何做到这一点吗?

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

首先用非常尖锐的高斯函数近似δ峰。

第二,积分到峰值的时间点。应用增量峰值,即在现有解决方案中添加一个步骤,并从这一点开始集成到下一个峰值,依此类推。

对于具有不连续的ODE也有一些"奇异的"方法,但它们通常处理的是ODE本身具有不连续而不是外部驱动的情况。