Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

infinite loop in integrate_adaptive/odeint

Aperta
#41 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
45/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Ferma
Stack tecnologico
cpp
Ambito
tooling

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

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di boostorg/odeint

Tutte le issue di boostorg/odeint

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.