Re: Numerical Recipes

From: Soviet_Mario <Soviet.Mario_at_CCCP.MIR>
Date: Sat, 19 Feb 2011 21:45:37 +0100

Il 19/02/2011 21:06, Elio Fabri ha scritto:
> 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...).

si infatti, ho raddoppiato per cautela, solo un (grosso)
margine per eventualmente evitare crash o figuracce, non si
sa mai :)

> Trattandosi di questo, sa gia'
> 1) che le equazioni non saranno mai mal condizionate

infatti, anzi se il metodo floppasse, mi direbbe che ho
messo qualche svista nelle formule !

> 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...

c'entro (lol)
volevo dire Centro, anche rozzo mi va.
Certo, Cramer ... vedere quell O(N^2*N!) mi fa una certa
paura, ma non ho manco provato a mettere dentro 10 equazioni.
Direi che sono un bel po' di calcoli

>
> 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.

Guarda, ti sono stato gi� debitore di spiegazioni varie
volte, ma questa mi faresti proprio un favore grosso !
Tra l'altro la traduzione pascal vb � praticamente
letterale, hanno una struttura pari pari.

Aggiungo due considerazioni, una buona e una "cattiva"

Premesso che si avvicina la primavera e i lavori edilizi
arretrati stanno morsicandomi la coscienza :-(
La cattiva � che da quando ho avuto la settimana di scrutini
ho sospeso ogni aggiunta al programma di correzione dei
problemi. E boh, chiss� se riesco ancora a trovare
abbastanza tempo per finire e quando.
La buona � questa : se interessa, in qualsiasi momento posso
dare il codice gi� prodotto (magari qualche giorno di
riordino e magari qualche commento da aggiungere me lo
prendo per piet�)
L'altra � che, naturalmente, i contributi verranno citati,
sia commentando il codice che in un eventuale splash screen
aggiunto ad hoc (per ora non c'�, ma che sar� mai metterlo).
A meno di non ricevere indicazioni contrarie.


>
> Avrei piuttosto un commento sull'idea di base, ossia usare un sistema
> di eq. lineari per bilanciare una reazione.

forse la memoria mi inganna, ma mi pareva che tanto tempo fa
fosse un'osservazione proprio tua, questa.
Io, oddio magari mi sbaglio, non ero sicuro che il sistema
potesse essere esteso alle redox (mentre ero certo che
fungeva di sicuro alle non redox), ma mi pare di avere avuto
garanzie che fungesse comunque. O se non eri tu, un altro, �
passato molto.
Con te di sicuro una volta mi avevi detto che qualsiasi
sistema lineare pu� essere integrato in una sola equazione
di uan sola incognita, ma elevando il grado ad ogni
incognita nascosta (il procedimento non me lo ricordo). Non
vorrei che fosse questa discussione che ricordavo, mah

> 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?

credo che possano superare eccome se le reazioni si
inventano (formalmente corrette cmq)

Cl2 + Cl2O7 --> Cl2O + Cl2O5

questa ha 4 coefficienti, e solo due atomi.

Fa differenza ? Il sistema non � pi� dimensionato bene ?



> Avrei questo esempio:
>
> H2O2 + KMnO4 + HCl --> O2 + MnCl2 + KCl + H2O.

Ancora pi� magra se ad es fai

H2O2 + CrO3 + HCl --> O2 + CrCl3 + H2O

Ma spiegami se questo sotto (o sovra ?) dimensiona il sistema.

HN3 + HNO3 --> N2 + NO + H2O

in generale un atomo con tante valenze distinte, sin quando
la redox non implica "incroci" del diagramma redox delle
valenze, pu� generare facilmente questa situazione.

CH2O + HCOOH --> CH3OH + CO2

>
> 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.

Beh, delle regolette pratiche per procedere le ho, ma hanno
un certo numero di clausole specifiche.

> 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__esposito_at_infinito.it

(due underscore).
P.S. se ti interesser� il codice, anche solo parziale, fatto
sinora, vale a maggior ragione per te.
ciao
Soviet
Received on Sat Feb 19 2011 - 21:45:37 CET

This archive was generated by hypermail 2.3.0 : Fri Nov 08 2024 - 05:10:29 CET