Повторяющаяся дельта-функция в 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,

То есть я хотел бы иметь повторяющуюся дельта-функцию.

В качестве альтернативы, если бы я мог иметь дельта-функцию, возникающую в конечном количестве моментов времени, я мог бы аппроксимировать повторение.

К сожалению, я не смог найти документацию по дельта-функциям в odeint. Кто-нибудь знает, как этого добиться?

1

Решение

Это невозможно в odeint, по крайней мере, не в общем. У вас есть две альтернативы:

Сначала приблизимся к дельта-пикам очень острых гауссиан.

Во-вторых, интегрируйте в момент пика. Примените дельта-пик, то есть добавьте шаг к существующему решению и начните интегрировать с этой точки до следующей вершины и так далее.

Существуют также «экзотические» методы для ODE с разрывами, но они обычно относятся к случаю, когда у самого ODE есть разрывы, а не ваше внешнее вождение.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]