@@ -4,16 +4,17 @@ using namespace qlibs;
44
55/* ===========================================================================*/
66void nState::init ( const real_t x0,
7- const real_t sn_1,
8- const real_t sn_2 ) noexcept
7+ const real_t sn_1,
8+ const real_t sn_2 ) noexcept
99{
1010 x[ 0 ] = x0;
1111 x[ 1 ] = sn_1;
1212 x[ 2 ] = sn_2;
1313}
1414/* ===========================================================================*/
1515real_t nState::integrate ( const real_t s,
16- const real_t dt ) noexcept
16+ const real_t dt,
17+ const bool bUpdate ) noexcept
1718{
1819 switch ( iMethod ) {
1920 case INTEGRATION_RECTANGULAR:
@@ -31,30 +32,36 @@ real_t nState::integrate( const real_t s,
3132 default :
3233 break ;
3334 }
34- update ( s );
35+ if ( bUpdate ) {
36+ update ( s );
37+ }
3538
3639 return x[ 0 ];
3740}
3841/* ===========================================================================*/
3942real_t nState::derive ( const real_t s,
40- const real_t dt ) noexcept
43+ const real_t dt,
44+ const bool bUpdate ) noexcept
4145{
46+ float ds = 0 .0F ;
47+
4248 switch ( dMethod ) {
4349 case DERIVATION_2POINTS:
44- x[ 0 ] = ( s - x[ 1 ] )/dt;
50+ ds = ( s - x[ 1 ] )/dt;
4551 break ;
4652 case DERIVATION_BACKWARD:
47- x[ 0 ] = ( ( 3 .0_re*s ) - ( 4 .0_re*x[ 1 ] ) + x[ 2 ] )/( 2 .0_re*dt );
53+ ds = ( ( 3 .0_re*s ) - ( 4 .0_re*x[ 1 ] ) + x[ 2 ] )/( 2 .0_re*dt );
4854 break ;
4955 case DERIVATION_FORWARD:
50- x[ 0 ] = ( ( 4 .0_re*x[ 1 ] ) - ( 3 .0_re*x[ 2 ] ) - s )/( 2 .0_re*dt );
56+ ds = ( ( 4 .0_re*x[ 1 ] ) - ( 3 .0_re*x[ 2 ] ) - s )/( 2 .0_re*dt );
5157 break ;
5258 default :
5359 break ;
5460 }
61+ if ( bUpdate ) {
62+ update ( s );
63+ }
5564
56- update ( s );
57-
58- return x[ 0 ];
65+ return ds;
5966}
6067/* ===========================================================================*/
0 commit comments