Newsgroup: it.scienza.fisica
Titolo: Numerical Recipes

Per qualcuno che usi spesso o cmq conosca bene le Numerical 
Recipes (il sito non lo ricordo a memoria, ma da qualche 
parte l'url ce l'ho)
Sapete mica se si trova qualche routine (il linguaggio è 
abbastanza irrilevante) per la risoluzione dei sistemi 
lineari con qualche metodo furbo (che so, non Cramer, 
quell'altro ... come si chiama, di Gauss ? Non me lo ricordo).
Non me la sento di tentare di scrivere io del codice su un 
argomento che so fare a stento con carta e penna e il libro 
davanti :(
grazie in anticipo
P.S. ... tipo Archaeopterix, se non ricordo male, le 
consigliava, le N.R., vero ?
Cmq è rivolto a chiunque
ciao
Soviet

 Soviet
Io invece in genere sconsiglio vivamente lo scrivere routine numeriche
a mano. Per qualsiasi routine ti serve, e' *quasi certo* che esistano
librerie numeriche scritte da professionisti, testate, stabili e
veloci che fanno quello che ti serve.
Tra l'altro non sono mai stato un appassionato delle NR: gli algoritmi
possono essere buoni e stabili, ma l'implementazione e' tutto un altro
paio di maniche -- per fare una routine veloce non basta un algoritmo
veloce, serve anche una intima conoscenza dell'architettura della
macchina su cui vuoi far girare il programma (CPU o GPU? multitheaded?
cache coherent? quanti livelli di cache, con che dimensione, con che
associativita', con che dimensione della cache line? superscalare?
quate unita' floating point? ha unita' SIMD? quanto e' aggressivo il
prefetcher hardware? eccetera...).
La risoluzione dei sistemi lineari e' una delle cose piu' studiate e
di cui esistono piu' librerie in assoluto, quindi hai solo l'imbarazzo
della scelta. Il meglio sono in genere quelle fornite dal produttore
della tua CPU (Intel Math Kernel Library, AMD Core Math Library), ma
posono costare.  BLAS e LAPACK sono gratis e inclusa nelle maggiori
distribuzioni linux, ma immagino non siano ottimizzata bene come le
prime due.  Se invece vuoi lanciarti nella programmazione GPGPU,
CUBLAS e' BLAS per CUDA, non so se ci siano gia' delle librerie tipo
LAPACK open-source. Per OpenCL non so niente, ma immagino ci sia
qualcosa anche li'.
Pleg

 qualcosa anche li'.
Ma se uno ti chiede qualcosa contro le zanzare gli suggerisci una bomba 
all' idrogeno ? :-)
Io sarei molto cauto a suggerire la programmazione delle GPGPU anche a 
colleghi "affamati" di calcolo intensivo, figurarsi a Soviet che non 
credo abbia necessità  cosî estreme (mi cospargerò la testa di cenere se 
sbaglio).
Per Soviet:
Per fare i conti Lapack va benissimo. Mi lascia invece un po' 
perplessol'affermazione che il linguaggio non conti. Dipende da cosa 
vuoi fare. Per calcoli non ci sono problemi. Ma se invece vuoi guardare 
come sono fatte, non so se suggerirtele.
Comunque il sito delle num. rec. è
http://www.nr.com/oldverswitcher.html
"tonnellate" di sw numerico (in sorgente)  le trovi su
http://www.netlib.org/
Giorgio

 Pleg

 all' idrogeno ? :-)
Sempre e comunque :)
Quel che volevo dire e' che non ho idea di cosa gli serve: deve
risolvere un sistema 10x10, o un sistema 100mila X 100mila ?  Nel
dubbio, ho buttato li' un po' di roba :)
Pleg

 routine grafiche x ora non me ne occorrono, ma se mi trovi
GPGPU non e' solo grafica, e' tutto :)  viene usato nei supercomputer
per un sacco di algoritmi pesanti (da simulazioni di farmaci a ricerca
di idrocarburi).
Cmq mi pare decisamente fuori luogo qui, quindi non approfondisco.
Pleg

 Giorgio

 consigliava, le N.R., vero ?
Vero, ma io non sono certo una sorta di "autorità" nel
calcolo. Comunque siccome l'argomento è in parte OT, in
parte non ho più piacere di partecipare ai NG nostrani di
fisica (ho letto quasi per caso, ogni tanto faccio una
capatina e infatti sto usando l'altro server delle news),
e siccome non mi sembra la tua una mail valida, se me ne
mandi una valida posso darti qualche info in più ;)
ciao, Apx.

 da grossi problemi di traduzione (in C++ sarebbe peggio)
