infinite loop in integrate_adaptive/odeint
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 45/100
Direzione di ricerca
Inizia con il riproduttore nell'issue ed esamina odeint/integrate/detail/integrate_adaptive.hpp intorno alle righe 122, 135-137 e 144. Controlla l'inizializzazione dello stepper a output denso e la condizione del ciclo per il caso di integrazione all'indietro, quindi verifica che l'esempio fornito termini senza modificare il comportamento di integrazione previsto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
I am running into an infinite loops applying integrate_adaptive in the dense output version (odeint/integrate/detail/integrate_adaptive.hpp l. 122).
That's an easy test case replicating the issue:
auto f = []( const double& /*y*/, double& dy_dx, double /*x*/ ) {
dy_dx = haas::math::numeric::constant<double>::two_pi() / -35.0;
};
typedef boost::numeric::odeint::runge_kutta_dopri5<state_type> error_stepper_type;
auto stepper = boost::numeric::odeint::make_dense_output<error_stepper_type>( 1.0e-6, 1.0e-5);
// Initial conditions
state_type state1 = 0.0;
// Solve ODE
boost::numeric::odeint::integrate_adaptive( stepper, f, state1, 0.0, -23.8, -23.8 / 100 );
The problem seems to rise from a mismatch between the new initialization of stepper st ( l. 144) and the while loop condition (l. 135).
I would suggest to change l. 135-137 from
while( less_eq_with_sign( static_cast<Time>(st.current_time() + st.current_time_step()) ,
end_time ,
st.current_time_step() ) )
into:
while( less_eq_with_sign(
st.current_time_step(), static_cast<Time>( end_time - st.current_time() ),
st.current_time_step() ) )
Comments very welcome!
- Lingua principale
- C++
- Stelle
- 55
- Fork
- 59
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Non abbiamo ancora controllato i file di configurazione di questo progetto. Parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di boostorg/odeint
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 43/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
Tutte le issue di boostorg/odeint
Issue simili
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
sandialabs/seacas#945 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
ROCm/FastFlowLM#757 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
espressif/esp-matter#1867 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
mltframework/shotcut#1920 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno