mercoledì 28 novembre 2007

Che affinità hai con cassata?

Ottime notizie da un lato, bruttine (ma non poi particolarmente brutte) dall'altro.

Dopo aver passato delle ore a studiare documenti su internet per risolvere il problema del displacement (tant'è che oggi non ho programmato nulla) posso dire di aver trovato le basi teoriche per risolverlo!

Si tratta dell'aritmetica affine, un bellissimo modello di analisi numerica autovalidante.
Questa teoria mi permette non solo di risolvere il problema del displacement, ma anche di risolvere altri problemi secondari e di ottimizzare maggiormente alcune cose dentro cassata.
Si tratta, è vero, di un'approssimazione, ma del tutto paragonabile come dimensioni e caratteristiche a quella che viene fuori usando i numeri in virgola mobile, e la si può ridurre a piacere, in modo, appunto, da renderla davvero paragonabile a quella generata svolgendo calcoli col tipo usato al momento. In pratica è possibile accorparla all'unica approssimazione numerica che ho mai fatto in tutto il renderer (quasi inevitabile), ed è sufficiente aumentare i temi di rendering e la ram usati per ridurla (qual'ora ce ne sia bisogno, non è una cosa così comune :) ).
Tra parentesi faccio notare che tutti i renderer unbias non sono davvero unbias per colpa di queste approssimazioni, però sono talmente piccole e trascurabili che non le si prende minimamente in considerazione. Di contro il mio sarebbe il primo renderer unbias di cui sono a conoscienza che aumentando i tempi di rendering è in grado di far diminuire a piacere questi errori.

Fin qua direi ottime notizie. La "brutta" notizia è che l'introduzione dell'aritmetica affine mi porterà via del tempo in progettazione.
Anche se a livello di codice in questo punto della lavorazione di cassata le cose da fare per riadattare ciò che ho già scritto sono pressocché nulle, la progettazione, per quanto non cambi proprio visceralmente, è comunque condizionata in quasi tutto ciò che ho fatto, ed ho bisogno di un periodo di tempo per rimettere le cose apposto.
Oltretutto si tratta di una tecnica nuova, che non conoscevo fino a 10 ore fa. Anche se ho già letto e compreso molte cose, prima di poterla padroneggiare bene passerà un po'.

Credo di aver detto tutto, alla prossima :)

3 commenti:

Anonimo ha detto...

Scusa se mi intrometto nel tuo blog, fulvio. Mi daresti qualche fonte per studiare (nel modo più semplice possibile) questa matematica affine. A me interessa perchè è più precisa dall'interval analisis a cui mi rifacevo prima. Ci conto. Ciao e grazie in anticipo.
Orazio (opellegrino@ingegneria.unime.it)

Fulvio Satta ha detto...

Mi spiace, ma avevo preso una lunga vacanza tra impegni e cose varie, ed ho visto il tuo post solo ora.

Certamente ti do tutto il materiale di cui dispongo sull'aritmetica affine ed in generale su tutte le range arithmetics :)

Per prima cosa una fonte su wikipedia:
http://en.wikipedia.org/wiki/Affine_arithmetic

Poi qualche link generico:
http://www.ic.unicamp.br/~stolfi/EXPORT/projects/affine-arith/
http://www.sbmac.org.br/tema/seletas/docs/v4_3/101_01summary.pdf

Ed ancora qualche applicazione nella computer grafica:
http://www.cs.ubc.ca/~heidrich/Papers/GI.98.pdf
http://www.cs.ubc.ca/~heidrich/Papers/TR.11.96.pdf
http://www.tecgraf.puc-rio.br/publications/artigo_1999_interval_methods.pdf
http://ww1.ucmss.com/books/LFS/CSREA2006/CGV8091.pdf
http://www.geometry.caltech.edu/pubs/DTG_CGF96.pdf

Comunque cercando troverai un sacco di materiale.

In breve la range arithmetic (di qualunque tipo) studia come si propaga l'errore, limitando con certezza o (in casi più rari) con una data probabilità l'errore prodotto da un calcolo. Il tutto viene fatto partendo da dati che a loro volta intrinsecamente possono essere errati.

Per spiegarmi faccio un esempio semplicissimo.
Mettiamo di avere 2 numeri, uno in [1, 3], l'altro in [7, 10]. Non sappiamo qual'è il valore reale di questi numeri, ma sappiamo che sono sicuramente la dentro. Se li sommiamo tra loro sappiamo con certezza che la somma sarà contenuta tra 8 e 13.
Fondamentalmente le cose funzionano così, anche se con l'aritmetica affine è tutto molto più raffinato :)
Buono studio :)

Fulvio Satta ha detto...

Ho notato ora che con firefox i link vengono troncati. Se vuoi leggerli per bene fai copia-incolla dei link o diminuisci la dimensione del testo :)