CodeNinja <codeninja_NOSPAM__at_libero.it> wrote in message
3bfcce2b.196752_at_news.inwind.it...
> Salve
>
> avrei bisogno di un aiuto importante...e credo proprio che su questo
> NG ci sia qualcuno che possa aiutarmi (dato che i fisici credo si
> dilettino molto anche nel "macinare numeri"! :-)
> Avrei bisogno di una libreria C/C++ free, che consetna di risolvere
> sistemi lineari di grosse dimensioni (es.: 3600x3600).
http://www.netlib.org/clapack/index.html
http://math.nist.gov/tnt/index.html
Un paio di osservazioni: se A � sparsa o bandata, come si avrebbe
dalla discretizzazione di un sistema di equazioni differenziali lineari
alle derivate parziali con appropriate condizioni al contorno (magari
su un mesh 2D cartesiano 60x60 ), allora il tuo sistema non � manco
piccolo, ma proprio giocattolo. Questo per� se ti scrivi la *tua* routine
di risoluzione, adatta a *quel* problema, in cui non terrai in memoria
tutti gli elementi di A ma solo quelli non nulli e fra loro distinti,
evitando cos� anche inutili moltiplicazioni per 0. A tal fine, sul sito
www.netlib.org trovi i "templates", cio� tracce di programmi, scritte in
PDL, per implementare da te il solver per il tuo specifico problema.
Se invece A � densa o addirittura piena, allora effettivamente ti potrebbe
interessare una generica subroutine gi� fatta. Comunque, a meno che A
non abbia un numero di condizionamento davvero alto, una diagonale
principale con elementi piccoli rispetto a quelli fuori diagonale, o altre
caratteristiche "patologiche", il problema � ancora semplice, e ci� non �
del tutto un bene perch� ti lascia l'imbarazzo della scelta di quale metodo
usare, fra le miriadi che troverai sui suddetti siti. Cos� alla cieca,
l'unico consiglio che mi sento di darti � di usare, per massima sicurezza,
un metodo iterativo.
>La matrice dei
> coefficienti e' simmetrica (questo potrebbe semplificare un po' le
> cose, giusto?)
Di per s� no. Difatti ci� che pu� essere utile � l'assenza di autovalori
complessi, ma non di A, bens� della/e matrice/i di transizione T/T_n
( per i metodi iterativi). Per� solo alcuni metodi assicurano che data
una A simmetrica, T ( T_n ) sar� simile ad una matrice simmetrica. La
questione di preferire o meno tali metodi rispetto ad altri dipende da A,
dall'architettura del tuo computer o cluster, ecc.
Se invece sai che A � anche definita positiva, allora altroch� se
semplifica: puoi usare una routine di fattorizzazione incompleta di
Cholesky ( sta sempre in quelle due libraries che ti ho detto: devi
mettere in ingresso A, e salvare la matrice che d� in uscita ), e poi il
metodo PCG (Preconditioned Conjugate Gradients), per ottime
prestazioni. Vedi sempre i "templates" su netlib per chiarimenti, o
o anche l'eccellente libro "Numerical Recipes for C/C++", che
rappresenta un ottimo investimento se hai anche solo un vago
interesse nel calcolo numerico.
> Qualcuno potrebbe segnalarmi una tale libreria (se esiste...) e da
> dove scaricarla?
>
> Grazie *mille*!!
> Ciao
Prego, ciao
Andrea
P.S.: non ho tempo per darti altri aiuti, qualora dovessi averne bisogno,
ma ti posso consigliare un giro su it.scienza.matematica oppure su
sci.math.numerical.analysis.
Received on Mon Nov 26 2001 - 16:19:24 CET