Esempio:
http://packages.debian.org/squeeze/liblapack-dev
a destra hai "download source package", scarica il .tar.gz e c'e'
tutto il codice delle routine -- purtroppo e' in Fortran, credo che ci
siano dei wrapper per il C ma non so di preciso (e' uno dei motivi per
cui, quando mi servirono delle librerie di questo tipo, usai le ACML,
almeno sono gia' in C :)
Le varie funzioni hanno nomi di 5--6 lettere, c'e' tutto un codice, lo
trovi da qualche parte, es. le funzioni che cominciano per 'd' sono a
doppia precisione ("double") mentre quelle che cominciano per 's' sono
a precisione singola.  In BLAS3 hanno tutto un codice del tipo
{precisione, tipo matrice, tipo operazione}, es. DGEMM sta per Double
GEneric Matrix-Matrix (GEneric e' uan matrice piena qualcunque, poi ci
sono funzioni specializzate per matrici diagonali, tridiagonali,
triangolari, ortogonali, simmetriche, eccetera).  Ovviamente conviene
sempre la funzione piu' specializzata che trovi, es. se hai delle
matrici triangolari usa le funzioni per matrici triangolari (quelle
per matrici piene funzioneranno lo stesso ma saranno piu' lente e
potenzialmente numericamente meno precise, perche' faranno piu' conti
inutilmente).
Pleg


http://www.gnu.org/software/gsl/manual/html_node/


grazie anche a te
Ora datemi il tempo di digerire i suggerimenti già emersi, 
il che sarà una cosa lenta :)
ciao
CCCP

 ciao, Apx.

A me pare proprio che state esagerando il problema!
Eppure Soviet_Mario e' stato chiaro: vuole bilanciare delle reazioni,
e ben difficilmente avra' piu' di 10 molecole tra reagenti e prodotti
(e ti vorrei vedere, prima a trovarle, e poi a darle ai tuoi poveri
studenti...).
Trattandosi di questo, sa gia'
1) che le equazioni non saranno mai mal condizionate
2) che la soluzione sara' in numeri interi (su questo vedi dopo)
per cui non c'e' *mai* alcun problema di accuratezza nell'algoritmo o
nella sua implementazione, ne' di efficienza, di tempo di calcolo ecc.
Insomma *qualunque* algoritmo, anche il piu' rozzo, va bene.
Io direi perfino Cramer...
Come contributo costruttivo, se Soviet_Mario vuole gli posso fornire
un codice del metodo Gauss-Jordan, scritto in Turbo Pascal, che credo
potra' tradurre a occhio in VB.
Credo di averlo ricavato anni fa proprio da NR.
Sono 80 righe, commenti inclusi.
Avrei piuttosto un commento sull'idea di base, ossia usare un sistema
di eq. lineari per bilanciare una reazione.
Primo: naturalmente uno dei coeff. andra' fissato in modo arbitrario.
Secondo: e' sicuro che non succeda mai che i coeff. incogniti superano
di due o piu' il numero di atomi coinvolti?
Avrei questo esempio:
H2O2 + KMnO4 + HCl --> O2 + MnCl2 + KCl + H2O.
Terzo: il fatto che la soluzione sia sempre in numeri interi fa
pensare che ci debba essere un metodo piu' elegante che non quello "a
carro armato" del sistema lineare.
Pero' la risposta non la so.
-- 
Elio Fabri
Perche' tu devi pur sapere, aggiunse, mio ottimo Critone, che parlare
scorrettamente non solo e' cosa brutta per se medesima, ma anche fa
male all'anima.

 Pero' la risposta non la so.
