La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.

Presentazioni simili


Presentazione sul tema: "Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria."— Transcript della presentazione:

1 Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria Informatica, Gestionale e dellAutomazione

2 Lezione 12 Calcolo numerico

3 Vettori numerici Vettore numerico ottimizzato per elaborazioni numeriche ad alte prestazioni Non è progettato per genericità o semplicità duso, ma per consentire tutte le ottimizzazioni possibili Le operazioni possono essere espanse in linea e sono prive di effetti collaterali Sono privi di alias Un valarray è un vettore nel senso matematico del termine

4 valarray Un valarray può essere creato vuoto, con n elementi inizializzati ad un valore o ad un valore di default, per copia, o (caso comune) da un array valarray vi; valarray vf(1000); valarray vb(0.5, 2000); valarray vb2(vb); const double v[] = { 0, 2.4, 1, 3.5, 3 }; valarray vb3(v);

5 Operazioni su valarray Assegnamento vb2 = vb1; vb1 = 1; // assegna 1 ad ogni elemento Indicizzazione double b = vb2[3]; Funzioni membro *= ecc. sum() shift(), cshift() apply(T f(T), apply(T f(cost T&)) -, +, ~, ! min(), max() size() resize() è una reinizializzazione

6 Operazioni su valarray Operatori non membro * ecc. abs ecc.

7 slice Un taglio è costituito da ogni n-esimo elemento di un vettore, a partire da una posizione: class std::slice { // … public: slice(size_t start, size_t size, size_t stride); } Esempio: size_t slice_index(const slice&, size_t i) { return s.start() + i * s.stride(); }

8 slice e matrici FORTRAN Uno slice può essere usato per simulare una matrice tramite un valarray In FORTRAN le matrici vengono memorizzate per colonna: La riga i di una matrice nxm è slice(i, m, n) La colonna j di una matrice nxm è slice(j * n, n, 1) 048 159 2610 3711

9 slice_array Uno slice_array è costruito da un array e uno slice elementi dellarray corrispondente agli indici dello slice Non viene istanziato direttamente, ma indicizzando un array tramite uno slice: valarray d; // … slice_array & even = d[slice(0, d.size() / 2, 2)]; slice_array & odd ) d[slice(1, d.size() / 2, 2)];

10 gslice, mask_array, indirect_array Un taglio generalizzato (gslice) è definito da n passi e n dimensioni Una maschera (mask_array) si ottiene indicizzando un valarray con un valarray Un array indiretto (indirect_array) si ottiene indicizzado un valarray con un valarray

11 Algoritmi numerici Lheader definisce degli algoritmi numerici generalizzati sullo stile di accumulate() inner_product() partial_sum() adjacent_difference()

12 Se non è sufficiente Implementazione storica ed usatissima delle comuni funzioni di calcolo numerico è BLAS (Basic Linear Algebra Subprograms), in FORTRAN Boost http://www.boost.org raccoglie diverse funzionalità nello-stile-della- libreria-standard-ma-che-non-sono- nella-libreria-standardhttp://www.boost.org uBLAS fornisce template per vettori e matrici densi, sparsi, a blocchi


Scaricare ppt "Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria."

Presentazioni simili


Annunci Google