levmar

Software screenshot:
levmar
Dettagli del software:
Versione: 2.6
Data di caricamento: 15 Apr 15
Sviluppatore: Manolis Lourakis
Licenza: Libero
Popolarità: 18

Rating: 5.0/5 (Total Votes: 1)

levmar è un'implementazione del non lineare Levenberg-Marquardt minimi quadrati algoritmi in C / C ++.
La routine lmder da minpack, attuata nei primi anni '80 presso la Argonne National Lab, è forse il più utilizzato libera implementazione dell'algoritmo LM. lmder è scritto in Fortran77 e nel corso degli anni ha dimostrato di essere un pezzo affidabile del software. Considerando che le routine FORTRAN può essere chiamato da C / C ++, ci si potrebbe chiedere circa la motivazione per la scrittura di una versione di LM in C. Bene, il problema è che quando FORTRAN viene chiamato da C, il programmatore deve essere consapevole (e sono conformi alle ) diverse norme in materia di nome mangling, argomento che passa, il layout di memoria di matrice multidimensionale, le convenzioni di collegamento, ecc, che sono innaturali rispetto alle leggi ordinarie C. Una seconda ragione è che questo approccio dà per scontato che un compilatore FORTRAN per l'ambiente di programmazione di destinazione è disponibile, che potrebbe non essere necessariamente il caso. Un altro motivo ha a che fare con la mancanza di comprendere il funzionamento interno di una implementazione FORTRAN: Di tanto in tanto, quando è necessario capire esattamente ciò che il codice FORTRAN fa, alcuni pezzi di esso potrebbe sembrare incomprensibile per i programmatori senza alcuna conoscenza di FORTRAN. FORTRAN automatico per C traduttori (ad es f2c) non risolve il problema in quanto il codice C prodotta è abbastanza leggibile per l'uomo "non iniziati". Inoltre, la documentazione che descrive la matematica su cui l'applicazione si basa potrebbe essere oscuro o inaccessibili. Ultimo ma non meno importante, un'implementazione candidato LM in C dovrebbe essere libero e tecnicamente valido. Ad esempio, la variante C dell'algoritmo LM presentata nel libro "Numerical Recipes" (cioè mrqmin), non è sempre una scelta praticabile: Oltre al suo essere protetto da copyright, si è reputato mancare robustezza
. Per le ragioni di cui sopra, ho sviluppato il pacchetto levmar che include implementazioni C di sapori LM che sono anche utilizzabili con C ++. levmar include implementazioni doppie e singole precisione LM, entrambi con differenze analitiche e finite approssimata Jacobiani. Esso è fornito gratuitamente, sotto i termini della GNU General Public License. La teoria matematica dietro levmar vincoli è descritto in dettaglio nelle dispense Metodi diritto per i non-lineari minimi quadrati Problemi, da K. Madsen, HB Nielsen e O. Tingleff, Università Tecnica della Danimarca; Implementazioni Matlab degli algoritmi presentati nelle dispense sono inoltre disponibili. Si noti, tuttavia, che la formulazione del problema di minimizzazione adottata qui è leggermente diversa da quella descritta nelle dispense Usa
di funzione:.
Levmar offre diverse funzioni utente-callable obbedire alla seguente convenzione di denominazione: la prima lettera (d o s) specifica doppia o singola precisione e il suffisso (_der o _dif) denota Jacobiano analitico o approssimativa. Se presente, il LEC, bc e componenti BLEC implicano equazione lineare, scatola e scatola simultanea e vincoli equazioni lineari, rispettivamente. Più in particolare, levmar comprende le funzioni di seguito:
Ottimizzazione libera
dlevmar_der (): doppia precisione, Jacobiano analitico
dlevmar_dif (): doppia precisione, differenze finite approssimata Jacobiano slevmar_der
(): precisione singola, analitica slevmar_dif
Jacobiano (): precisione singola, differenze finite approssimata Jacobian
Ottimizzazione vincolata
dlevmar_lec_der () : doppia precisione, vincoli equazioni lineari, Jacobiano analitico
dlevmar_lec_dif (): doppia precisione, vincoli equazioni lineari, differenze finite approssimate Jacobiano
slevmar_lec_der (): precisione singola, i vincoli di equazioni lineari, analitica
Jacobian slevmar_lec_dif (): precisione singola, i vincoli di equazioni lineari, differenze finite approssimata Jacobian
dlevmar_bc_der (): doppia precisione, i vincoli di sicurezza, Jacobiano analitico
dlevmar_bc_dif (): doppia precisione, vincoli box, finita differenza approssimata Jacobiano
slevmar_bc_der (): precisione singola, i vincoli di sicurezza, analitica slevmar_bc_dif
Jacobiano (): precisione singola, i vincoli di sicurezza, differenze finite approssimata Jacobian
dlevmar_blec_der (): double precisione, scatola e vincoli equazione lineare, analitico dlevmar_blec_dif
Jacobiano (): doppia precisione, di dialogo e vincoli di equazioni lineari, differenze finite approssimate Jacobiano
slevmar_blec_der (): precisione singola, box & equazione lineare vincoli, Jacobiano analitico
slevmar_blec_dif (): vincoli singola precisione, Box & equazione lineare, differenze finite approssimate Jacobian
noti che con differenze finite per approssimare i risultati Jacobiane nelle valutazioni ripetitivi della funzione da montare. Con l'obiettivo di ridurre il numero totale di queste valutazioni, le funzioni xxxxxxx_dif implementare approssimazioni secante al Jacobiano con rango uno aggiornamenti di Broyden. Tutte le funzioni risolvere lo stesso problema, cioè cercano la p vettore dei parametri che meglio descrive (in termini di norma L2) il vettore x misurazioni. Più precisamente, data una funzione vettoriale f: R ^ m -> R ^ n con n> = m, calcolano ap tale che f (p) ~ = x, cioè la norma quadrata || e || ^ 2 = | | xf (p) || ^ 2 è ridotto al minimo. Inoltre, box vincoli della forma lb [i]

