Re: Calcoli con grandezze fisiche e unità di misura

From: Tommaso Russo, Trieste <trusso_at_tin.it>
Date: Sun, 06 Feb 2011 23:23:55 +0100

Soviet_Mario ha scritto:
> Il 02/02/2011 00:44, Tommaso Russo, Trieste ha scritto:
>> Elio Fabri ha scritto
>>> Tommaso Russo ha scritto

> dunque, purtroppo lo stiamo perdendo ... :-)

Manno', si e' reso necessario un consulto con alcuni luminari, ma ora e'
piu' chiaro quale defibrillatore usare. Nel frattempo il paziente e'
stato tenuto in coma farmaceutico (non avrai mica scritto ancora una
linea di codice, no? Il bravo paziente deve pazientare).

Nel seguito do' alcune risposte puntuali ai dubbi del paziente, alla
fine (in cauda venenum, che vuol dire anche medicina) prescrivo la mia
cura alla tua domanda da OP.

Ovviamente puoi sentire anche un secondo, terzo, quarto parere, eh! :-)


>>> Per me gli argomenti delle funzioni citate *debbono essere numeri puri*.
>> OK, e questa e' la tua posizione. Considerare solo funzioni analitiche
>> R->R.
>
> Houston abbiamo un problema. Quella scrittura non mi dice niente. Anche
> il termine "applicazione" per me ha il solo significato di "eseguibile",
> "programma"

E' Analisi I: un'applicazione e' una legge che consente di associare ad
ogni elemento di un insieme A, detto dominio, un solo elemento di un
insieme B detto codominio. Se ogni elemento dell'insieme B e' associato
a un solo elemento di A, l'applicazione e' iniettiva. Se ogni elemento
di B e' associato almeno ad un elemento di A, l'applicazione e' detta
suriettiva. Un'applicazione iniettiva e suriettiva e' invertibile, ossia
consente di risalire da ogni elemento di B ad uno di A.

Applicazione e funzione sono sinonimi, ma il termine funzione e'
preferito quando il codominio e' un campo numerico.

Se A=B=retta reale, allora hai un'applicazione di R in R (o R->R), dove
R e' l'insieme di numeri reali.

Una funzione analitica e' esprimibile localmente come serie di potenze
convergente (Taylor, McLaurin). Le trigonometriche, esponenziali e loro
inverse sono tutte analitiche.

Su R, sin(x) non e' ne' iniettiva (sin(x) = sin (k*2pi+x)) ne'
suriettiva (!Esiste x: sin(x) = 2). Ma restringendo il dominio per
esempio a ]-2pi,pi] e il codominio a [-1,1], diventa invertibile anche lei.


> dunque, nel programma le scritture saranno di tipo in apparenza solo
> matematico. Sin(X) e stop. Ma X avr� associata una descrizione a parte,
> indipendente dall'uso sintattico, come a dire dei metadati, che saranno
> confrontati (match) coi tipi attesi per l'operatore (unario), e il
> verdetto dipender� dal match o non match

No, non basta: anche se il match c'e', puo' essere ancora necessario
moltiplicare l'argomento per un fattore di conversione. E comunque i
metadati devono essere esaminati dal metodo Sin, per cui anche se non li
metti formalmente fra gli argomenti della funzione (informatica), ma li
lasci in un'area comune, ne sono argomenti sostanziali. Altrimenti hai
una funzione (informatica) che accetta un floating in input e
restituisce un floating: insomma, una funzione (matematica) R->R.

> ... sintatticamente non implemento coppie. I metadati
> sono etichette visualizzabili solo a parte

Questo pone un'ipoteca sulla soluzione del tuo problema da OP: se tu
volessi scrivere equazioni fra grandezze fisiche ("quantity equations",
come riportate dal BIPM da Pangloss), sarebbe giocoforza passare come
input sia la loro misura o valore numerico, sia l'unita' di misura.
Visto che vuoi usare funzioni che accettano in input solo un numero
floating point e danno in output un altro numero floating, dovrai per
forza usare "numerical value equations".

