Esiste un set open source di solutori ODE per C che utilizzano il tipo complesso C99 nativo?


12

Ho usato GSL come base di molte delle mie simulazioni, ma è un po 'eccessivo per i miei scopi e definisce il suo tipo complesso per motivi legacy. Invece di programmare il mio solutore ODE Runge-Kutta, che probabilmente non sarebbe molto efficiente, ci sono solutori ODE open source che usano il tipo complesso C99 nativo?


Non so dove vuoi usarlo, ma in generale RK è abbastanza difficile da implementare in modo non efficiente ... Hai fatto dei benchmark che hanno dimostrato di avere questo problema?
mbq,

2
Nessuna. Non ho scritto il mio perché non voglio reinventare la ruota. Se devo, lo farò, ma trovare il tempo da dedicare a qualcosa che non è rotto non è per me in questo momento. Se arriva una risposta è quello che sto cercando, non potrò effettivamente utilizzarlo se per alcuni mesi. Inoltre, RK non è sempre ciò di cui ho bisogno, ma solo ciò per cui conosco l'algoritmo.
qubyte

Per inciso, sto facendo simulazioni di piccoli sistemi quantistici per la maggior parte del tempo. Non esclusivamente però.
qubyte

Vorrei sconsigliare l'implementazione di RK a passo variabile variabile (tranne per scopi didattici). Ci sono molte euristiche coinvolte nella ricerca della dimensione ottimale del passo.
Jitse Niesen,

Come ho detto, qualsiasi cosa scriverei rapidamente sarebbe sbagliata o lenta. È particolarmente difficile implementare RK con input / output complessi? So che puoi semplicemente dividerlo in due parti reali, ma questo è un po 'fastidioso!
qubyte

Risposte:


10

Potresti considerarlo "eccessivo", ma il pacchetto di integrazione temporale di PETSc può essere usato con il complesso C99 (configura --with-scalar-type=complex). I metodi supportati includono

Queste implementazioni sono particolarmente appropriate per problemi ad alta dimensione come equazioni differenziali parziali discretizzate (metodo delle linee).


È un po 'grande, ma non lo sapevo, quindi +1. Idealmente, qualunque cosa io usi non sarà più grande di GSL. Dare un'occhiata al manuale e vedere cosa penso.
qubyte il

Giusto per essere chiari, ti colleghi a queste librerie in fase di compilazione. È giusto?
qubyte

Nulla è collegato al momento della compilazione. Mai. Il collegamento viene eseguito dopo la compilazione (anche se il compilatore richiama il linker). Puoi caricare dinamicamente la libreria, ma avrai bisogno delle intestazioni per compilare il tuo codice da chiamare nella libreria. Se ciò non risponde alla tua domanda, ti preghiamo di spiegare cosa vuoi fare.
Jed Brown,

Hai ragione ovviamente. Errore sciocco, ma sapevi cosa intendevo dire. La mia domanda sarebbe stata meglio formulata come "Devo collegarmi a queste librerie?" al contrario di compilare i bit che richiedo contemporaneamente al mio codice come nel caso di Boost. Sono consapevole che per chiamare le funzioni da una libreria sono necessarie le intestazioni, lo faccio da un po 'di tempo.
qubyte

Sì, compili PETSc indipendentemente dalla tua applicazione. Non è solo intestazione come Boost.
Jed Brown,

1

Un'altra opzione che hai, a meno che il sistema non sia piuttosto complicato, è quella di passare da una notazione complessa a un problema con due incognite che rappresentano la parte reale e immaginaria. È quindi possibile utilizzare un solutore ODE standard con valori reali.


Questo è esattamente ciò che sto cercando di evitare. In effetti gli integratori GSL sono reali solo se la memoria serve, quindi questo è quello che sto facendo al momento.
qubyte
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.