Matrici: un - PowerPoint PPT Presentation

About This Presentation
Title:

Matrici: un

Description:

Matrici: un implementazione parametrica in C++ ADT delle matrici ADT delle matrici Una struttura dati La classe Matrix Matrici come vettori di righe/colonne Un ... – PowerPoint PPT presentation

Number of Views:59
Avg rating:3.0/5.0
Slides: 21
Provided by: diUnitoI2
Category:
Tags: matrici

less

Transcript and Presenter's Notes

Title: Matrici: un


1
Matrici unimplementazione parametrica in C
2
ADT delle matrici
Matrice di ordine n ? m
3
ADT delle matrici
Retrive(i, j, M) Post ritorna aij in
M AssignEntry(i, j, x, M) Post assegna ad x
lentrata aij di M Assign(M1,M2) Pre M1 ed M2
hanno lo stesso ordine Post assegna ad M1 le
entrate di M2 Add(M1, M2) Pre M1 ed M2 hanno
lo stesso ordine Post ritorna la somma M1
M2 Mult (M1, M2) Pre M1 ha ordine n ? m,
M2 ha ordine m ? p Post ritorna il
prodotto M1 ? M2 di dimensione n ? p
4
Una struttura dati
5
La classe Matrix
template ltclass Tgt class Matrix private
int row_dim, col_dim T element
public inline Matrix () //
costruttore di default Matrix (int rdim,
int cdim) // costruttore Matrix (int
rdim, int cdim, T initval) //
costruttore con inzializzazione delle entrate
Matrix (const MatrixltTgt) // costruttre di
copia Matrix () // distruttore
// altri metodi
6
Matrici come vettori di righe/colonne
La memoria è unidimensionale le matrici (con due
o più dimensioni) possono essere rappresentate
come un vettore di righe (o di colonne)
7
Un costruttore della classe Matrix
template ltclass Tgt MatrixltTgtMatrix (int rdim,
int cdim, T initval) // Pre initval elenca le
entrate per riga row_dim rdim col_dim
cdim element new T row_dim for
(int i 0 i lt rdim i) elementi
new T col_dim for (int i 0 i lt rdim
i) for (int j 0 j lt cdim j)
elementij initval cdim i j
8
Costruttore di copia
template ltclass Tgt MatrixltTgtMatrix (const
MatrixltTgt m) row_dim m.row_dim
col_dim m.col_dim element new T
row_dim for (int i 0 i lt rdim i)
elementi new T col_dim for (int i
0 i lt rdim i) for (int j 0 j lt
cdim j) elementij
m.elementij
9
Il distruttore
template ltclass Tgt MatrixltTgtMatrix () for
(int i 0 i lt row_dim i) delete
elementi delete element
Le deallocazioni con delete sono simmetriche alle
allocazioni con new
10
Metodi get sono const
const assicura che il metodo non altera lo stato
template ltclass Tgt class Matrix public //
altri metodi inline int Row () const
return row_dim inline int Col () const
return col_dim T GetEntry (int i, int
j) const // ritorna thisi, j dove i e
j variano da 1 // a n ( row_dim) ed m
( col_dim) risp. template ltclass Tgt T
MatrixltTgtGetEntry (int i, int j) const
assert (1 lt i i lt row_dim 1 lt j
j lt col_dim) return elementi - 1j -
1
11
Sovraccarico degli operatori
template ltclass Tgt MatrixltTgt MatrixltTgtoperator
(const MatrixltTgt m) for (int i 0 i lt
row_dim i) delete elementi
delete element row_dim m.row_dim
col_dim m.col_dim element new T
row_dim for (int i 0 i lt rdim i)
elementi new T col_dim for (int i
0 i lt row_dim i) for (int j 0 j
lt col_dim j) elementij
m.elementij return this
Deallocazione dello stato vecchio
Allocazione del nuovo stato
12
La somma di due matrici
template ltclass Tgt class Matrix template
ltclass Sgt friend MatrixltSgt operator
(const MatrixltSgt m1, const MatrixltSgt
m2) template ltclass Sgt MatrixltSgt operator
(const MatrixltSgt m1, const MatrixltSgt m2)
assert (m1.Row() m2.Row() m1.Col()
m2.Col()) MatrixltSgt R (m1.Row(), m1.Col())
for (int i 0 i lt m1.Row() i) for
(int j 0 j lt m1.Col() j)
R.elementij
m1.elementij m2.elementij return
R
13
La stampa di una matrice
Template ltclass Tgt Matrix // ... template
ltclass Sgt friend ostream operatorltlt(ostream
os, const MatrixltSgt m) // invia una stampa
di this sullo stream os // (tipicamente
cout)
14
La stampa di una matrice
template ltclass Tgt ostream operatorltlt(ostream
os, const MatrixltTgt m) for (int i 0 i lt
m.row_dim i) for (int j 0 j lt
m.col_dim j) os ltlt ' ' ltlt
m.elementij os ltlt endl
return os
os è una sorta di buffer, in cui si accumula il
flusso dellinformazione, per poi essere
trasmessa con return os
15
La stampa di una matrice
int main() int init6 1, 2, 3, 4, 5,
6 Matrixltintgt M (2, 3, init) cout
ltlt M
Leffetto di questa istruzione è analogo alla
stampa di un intero
16
Calcolo del determinante
Se A è una matrice n ? n (con n ? 2) allora
dove il cofattore cij è definito
17
Calcolo del determinante
template ltclass Tgt T MatrixltTgtDet ()
assert(row_dim col_dim row_dim gt 2)
if (row_dim 2) return element00element1
1 - element01element10
else T det Minor(1,1)element0
0 for (int i 1 i lt row_dim i)
det Minor(i1,1)elementi0
return det
Minor usa indici da 1 in poi element da 0 in poi
18
I minori
template ltclass Tgt T MatrixltTgtMinor (int i, int
j) MatrixltTgt A (row_dim-1, col_dim-1)
copia in A le entrate di this, salvo la riga i e
la colonna j if ((ij) 2 0) return
A.Det() else return - A.Det()
Vediamo ora il dettaglio dellistruzione
pseudocodificata
19
I minori
template ltclass Tgt T MatrixltTgtMinor (int i, int
j) MatrixltTgt A (row_dim-1, col_dim-1)
for (int h 0 h lt i-1 h) for (int
k 0 k lt j-1 k)
A.elementhk elementhk for
(int k j k lt col_dim k)
A.elementhk-1 elementhk

20
I minori
template ltclass Tgt T MatrixltTgtMinor (int i, int
j) for (int h i h lt row_dim
h) for (int k 0 k lt j-1 k)
A.elementh-1k elementhk
for (int k j k lt col_dim k)
A.elementh-1k-1 elementhk
if ((ij) 2 0) return A.Det() else
return - A.Det()
Write a Comment
User Comments (0)
About PowerShow.com