gpt4 book ai didi

c++ - odeint 中的循环增量函数

转载 作者:太空宇宙 更新时间:2023-11-04 14:11:03 27 4
gpt4 key购买 nike

我有以下 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 函数的文档。有谁知道如何实现这一点?

最佳答案

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

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

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

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

关于c++ - odeint 中的循环增量函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14342063/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com