說我有以下boost::odeint
代碼:限號:: odeint整合
#include <iostream>
#include <boost/array.hpp>
#include <boost/numeric/odeint.hpp>
using namespace std;
using namespace boost::numeric::odeint;
const double sigma = 10.0;
const double R = 28.0;
const double b = 8.0/3.0;
typedef boost::array< double , 3 > state_type;
void lorenz(const state_type &x , state_type &dxdt , double t){
dxdt[0] = sigma * (x[1] - x[0]);
dxdt[1] = R * x[0] - x[1] - x[0] * x[2];
dxdt[2] = -b * x[2] + x[0] * x[1];
}
void write_lorenz(const state_type &x , const double t){
cout << t << '\t' << x[0] << '\t' << x[1] << '\t' << x[2] << endl;
}
int main(int argc, char **argv){
state_type x = { 10.0 , 1.0 , 1.0 }; // initial conditions
cout<<"Steps: "<<integrate(lorenz , x , 0.0 , 25.0 , 0.1 , write_lorenz)<<endl;
}
如何修改代碼,以便集成了一定數量的步驟後,將打破?我正在運行大量集成,並且希望避免花費太多時間來集成任何特定系統。
我想用integrate_n_steps()
的,但是這可能意味着,過去的結束時間的集成前進我很感興趣。
所以,你要修復的實時消費,而不是步的數量?休息之後,你期待什麼?放棄集成或輸出某些類似的東西? – unsym
@hwlau,我想放棄整合。雖然我希望程序在休息之後繼續運行,但通過固定數量的步驟或執行時間的切割都可以工作:只有集成商應該停止。 – Richard