【问题标题】:Recurring delta function in odeintodeint 中的重复增量函数
【发布时间】:2012-12-29 19:22:09
【问题描述】:

我有以下 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 函数在有限数量的时间点发生,我将能够近似递归。

很遗憾,我无法在 odeint 中找到关于 delta 函数的文档。有谁知道如何做到这一点?

【问题讨论】:

    标签: c++ odeint


    【解决方案1】:

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

    首先通过非常尖锐的高斯函数来近似 delta 峰值。

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

    对于具有不连续性的 ODE,还有一些“奇特的”方法,但它们通常会处理 ODE 本身具有不连续性而不是外部驱动的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 2020-06-25
      • 2022-01-17
      • 1970-01-01
      • 2014-02-11
      相关资源
      最近更新 更多