01/10/2018, 00:23

Nhờ mọi người xem giúp em code của chương trình này

Em có chương trình sau sử dụng thư viện ODEINT trong boost. Nhưng không hiểu sao lúc cout kết quả (ví dụ như BW_test) từ hàm ode_write () thì giá trị đầu tiên lại bằng 0, nhưng nếu cout BW từ hàm khác: GarunsFlow() hoặc void ode_system( const state_type &x , state_type &dxdt , const double t ) thì giá trị đầu tiên khác 0 đúng như mong đợi. Em đã đọc lui đọc tới để xem trật tự hàm cũng như xem có cái nào chưa đc link không, mà ko tìm ra đc. Nhờ các anh chị trong nhóm xem giúp em với ạ.

Em cảm ơn nhiều!

#include <iostream>
#include <boost/array.hpp>    
#include <boost/numeric/odeint.hpp>    
using namespace std;
using namespace boost::numeric::odeint;

const double sigma          = 0.0018;    
enum DECLARE_ODE {A};    
typedef boost::array< double, 1 > state_type;

struct GarunsFlow_c{
        double sen;
        double BW;    
    };
GarunsFlow_c GarunsFlow(const state_type &state)
{
    GarunsFlow_c r;
    r.sen      =sigma * state[A] * (1-state[A]);
    r.BW = state[A];

    return r;   
}

static double speedA(const GarunsFlow_c &r) { return r.sen;}   
double BW_test;
void ode_system( const state_type &x , state_type &dxdt , const double t )
{
    const GarunsFlow_c g_flow = GarunsFlow(x);

            dxdt[A] = speedA(g_flow);
            BW_test=g_flow.BW;      
}

void write_ode( const state_type &x , const double t )
{
    cout <<t<<'	'<<x[A]<<'	'<<BW_test << 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(), ode_system, x, 0.0, 10.0, 1.0,write_ode);

}
vtrnnhlinh viết 02:29 ngày 01/10/2018

tuy mình trình còn yếu, chưa giúp được, nhưng vẫn có một số gợi ý sau cho bạn. Ít nhất thì phần có code bạn phải preformatted nó lên vd như vầy nè cho dễ nhìn và nhấn mạnh nội dung:

Em có chương trình sau sử dụng thư viện ODEINT trong boost. Nhưng không hiểu sao lúc cout kết quả (ví dụ như BW) từ hàm ode_write () thì giá trị đầu tiên lại bằng 0, nhưng nếu cout BW từ hàm khác: BodyWeight_c BodyWeight (const state_type &state) hoặc void ode_system( const state_type &x , state_type &dxdt , const double t ) thì giá trị đầu tiên khác 0 đúng như mong đợi. Em đã đọc lui đọc tới để xem trật tự hàm cũng như xem có cái nào chưa đc link không, mà ko tìm ra đc. Nhưng các anh chị trong nhóm xem giúp em với ạ.
Link tải full code đây ạ: https://drive.google.com/open?id=0B7MXmL7Gni2ZNHAxcG1uSW5GVTg
Em cảm ơn nhiều!

thứ hai, mình nghĩ bạn nên xác định phần code bị lỗi rồi up lên fiddle như http://ideone.com/ để dân tình sửa chữa, chứ có ai đâu rảnh down về sửa rồi lại up lên cho bạn, trừ mấy bác siêu nhiệt tình, hay phải có hình code gì đó chứ. Mà chắc gì sửa rồi up lên bạn biết sửa chỗ nào chỉ có góp ý đấy thôi, biết có sai gì không, gạch đá xin nhận.

Phuong viết 02:29 ngày 01/10/2018

Cảm ơn bạn vtnlinh nhiều. Mình đã sửa lại code để mô phỏng lỗi của chương trình, theo gợi ý của bạn.

Bài liên quan
0