>> Alla fine arriviamo alla stessa formula. La differenza e' che per me
>> Sen(a) (maiuscola per distinguerlo da sin) e' un'applicazione {a:a e' un
>> angolo} -> R, mentre per te sin(x) e' R->R.
>
> E qui l'abbiamo perso (io).

No, tranquillo :-)

> Concretamente devo implementare un'unica scrittura per le funzioni, che
> siano analitiche, trascendenti o quel che si vuole, ma devo scrivere un
> "coso" usabile da studenti anche e soprattutto sin dalla prima (cio� il
> momento in cui perdi l'occasione di imparare che controllare le
> dimensioni � una cosa importante)

OK. Ne tengo conto.

>> Sen(x,1) = sin(x) (R->R)
>> Sen(x,rad) = sin(x/1) (angoli in radianti->R)
>> Sen(x,�) = sin(x*pi/180.00) (angoli in gradi->R)
>> Sen(x,gon) = sin(x*pi/200.00) (angoli in gradi centesimali->R)
>> Sen(x,qualsiasi altra cosa) -> errore.
>
> Allora, cio' che scrivi dopo la virgola sar� nascosto nei metadati e
> visibile solo nella scheda del DATO.

OK.

> Cmq ... ,1 cosa significa ? � un numero puro ?

Nelle mie intenzioni doveva essere l'unita' di misura delle grandezze
adimensionali, cioe' il numero 1.

> in definitiva che faccio, accetto come argomenti SIA angoli SIA numeri
> puri?

No, no: per trigonometriche ed esponenziali saranno sempre numeri puri.
Eventuali angoli espressi in gradi li trasformerai, prima, in radianti.

> E il valore che esce � un numero puro sempre?

Si'.

> Su questo si � raggiunto l'accordo ?

Direi di si'.

> Dunque, non so, ma non mi pare che questo controllo dimensionale che
> devo fare coincida con l'analisi dimensionale.

Infatti, sono solo lontani parenti.

> Diciamo solo che i
> ragazzi devono usare formule, non inventate da loro, ma date per buone,
> e nell'infilarci dentro gli opportuni valori devono stare attenti a che
> i dati abbiano le dimensioni attese. Questo dovrebbe potersi fare.

Si', si puo'.

> P.S. dolorosamente osservo che la mia antica spina nel fianco dei
> logaritmi dimensionali e le costanti di equilibrio sono cascate nel vuoto.
> ...
> Ln(Keq) = -DG�/RT
>
> il secondo membro � adimensionale
> il primo DEVE diventarlo
> l'argomento del logaritmo non lo � ...
> che azz��_at_@##??!! succede ?

Su questo credo proprio di aver capito il casino che fanno i chimici ed
Elio Fabri concorda (che e' un casino) :-)

> Come dicevo mi resta anche la spina nel fianco dei logaritmi ed
> esponenziali, perch� mi pare che esista almeno una formula (tra l'altro
> un pilastro della termodinamica, la legge di Guldberg Waage) che "pare"
> (dico pare per cautela, ma a me sembra certo) avere dei logaritmi con
> argomento dimensionato.

Non e' un pilastro della Termodinamica, e' un pilastro della Chimica ;-)
E la dimensione dell'argomento e' solo apparente. Nei testi di Chimica
che ho visto sinora compaiono *quasi sempre* argomenti *non*
dimensionali. E quando trovi un'equazione dimensionalmente corretta e
che percio' sembra fra grandezze, come ad esempio

deltaG-deltaG� = R T ln(P/P�)

e' solo perche' e' stata tratta da un libro di Fisica, ma immediatamente
convertita a "numerical value equation" con la scelta, implicita o
esplicita, delle unita' di misura che verranno usate nel seguito.

> Uffi
> Ciao e grazie del vespaio (che non pensavo di sollevare)