Cosa c'è di nuovo in questa versione:

  • Questa versione aggiunge il supporto per ridimensionamento diagonale xlevmar_bc_der (), che può migliorare la convergenza quando il punto di partenza è lontano dal vero minimizer.
  • Un solutore sistemi lineari sostenere la decomposizione di Cholesky parallelo PLASMA, la libreria di algebra lineare per i processori multi-core.
  • solutori lineari sono stati fissati in modo che operano su più bassi triangoli di matrici simmetriche, che si traduce in migliori prestazioni della cache.
  • I file di configurazione CMake per la costruzione del progetto sono stati rivisti.
  • sono state apportate molte altre modifiche minori.

Cosa c'è di nuovo in versione 2.5:

  • ATTENZIONE per le versioni precedenti UTENTI: Per una migliore coerenza e di evitare i conflitti, il nome del file di intestazione di levmar è stato cambiato da lm.h a levmar.h; si prega di aggiornare i file di origine di conseguenza.
  • Aggiunto il supporto per la minimizzazione sotto scatola simultanea, equazioni e disuguaglianza vincoli lineari (vedi funzioni xlevmar_bleic_der () e xlevmar_bleic_dif ()).
  • Implementate wrapper convenienza a xlevmar_bleic_der () e xlevmar_bleic_dif () trattare i casi più semplici, ad esempio vincolate xlevmar_blic_der () e xlevmar_blic_dif () supporto minimizzazione in scatola e vincoli di disuguaglianza lineari solo.
  • Aggiunto un risolutore di sistemi lineari basati sulla decomposizione UDUt (cioè, senza sqrt Cholesky).
  • Rimosso qualche copia di memoria inutili dalla maggior parte dei solutori lineari.
  • Aggiunto un nuovo problema di prova dati-montaggio (Osborne).
  • Fatto alcune altre piccole modifiche.

Cosa c'è di nuovo nella versione 2.4:

  • ATTENZIONE per le versioni precedenti UTENTI: La dimensione dell'argomento informazioni (cioè, LM_INFO_SZ) è stato aumentato di uno per accogliere un nuovo campo ritorno (cioè informazioni [9]) corrispondente al numero totale di sistemi lineari risolti nel corso della minimizzazione. Gli indici dei campi precedentemente restituiti nella matrice informazioni rimangono invariati.
  • applicato un regime di cache efficiente di più per il calcolo della Hessian J approssimativa ^ T * J e J ^ T * e per i problemi di piccole dimensioni di minimizzazione.
  • garantire che qualsiasi memoria di lavoro mantenuto tra invocazioni dei solutori lineari viene rilasciato al momento della cessazione di routine levmar.
  • garantire che solutori lineari utilizzano il minimo quantità di memoria ausiliaria, evitando occasionale over-allocazioni.
  • ha attuato un sistema di svolgimento del ciclo per velocizzare il calcolo di e = x-hx.
  • Corretto un paio di problemi con l'allineamento di memoria su sistemi a 64 bit.
  • funzioni aggiunte per il calcolo del coefficiente di determinazione.
  • affrontato un paio di problemi minori.

Programmi simili

libagf
libagf

20 Feb 15

SAGE
SAGE

22 Jun 18

Waveform
Waveform

3 Jun 15

Commenti a levmar

I commenti non trovato
Aggiungi commento
Accendere le immagini!