Mah, manco io. Anche solo tentando di formalizzare i 
ragionamenti che uso di solito, mi son reso conto di non 
saperli standardizzare, ergo se funge, l'approccio brute 
force andrebbe bene.
Mi viene un dubbio ulteriore.
Talune scritture sottodimensionate esistono sicuramente.
In generale reazioni che nascondono due (o più) reazioni più 
semplici parallele (e naturalmente le proporzioni relative 
possono variare in modo praticamente soggettivo).
In queste credo che il fallimento del metodo, di nuovo, mi 
segnalerebbe l'errore (anche se di norma le riconosco, o cmq 
se le scrivo io di compito evito di metterne di simili).
Es. (caso molto concreto)
se ho
C + H2O  -->  CO + H2
C + O2  -->  CO2
CO + H2O  -->  CO2
x * [C + H2O  -->  CO + H2] +
y * [C + O2  -->  CO2] +
z * [CO + H2O  -->  CO2 + H2] -----------------------------------
(x+y) C + y O2 + (x-z) CO  -->  (x+z) H2 + (y+z) CO2
qui non solo ho solo 3 elementi e 5 specie (quindi non meno 
di 5 coefficienti).
Ma in generale si possono trovare molte (infinite ? credo di 
si) cinquine. La ragione non so se sia perché il sistema è 
sottodimensionato (e se si, non so bene perché lo sia), ma 
cmq i bilanciamenti univoci non sono fattibili.
Qui, vedendo la scrittura somma, bisogna capire di quali 
reazioni indipendenti è realmente composta.
Poi si bilancia ciascuna singolarmente, poi si pongono 
almeno due condizioni arbitrariem tipo su X e Y, e si ricava 
la zeta ... se non ricordo male.
Cmq casi del genere avrei cura di evitarli a priori, 
ovviamente, ergo non mi interessa che la procedura 
automatica non potrebbe risolverli, dato che niente può 
risolvere univocamente in ogni caso.
ciao e grazie del codice !
una mia mail valida, quando hai tempo, è :
pasquale_...@infinito.it
(due underscore).
P.S. se ti interesserà il codice, anche solo parziale, fatto 
sinora, vale a maggior ragione per te.
ciao
Soviet

 davanti :(
In numerical recipes queste cose le trovi senza dubbio (in C, ma credo
anche in Fortran). Nel libro (reperibile ad es nelle biblioteche
universitarie) trovi anche dettagliate spiegazioni sugli algoritmi con
tanto di esempi e problemi fisici... cioè non solo il codice.
Se, come mi pare di aver capito, hai poca esperienza ma devi fare un
algoritmo relativamente semplice (poche righe di codice, in cui le
prestazioni e la robustezza non sono così fondamentali) puoi anche
partire dalle descrizioni degli algoritmi e tentare di implementare da
solo il codice (che in generale è un buon esercizio: ti permetterà di
comprendere bene varie problematiche del calcolo numerico e di tenere
sotto controllo tutti gli aspetti del tuo codice).

 studenti...).
Vero, il problema e' la "latenza" di un newsgroup moderato: non c'e'
vero botta e risposta, quindi quando Soviet_Mario specificava il
problema, io avevo gia' risposto.
Comunque, ho googolato un po' e non ho trovato alcun metodo
alternativo a quello di risolvere il sistema lineare.
Pleg

Soviet_Mario ha scritto:

se puo' interessare:
http://amath.colorado.edu/computing/Fortran/numrec.html
bye
-- 
L'aspra parabola di Pretty Minetti e' la quintessenza
del berlusconismo come sistema etico ed estetico. In
lei c'e' tutto, a partire dalla giovinezza, magnifica
ossessione, e dalla bellezza implementata dal
chirurgo. Gli studi al San Raffaele, arrivata
dalla provincia ricca. L'ambizione bruciante, la tv
sessista come rampa di lancio. Poi il miracolo vero:
la relazione intima con Lui, che tutto puo'. Il denaro,
la cooptazione nella cerchia stretta delle notti di
Arcore permeate dello zolfo di Lele Mora. La escalation
dei riti sessuali. Quindi l'inizio del distacco, il
ruolo logistico intorno all'harem di stelline e di
"zoccole" (definizione sua). La carriera politica
fasulla, come ricompensa. Fino allo scandalo Ruby,
l'inchiesta giudiziaria. La paura, il tradimento,
il rancore. Infine, chi puo' dirlo, la vendetta.
Una storia brutale, brutalmente italiana...
http://is.gd/epiviw

 vorrei che fosse questa discussione che ricordavo, mah
Questo posso averlo detto, non so a che proposito.
Ma se parli di grado, non si puo' trattare di eq. lineari.
Verrebbe da pensare invece che si trattasse di eq. *differenziali*, e
che io abbia detto che un sistema di n eq. di primo ordine si puo'
sempre trasformare in una sola eq. di *ordine* (non grado) n (e
viceversa.