E' stato utilissimo, non solo per te, ma anche per un paio di studenti
qui vicino che stanno affrontando separatamente proprio le equazioni di
equilibrio :-)


OK, ora la /pars construens/.



Tratto per primo un programma che tratti *solo* problemi di Fisica, si
capira' dopo perche'.

Nel corpo del programma userai solo "numerical value equations".

Questo significa che, prima di scrivere la prima riga di codice, devi:

  - definire esattamente le unita' di misura che userai per ogni singola
grandezza. Nel caso della Fisica, puoi limitarti a usare strettamente le
unita' di misura del SI: m, Kg, s, A (o C), K, e le loro derivate: ti
semplifichera' la vita sia nell'implementazione delle formule, sia nel
reperimento dei valori numerici delle costanti universali. Ma,
ovviamente, puoi fare anche scelte diverse: l'importante e' che poi tu
rispetti la scelta fatta nell'implementazione di tutte le formule che
userai. Sarai facilitato dal fatto che la maggior parte dei testi di
Fisica usa "quantity equations", equazioni fra grandezze, assegnando
alle costanti universali un simbolo piuttosto che esprimerle
numericamente (dando per implicite le loro unita' di misura) o
dimensionalmente (p.es. scrivendo 1.3806504*10^-16 erg K^-1 al posto di
k_B). Per cui potrai assegnare il giusto valore numerico alle variabili
o simboli "costanti universali" G, kB, eps_0, mu_0, h, hbar... e
trascrivere le formule esattamente come le leggi.

  - DOCUMENTARE LA TUA SCELTA. Questo e' un punto fondamentale per la
manutenibilita' e la modificabilita' del software. Poche righe di
commento messe con grande evidenza all'inizio del main saranno
sufficienti. Ma se non ce le metti, *sicuramente* prima o poi ti
capitera' di apportare modofiche usando "numerical value equations"
buone solo in un set di unita' di misure diverse.
  (Mi e' capitato di recente di cercare di capire che cavolo di unita'
di misura usava un programma di simulazione del comportamento di
nanotubuli di piombo sottoposti a trazioni e temperatura diverse. La
persona che mi chiedeva aiuto in merito doveva introdurre una rotazione
del sample fino a un valore prefissato di omega, aggiungendo a ogni step
un momento della QDM ad ogni atomo. L'unica unita' di misura di cui
eravamo certi e' che la temperatura veniva misurata in K. Dall'ispezione
del sorgente, e dal valore di kB, fu possibile capire che l'energia
veniva espressa in keV. Sul resto, nebbia. Alla fine di una lunga
indagine riuscimmo a contattare l'estensore della prima versione e
scoprimmo che le distanze venivano espresse in angstrom, le masse in
dodicesimi della massa dell'atomo C_12 e i tempi in nanosecondi :-( )

  - A questo punto hai due scelte:

1) dici ai ragazzi che *tutte* le quantita' che verranno immesse come
dati di input *dovranno* essere misurate nelle unita' di misura del SI.
m, m^2, m^3, Kg, rad, joule, newton, pascal eccetera. Banditi i grammi,
i cm, i litri, i gradi, le atmosfere, yarde, pinte, galloni, angstrom,
barn et citara. Se hanno dati in queste unita' di misura esotiche,
devono prima di tutto convertirle in quelle del SI. Magari usando
google: p.es.

http://www.google.it/search?q=3+atm+in+pascal

oppure con un convertitore che fornisci tu.

Io preferisco questo metodo perche' lo trovo molto educativo (e anche
Elio Fabri e' d'accordo, mi pare). Pero' mi pare troppo restrittivo
(almeno per quanto riguarda gli angoli misurati in gradi, i celsius vs i
kelvin, e simili unita' d'uso comune), per cui passerei almeno in parte
alla seconda scelta:


2) consenti loro di introdurre i dati come valore numerico *e* unita' di
misura, scegliendo queste ultime da un elenco - stretto o largo, a
scelta tua - di simboli ammessi (e DOCUMENTATI) o da menu', convertendo
immediatamente ogni grandezza nelle unita' di misura usate internamente
per i calcoli successivi.

2.b) in questo caso, pero', dovresti anche memorizzare le unita' di
misura usate per gli input in una tabella di "unita' di misura
preferite", per evitare all'utente lo shock di introdurre i dati di un
problema in atmosfere e ottenere un risultato in pascal. Ovviamente
potresti trovarti di fronte al problema di aver memorizzato due (o piu')
unita' "preferite" per la stessa grandezza, p.es. cm e anni luce. In
questo caso una soluzione intelligente potrebbe essere di usare per
l'output l'unita', fra quelle "preferite", con cui il log_10 della
misura e' piu' prossimo a 1,5 (dando cosi' preferenza a numeri "umani",
di ordine di grandezza fra unita' e migliaia).


A questo punto pero' ti trovi nella necessita' di inserire nel progetto
anche equazioni e problemi tratte da libri di Chimica. E qui i problemi
sono due: uno riguarda i ragazzi, l'altro te.

  - Per i ragazzi: la maggior parte dei problemi che ho visto da' i dati
in litri (talvolta anche millilitri o cc), moli/litro, grammi (milliKg?
:-), atmosfere, piccole o grandi calorie, eccetera. Spesso anche
temperature in celsius anziche' kelvin. Trasformare preliminarmente
questi dati in unita' SI credo che per loro sia un compito sovraumano, e
penso anche al di fuori degli obbiettivi didattici. O sviluppi un
*diverso* progetto, solo per la Chimica, in cui usi anche internamente
queste unita' di misura e le imponi ai ragazzi, o, per fare un unico
progetto, fai decisamente la scelta 2).

  - Ma, come abbiamo visto, nei testi di Chimica troverai
prevalentemente "numerical value equations" basate su una scelta
precedente delle unita' di misura usate, che coincidono solo in piccola
parte (mol, K) con quelle del SI, e per il resto anticipano quelle che
vengono usate nei problemi.

Dopo quello che abbiamo visto, *tu te la senti* di trasformare tutte
queste equazioni in equazioni fra grandezze, in modo da poter poi
scrivere senza problemi equazioni numeriche si', ma basate sulle unita'
di misura del SI?

Questo significa, ad esempio, traformare tutte le "pressioni misurate in
atmosfere" in P/P� con P�=101325 Pa, tutte le "concentrazioni misurate
in mol/litro" in C/C� con C�=1000 mol/m^3, et cetera et cetera et
cetera... (e sicuramente non ho visto nei libri consultati tutte le
possibilita', ce n'e' sicuramente qualche altra che ti fara' uscire
pazzo...). E significa sopratutto *ricordarsi* (DOCUMENTARE) questa
convenzione, che dovra' essere usata per qualsiasi aggiunta o modifica
successiva.

Visto che i chimici hanno creato un *loro* mondo di equazioni numeriche
con il presupposto di aver adottato un *loro* set di unita' di misura
(anche se non coerenti), e che per questo nelle loro formule troverai
spesso costanti dimensionali espresse in forma numerica, mi sa che
l'unica strada non troppo impervia e' di adeguarsi, cercare di spiegare
quanto sopra ai ragazzi, e separare i due progetti. Nel secondo
progetto, potrai usare anche internamente le unita' di misura tipiche
dei testi di Chimica, e limitare a quelle piu' comuni nei laboratori di
chimica le unita' di misura ammesse per l'input.


Mi associo ad Elio nel farti gli auguri, ne avrai bisogno...

ciao


-- 
TRu-TS
Buon vento e cieli sereni
Received on Sun Feb 06 2011 - 23:23:55 CET

This archive was generated by hypermail 2.3.0 : Sun Nov 24 2024 - 05:10:35 CET