30/09/2018, 23:13

If statement thư viện boost odeint c++

Mình ko biết đặt cái tiêu đề như thế nào cho hợp lý hơn, sorry mọi người. Mình có cái chương trình sau dùng thư viện ODEINT trong boost để giải phương trình vi phân:

   #include <iostream>
#include <boost/array.hpp>
 #include <boost/numeric/odeint.hpp>

using namespace std;
using namespace boost::numeric::odeint;

const double sigma = 0.0018;

typedef boost::array< double, 1 > state_type;

void my_ode( const state_type &x , state_type &dxdt , int t )
{
dxdt[0] = sigma * x[0]*( 1 - x[0] );
/I want: if(t<=300)
dxdt[0]=0;
else
dxdt[0]=dxdt[0] = sigma * x[0]
( 1 - x[0] );
cout<<t<<endl;
*/

}

void write_ode( const state_type &x , const double t )
{
cout << t << ‘ ’ << x[0] << endl;
}

int main(int argc, char **argv)
{
state_type x = { 0.001 }; // initial conditions
typedef dense_output_runge_kutta<controlled_runge_kutta<runge_kutta_dopri5<state_type> > > stepper_type;
integrate_const(stepper_type(), my_ode, x, 0.0, 500.0, 1.0,write_ode);
}

Cái mình đang cần là đặt điều kiện sao cho dxdt[0]=0 nếu t<=300, như ở trong comment dưới hàm my_ode(). Nhưng hiện tại thì nó ko cho kết quả đúng.
Thêm nữa, mình ko thể hiểu sao giá trị t ở trong hàm my_ode() lại khác vs hàm write_ode().
Mong mọi người chỉ giúp.
Cảm ơn!

Bài liên quan
0