Sei sulla pagina 1di 28

Appunti java Capitolo 12 pag.

1
12. Le Matrici: definizioni e propriet.

Definizione: Matrice
Si dice Matrice reale A del tipo (m, n) linsieme di mxn numeri reali disposti su m righe ed n
colonne come segue:

a
11
a
12
a
1n
a
21
a
22
a
2n

a
m1
a
m2
a
mn

Definizione: Matrice NULLA
Una matrice A si dice nulla se ha tutti gli elementi uguali a 0. La si indica sinteticamente anche con
A=0

Definizione: Matrici dello stesso tipo
Due matrici A e B si dicono dello stesso tipo se hanno lo stesso numero di righe e di colonne.

Definizione: Matrici EGUALI
Due matrici A e B si dicono eguali se hanno lo stesso numero di righe e di colonne e tutte le
componenti corrispondenti identiche.

La relazione di eguaglianza tra matrici gode delle propriet Riflessiva A=A, Simmetrica se A=B
segue B=A e Transitiva se A=B e B=C segue che A=C.

Definizione: Matrice RIGA e Matrice COLONNA
Si dice matrice (o vettore) riga/colonna una matrice con ununica riga/colonna, cio una matrice del
tipo (1, n)/(m, 1).

Definizione: Matrice quadrata, diagonale principale e secondaria, elementi coniugati.
Una matrice quadrata se del tipo (n,n);

a
11
a
12
a
1n
a
21
a
22
a
2n

a
n1
a
n2
a
nn

Gli elementi a
11
, a
22
, , a
nn
costituiscono la diagonale principale, gli elementi a
n1
, , a
1n
quella
secondaria.
Gli elementi a
ik
e a
ki,
con gli stessi indici ma in ordine inverso si dicono coniugati e i loro posti
sono simmetrici rispetto alla diagonale principale.

Definizione: Matrice Identit (o Unit)
Una matrice Identit una matrice quadrata del tipo (n,n) con tutti gli elemeti della diagonale
principale uguali a 1 e tutti i restanti nulli.

1 0 0
0 1 0

0 0 1
PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 2
Definizione: Matrice Trasposta
Si dice Matrice trasposta di A del tipo (mxn) e la si indica con A
T
la matrice ottenuta dalla A
trasformando ordinatamente le righe di A in colonne di A
T
che sar del tipo (nxm)

a
11
a
12
a
1n
a
21
a
22
a
2n

a
m1
a
m2
a
mn


a
11
a
21
a
m1
a
12
a
22
a
m2

a
1n
a
2n
a
mn

Definizione: Somma di matrici
La matrice somma di due matrici A e B dello stesso tipo mxn e una matrice C del tipo mxn ottenuta
sommando gli elementi corrispondenti delle due matrici A e B.

12.1 Propriet delle matrici rispetto alla somma

Linsieme delle matrici del tipo (m, n) formano un gruppo commutativo rispetto alloperazione di
somma:
1. La somma una legge di composizione interna;
2. E associativa (A+B)+C = A+(B+C)
3. E commutatica A+B = B+A
4. Ha per elemento neutro la matrice Nulla A+ 0 = 0+A=A
5. Ogni matrice dotata di unopposta ottenuta da A cambiando il segno di tutte le componenti
e si indica con (A) tale che A+(-A)=0

Vale inoltre la legge di semplificazione: se A+C = B+C segue che A=B


Definizione: Prodotto di matrici
La matrice prodotto di due matrici A e B possibile solo se il numero di colonne della prima
matrice coincide con il numero di righe della seconda. In altri termini A deve avere dimensione
mxp, B pxn.
Il prodotto la matrice C del tipo (m,n) ottenuta moltiplicando i termini di ogni riga di A con i
corrispondenti termini delle colonne di B e sommando i prodotti tra loro nel seguente modo:




A=
A
T
=
a
11
a
12
a
21
a
22
b
11
b
12
b
13
b
21
b
22
b
23
x =
(a
11
.b
11
+a
12
.b
21
) (a
11
.b
12
+a
12
.b
22
) (a
11
.b
13
+a
12
.b
23
)
(a
21
.b
11
+a
22
.b
21
) (a
21
.b
12
+a
22
.b
22
) (a
21
.b
13
+a
22
.b
23
)
PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 3
12.2 Propriet delle matrici rispetto al prodotto

Se la prima matrice del tipo (m, p) e la seconda (p, n)
1. il prodotto di due matrici una legge di composizione interna;
2. E associativa (A*B)*C = A*(B*C)

INOLTRE
NON vale la propriet COMMUTATIVA
* * A B B A

(evidente se di ordini mxp e pxn con m diverso da n, ma non vale anche se le matrici sono nxn)
NON vale la legge di annullamento del PRODOTTO
* 0 0 0 A B non segue A B

1 0 0 0
0 0
2 0 0 0 * 0 0 0
3 4
1 0 0 0
A B A B
1 1
1
1 1

1
1 1
]
1 1
] ]

NON vale la legge di semplificazione
1 0 1 2 1 2
1 2 1 2
2 0 * 2 4 * 2 4
3 4 1 1
1 0 1 2 1 2
A B C A B A C
1 1 1
1 1
1 1 1

1 1
1 1 1
] ]
1 1 1
] ] ]

Vale la propriet (A*B)


T
= B
T
*A
T
Vale la propriet distributiva a sinistra del prodotto rispetto alla somma
A*(B+C)=A*B+A*C
Vale la propriet distributiva a destra del prodotto rispetto alla somma
(B+C)*A=B*A+C*A

Definizione: Determinante di una matrice quadrata
Ad ogni matrice quadrata associato un numero che si chiama determinante.

Definizione: Minore complementare di un elemento di una matrice quadrata
Si dice minore complementare di un elemento a
ik
di una matrice quadrata A di ordine n e lo si
indica con M
ik
il determinante della matrice quadrata di ordine n-1 che si ottiene dalla A eliminando
tutti gli elementi della riga e della colonna a cui appartiene a
ik
come segue:


A= il minore compl. di a
11
11
M
=



A= il minore compl. di a
12

[ ]
12
M
=


Definizione: Complemento algebrico di un elemento di una matrice quadrata
Si dice complemento algebrico di un elemento a
ik
di una matrice quadrata A di ordine n e lo si
indica con A
ik
il minore complementare M
ik
preceduto dal segno positivo se i+k pari, negativo se
dispari.
A
ik
=(-1)
i+k
.M
ik

a
11
a
12
a
13
a
21
a
22
a
23
a
31
a
32
a
33
a
22
a
23
a
32
a
33
a
11
a
12
a
13
a
21
a
22
a
23
a
31
a
32
a
33
a
21
a
23
a
31
a
33
PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 4
Il calcolo del determinante pu essere definito ricorsivamente nel seguente modo:
Il determinante di una matrice A del tipo(1,1) il valore della sua unica componente e si
indica con ik
A a

Il determinante di una matrice A del tipo(n,n) lo si ottiene come somma dei prodotti di
ciascun elemento di una linea qualsiasi per il determinante del rispettivo complemento
algebrico.

Definizione: INVERSA di una matrice quadrata
Si dice inversa di una matrice quadrata A, se esiste, la matrice A
-1
tale che:
A* A
-1
= A
-1
*A=I
Teorema: di esistenza dellinversa di una Matrice quadrata.
Ogni matrice quadrata con determinante non nullo ammette ununica matrice inversa A
-1
.

Regola per calcolare linversa di una matrice:
Si determina una matrice [
ik
] tale che ogni elemento
IK
IK
A
A

e si esegue la sua trasposta [
ki
]. In
altri termini
A
-1
=[
ki
]. Esempio:
A=
A
3 [
ik
]=
1 1
3 3
2 1
3 3

A
-1
=[
ki
]=
1 2
3 3
1 1
3 3


Verificare eseguendo A*A
-1
=I

Definizione: Matrice diagonale
Si dice matrice diagonale una matrice quadrata che ha tutti i termini nulli tranne quelli della
diagonale principale.

Definizione: Matrice tringolare superiore (inferiore)
Si dice matrice triangolare superiore (inferiore) una matrice quadrata che ha nulli i termini a
ik=0
se
i>k (a
ik
=0 se i<k)

Mat. Diagonale
11
22
33
0 0
0 0
0 0
a
a
a
1
1
1
1
]
Mat. Tringolare sup.
11 12 13
22 23
33
0
0 0
a a a
a a
a
1
1
1
1
]
inferiore
11
21 22
31 32 33
0 0
0
a
a a
a a a
1
1
1
1
]


PROPRIET dei determinanti
Una matrice quadrata e la sua trasposta hanno lo stesso determinante.

Se una riga (o una colonna) di una matrice quadrata ha tutti gli elementi nulli il determinante
0.

Scambiando fra loro due righe (o due colonne) il determinante cambia di segno
Se in una matrice quadrata due righe o due colonne hanno gli elementi proporzionali il
determinante nullo

Se si moltiplicano gli elementi di una riga o colonna per una costante reale k, il determinante
della matrice resta moltiplicato per k.
1 2
-1 1
PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 5

Il determinante di una matrice non cambia se ad una linea si aggiuge una linea parallela
moltiplicata per un numero k

Il determinante della matrice prodotto uguale al prodotto dei determinanti

Una matrice con determinate nullo si dice singolare o degenere viceversa non singolare o
regolare

Il determinante di una matrice diagonale o triangolate uguale al prodotto degli elementi
della diagonale.

12.3 Matrici quadrate con determinante non nullo

Linsieme delle matrici del tipo (n, n) formano un gruppo non commutativo rispetto
alloperazione di moltiplicazione:
3. il prodotto di due matrici del tipo (n,n) una legge di composizione interna;
4. E associativa (A*B)*C = A*(B*C)
5. Ha per elemento neutro la matrice Identit A*I = I*A=A
6. Ogni matrice con determinante non nullo dotata di uninversa che si indica con A
-1
tale che
A
-1
*A=A*A
-1
=I

INOLTRE (per le matrici quadrate)
NON vale la propriet COMMUTATIVA
NON vale la legge di annullamento del PRODOTTO
se determinante di C non nullo vale la legge di semplificazione:
A*C = B*C segue che A=B
Infatti C
-1
esiste, quindi A*C*C
-1
=B*C*C
-1
da cui A*I=B*I da cui A=B

Vale la propriet (A*B)


-1
=B
-1
*A
-1
Vale la propriet distributiva a sinistra del prodotto rispetto alla somma
A*(B+C)=A*B+A*C
Vale la propriet distributiva a destra del prodotto rispetto alla somma
(B+C)*A=B*A+C*A


PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 6
12.4 Progettare in java la classe matrici

Sulla base delle propriet elencate si potrebbe realizzare la seguente classe:




















Esempio 1: Si desidera calcolare il determinate di una matrice quadrata in modo ricorsivo
Per introdurre la ricorsione, e ricordare le modalit con cui si progetta un algoritmo ricorsivo,
affrontiamo lesempio del fattoriale di un numero N.
Fattoriale ricorsivo:

Se N=0; fat(0)=1; (oppure N=1; fat(1)=1);
Se N>1; fat(N)=N*fat(N-1);

Ecco il metodo statico fattoriale in Java:
public class Mia{
public static long fat(long n) {
if (n==0) return 1;
else return n*fat(n-1);
}
}

Esempio di invocazione nel main()
long R=Mia.fat(7);
System.out.println( R );
Matrice

- double[][] A;

+Matrice(double[][] a) ;
+Matrice(double[]a, int c) ;
+Matrice(int r, int c, double mn, double mx) ;
+Matrice(int r, int c) ;

+toString() :String ;
+sum(Matrice b) : Matrice;
+per(Matrice b) : Matrice;
+opp() : Matrice;
+det() : double;
+inv() : Matrice;
+mco() : Matrice;
PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 7

Affrontiamo la definizione ricorsiva del determinante:

Se n=1 segue det(A,1) = A[0][0];
se n>1 segue det(A,n) =
1
0
0
0
( 1) [0][ ] det( , 1)
n
k
k
k
A k A n




ATTRIBUTO CLASSE: double[][] A;

public double det() { // metodo dinamico della classe Matrice
double d=0 ;
if (A.length != A[0].length) { System.out.print("Dim. Illegittima"); System.exit(1); }
else if (A.length==1) d=A[0][0] ;
else for (int c=0 ; c<A.length; c++)
if (c%2==0) d=d+A[0][c]*(mco(0,c)).det();
else d=d - A[0][c]*(mco(0,c)).det();
return d;
}

public Matrice mco(int r, int c) { // restituisce la matrice coniugata di a(r,c) ;
int R=A.length; int C=A[0].length;
double[][] m=new double[R-1][C-1];
if (r<R && c<C) {
for (int i=0; i<R; i++) {
for (int j=0; j<C; j++){
if (i<r && j<c) m[i][j]=A[i][j];
else if (i>r && j>c) m[i-1][j-1]=A[i][j];
else if (i>r && j<c) m[i-1][j]=A[i][j];
else if (j>c && i<r) m[i][j-1]=A[i][j];
}
}
} else {
System.out.println("parametri illegittimi.");
System.exit(1);
}
Matrice Ris=new Matrice(m);
return Ris;
}

Esempio di invocazione nel main();

double[][] a={{1,3},{2, 5}};
Matrice M=new Matrice(a);
double D=M.det();
System.out.println(D);
PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 8
12.5 Sistemi lineari come modello applicativo per le matrici.

Rappresentazione di un sistema con matrici.

Un sistema lineare di n equazioni in n incognite
(1)
11 1 12 2 1 1
21 1 22 2 2 2
1 1 2 2
...
...
..........
...
n n
n n
n n nn n n
a x a x a x b
a x a x a x b
a x a x a x b
+ + +

+ + +

'

+ + +


Pu essere rappresentato dalle seguenti matrci

11 12 1
21 22 2
1 2
...
...
... .... ... ...
...
n
n
n n nn
a a a
a a a
A
a a a
1
1
1

1
1
]

1
2
...
n
x
x
X
x
1
1
1

1
1
]

1
2
...
n
b
b
B
b
1
1
1

1
1
]


A matrice dei coefficienti, X vettore colonna delle incognite, B Vettore colonna dei termini noti.

Si nota che, sulla base delle propriet del prodotto definito sulle matrici, il sistema (1) pu essere
rappresentato dal prodotto
A*X=B infatti
11 12 1 1 1
21 22 2 2 2
1 2
...
...
*
... .... ... ... ... ...
...
n
n
n n nn n n
a a a x b
a a a x b
a a a x b
1 1 1
1 1 1
1 1 1

1 1 1
1 1 1
] ] ]
(2)
La scrittura del sistema (1) identica alla (2).

Esempio di sistema lineare in due incognite :

(3)
3
1 2 5
x y
x y
+
'

pu essere scritto
1 1
1 2
1
1

]
*
x
y
1
1
]
=
3
5
1
1

]
eseguendo il prodotto si ottiene:
1 1 3
1 2 5
x y
x y
1 1

1 1

] ]
che coincide con (3)

12.5.1 Risoluzione del sistema con il metodo della matrice inversa.

Ricordando le propriet del prodotto e dellesistenza della matrice inversa si possono eseguire le
seguenti deduzioni:
Se
1 1 1 1 1
0 * * * * * A A quindi se A X B A A X A B I X A B X A B



Da queste deduzioni segue che la soluzione X di un sistema con determinante dei coefficienti
A

non nullo lo si ottiene moltiplicando linversa A
-1
per il vettore dei termini noti B.




PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 9
Esempio di soluzione sistema (3)
3
2 5
x y
x y
+
'

determinante
A
=
1 1
1 2
1
1

]
= -1 matrice
[ ]
IK
IK
A
A

1
1
]
ovvero
[ ]
IK
IK
A
A

1
1
]
=
2 1
1 1
1 1
1 1
1
1

1

1
1
]
da cui
[ ]
1
2 1
1 1
KI
A

1

1

]
da cui
[ ]
2 1 3 1
*
1 1 5 2
X
1 1 1

1 1 1

] ] ]



Algoritmo: Progettare un programma (e le classi necessarie) che risolva sistemi lineari nxn
utilizzando il metodo dellinversa.
Indicazioni per un prototipo della classe Sistema:












sai costruire un metodo per eseguire il prodotto di matrici?
qual lalgoritmo migliore per determinare linversa di una matrice ?

12.5.2 Risoluzione dei sistemi con il metodo di Cramer.

Teorema di Cramer:
Se il determinante
A
dei coefficienti del sistema diverso da zero, il sistema ammette una ed una
sola soluzione data da
1 2
1 2
........
n
n
D D D
x x x
A A A


Dove D
i
rappresentano i determinanti che si ottengono dalla matrice dei coefficienti sostituendo la
colonna i-esima con la colonna dei termini noti B.

Esempio soluzione sitema (3)
3
2 5
x y
x y
+
'


A
=
1 1
1 2
1
1

]
= -1 1
3 1
1
5 2
D

2
1 3
2
1 5
D



1 2
1 2
1 1
x y





Algoritmo: Progettare un programma (e le classi necessarie) che risolva sistemi lineari nxn
utilizzando il metodo di Cramer.

Sistema

- MC, MN, MCO :Matrice;

+ Sistema(a[][], b[]:double)
+ Sistema(a, b:Matrice)

+ toString() : String ;
+ solInversa() : Matrice ;
PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 10

Indicazioni per un prototipo della classe Sistema:













sai costruire un metodo per calcolare il determinante di una matrice qual il modo pi
efficiente?
Sai costruire un metodo che sostituisca un vettore colonna di una matrice A nxn con il
vettore dei termini noti B ?

se non ci si preoccupa dellefficienza il metodo di Cramer potrebbe essere:
public Matrice cramer() {
int N=MC.length;
double D=MC.det() ; // determinante dei coefficienti
double x[]=new double[N] ; // vettore delle soluzioni
double dris[]=new double[N] ; // vettore dei determinanti ott. Sost. I termini noti.
double tutti=0; // se tutti i dris[]=0, tutti=0;
for (int i=0 ; i<N ; i++){
Matrice M=MC.sost(i);
dris[i]=M.det();
tutti=tutti+Math.abs(dris[i]);
}
if (D!=) {
for (int i=0 ; i<N ; i++)
x[i]=dris[i]/D;
}
else if (tutti==0) { System.out.println(Sistema indeterminato.); System.exit(1); }
else { System.out.println(Sistema impossibile.); System.exit(1); }
Matrice R=new Matrice(x,1);
Return R;
}
il main(), fa uso della classe Matrice e Sistema:
double[][] a={{1,2,3 },{1,0,1 },{0,4,-2 } };
double[] b={4,2,1 };
Sistema S=new Sistema(a,b);
System.out.println(S);
Matrice r=S.cramer();
System.out.println( r) ;

Sistema

- MC, MN, MCO :Matrice;

+ Sistema(a[][], b[]:double)
+ Sistema(a, b:Matrice)

- sost(i : int) :Matrice
+ cramer() : Matrice ;
+ toString() :String ;
PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 11
12.5.3 Risoluzione dei sistemi con il metodo della matrice Triangolare Superiore
(Gauss).

Regola di costruzione della matrice triangolare superiore:
Si scrive la matrice dei coefficienti e si aggiunge ad essa la colonna dei termini noti
11 12 1 1
21 22 2 2
1 2
...
...
... ... ... ... ...
...
n
n
n n nn n
a a a b
a a a b
a a a b
1
1
1
1
1
]

1. SE a
11
= ZERO
ALLORA Si scambia la 1 riga con una qualsiasi riga con il primo elemento
diverso da ZERO
2. Si moltiplicano tutti termini della 1 riga per
21
11
a
a
e si sottrae la riga cos ottenuta
dalla seconda
11 12 1 1
* * *
22 2 2
1 2
...
0 ...
... ... ... ... ...
...
n
n
n n nn n
a a a b
a a b
a a a b
1
1
1
1
1
]

3. Si ripete in generale la moltiplicazione della 1 riga per il termine
1
11
K
a
a
e si sottrae la
riga cos ottenuta dalla k.esima riga. Si ottiene:
11 12 1 1
* * *
22 2 2
* * *
2
...
0 ...
... ... ... ... ...
0 ...
n
n
n nn n
a a a b
a a b
a a b
1
1
1
1
1
]

Si ripetono le operazioni (1) (2)(3) per la sottomatrice che inizia con
*
22
a
e per le
sottomatrici a*
kk
successive ottenendo una matrice triangolare superiore:



11 12 1 1
* * *
22 2 2
** **
...
0 ...
... ... ... ... ...
0 0 ...
n
n
nn n
a a a b
a a b
a b
1
1
1
1
1
]

Si ricava x
n
e si sostituisce a ritroso per ricavare le altre incognite.
**
**
n
n
nn
b
x
a


Esempio soluzione sistema (3)
3
2 5
x y
x y
+
'

inizio
1 1 3
1 2 5
1
1

]


PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 12
1 1 3
0 1 2
1
1

]


2
2
1
y

sostituendo 2 nella 1 riga (1 1*2 3) e ricavando si ha x=3-2=1



Algoritmo: Progettare un programma (e le classi necessarie) che risolva sistemi lineari non
utilizzando il metodo di Gauss.
Indicazioni per un prototipo della classe Sistema:











sai costruire un metodo per ottenere da una matrice COMPLETA (n,n+1) una matrice
triangolare superiore, applicando correttamente le propriet? (2) Sai sostituire a ritroso da
una matrice triangolare superiore per ottenere le soluzioni ? )
in quale classe collocare il metodo (MATRICE o SISTEMA ?)
(?).triangolaGauss():Matrice;
in quale classe collocare il metodo (?).sostRitroso() : Matrice;


12.5.4 Risoluzione dei sistemi con il metodo della matrice Diagonale (Gauss-
Jordan).

Regola di diagonalizzazione:

Si scrive la matrice dei coefficienti e si aggiunge ad essa la colonna dei termini noti
11 12 1 1
21 22 2 2
1 2
...
...
... ... ... ... ...
...
n
n
n n nn n
a a a b
a a a b
a a a b
1
1
1
1
1
]

1. SE a
11
= ZERO
ALLORA Si scambia la 1 riga con una qualsiasi riga con il primo elemento
diverso da ZERO
ALTRIMENTI Si divide la 1 riga per a
11
* * *
12 1 1
21 22 2 2
1 2
1 ...
...
... ... ... ... ...
...
n
n
n n nn n
a a b
a a a b
a a a b
1
1
1
1
1
1
]

Sistema

- MC, MN, MCO :Matrice;

+ Sistema(a[][], b[]:double)
+ Sistema(a, b:Matrice)

+ gauss() : Matrice ;

PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 13
2. Si moltiplicano tutti termini della 1 riga per 21
a
e si sottrae la riga cos ottenuta
dalla seconda
* * *
12 1 1
* * *
22 2 2
1 2
1 ...
0 ...
... ... ... ... ...
...
n
n
n n nn n
a a b
a a b
a a a b
1
1
1
1
1
1
]

3. Si ripete in generale la moltiplicazione della 1 riga per il termine 1 K
a
e si sottrae la
riga cos ottenuta dalla k.esima riga. Si ottiene:
* * *
12 1 1
* * *
22 2 2
* * *
2
1 ...
0 ...
... ... ... ... ...
0 ...
n
n
n nn n
a a b
a a b
a a b
1
1
1
1
1
1
]

Si ripetono le operazioni (1) (2)(3) per la sottomatrice che inizia con
*
22
a
e per le
sottomatrici a*
kk
successive e precedenti ottenendo una matrice diagonalizzata:

**
1
**
2
**
1 0 ...
0 1 ... 0
... ... ... ... ...
0 0 ... 1
n
o b
b
b
1
1
1
1
1
1
]

Lultima colonna contiene il vettore delle soluzioni X

Esempio soluzione sistema (3)
3
2 5
x y
x y
+
'

inizio
1 1 3
1 2 5
1
1

]

1) Si divide la prima riga per a
11
=1 (nulla cambia).
2) Si moltiplica la 1 riga cosi ottenuta per a
21
= 1 ottenendo (-1 -1 3).
3) La si sottrae dalla seconda ottenedo
1 1 3
0 1 2
1
1

]

1) Si divide la seconda riga per a
22
= 1, e si ottiene (0, 1, 2).
2) Si moltiplica la seconda riga per a
12
=-1 (nulla cambia).
3) Si sottrae la seconda riga cosi ottenuta (0, 1, 2) dalla prima ottenedo (1 0 1).
La matrice diagonalizzata sar
1 0 1
0 1 2
1
1
]


Le soluzioni sono nella terza colonna x=1 y=2.


Algoritmo: Progettare un programma (e le classi necessarie) che risolva sistemi lineari non
utilizzando il metodo di Gauss-Jordan.
PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 14
Indicazioni per un prototipo della classe Sistema:











sai costruire un metodo per diagonalizzare una matrice (n,n+1) applicando correttamente le
propriet? (2)Successivamente sai costruire un metodo per estrarre la colonna delle
soluzioni?)
in quale classe collocare il metodo (MATRICE o SISTEMA ?)
(?).diagonaleGaussJordan():Matrice;
in quale classe collocare il metodo (?).getCol(int i) : Matrice;


12.6 Complessit di calcolo e instabilit dei sistemi.

La complessit
Definizione : Si chiama complessit di calcolo in tempo di un algoritmo applicato a n dati e lo si
indica con O(n) il numero di operazioni che necessario eseguire perch lalgoritmo termini. Tale
numero deve essere espresso in funzione di n.
La complessit viene distinta in complessit minima (caso migliore) complessit massima (caso
peggiore) e complessit media (caso medio)

Esempi:
Se si costruisce un algoritmo di ricerca di un elemento su un array di n componenti la
complessit in tempo sar:
minima O(n)=1 (eseguo solo una operazione di confronto se lelemento cercato il primo)
massima O(n)=n (eseguo n confronti se lelemento cercato lultimo)
media O(n)=n/2 (se eseguo la ricerca per distribuzioni casuali avr mediamente n/2 confronti)

Se si costruisce un algoritmo di ordinamento bubble sort che si interrompe se dopo n-1
confronti non ho eseguito scambi la complessit in tempo sar:
minima O(n)=n-1 confronti) + 0 scambi (se i dati sono ordinati)
massima O(n)=(n-1)+(n-2)+ +(1) (confronti) + (n-1)+(n-2)+ +(1) (scambi) =(n)(n-1) circa n
2

operazioni (se i dati sono in ordine inverso)
media O(n)=sar un valore mediano ma sempre dipendente da n
2
(se eseguo la ricerca per
distribuzioni casuali)

Conclusioni:
Gli algoritmi con complessit proporzionale a n oppure n*log(n) sono buoni algoritmi.Se la
complessit di calcolo proporzionale a (n
2
) o superiore, al crescere di n il tempo di calcolo pu
diventare molto pesante.
Se lalgoritmo esegue operazione aritmetiche gli errori di arrotondamento possono diventare molto
sensibili.
Sistema

- MC, MN, MCO :Matrice;

+ Sistema(a[][], b[]:double)
+ Sistema(a, b:Matrice)

+ gaussJordan() : Matrice
PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 15

Metodi di soluzione dei sistemi e complessit di calcolo:

Il calcolo del determinante di una matrice, facendo uso della definizione ricorsiva, ha una elevata
complessit (e quindi tempo elevato ed errori sensibili al crescere di n).
Operazioni
Somme + prodotti + n*(op_minore)
Detrminante n=2 (2-1)+2+2*0=3 2!=2
n=3 (3-1)+3+3*3=14 3!=6
n=4 (4-1)+4+4*14 =63 4!=24
n=5 (5-1)+5+5*63=324 5!=120
n=6 (6-1)+6+6*324=1955 6!=720

Il metodo della matrice inversa deve fare i conti con il calcolo di molti determinanti (necessari per
trovare linversa) quindi, in assenza di metodi diversi (pi rapidi) per invertire una matrice,
dobbiamo soprassedere.

Per la complessit di calcolo opportuno scartare anche Cramer. E sempre necessario calcolare
n+1 determinanti.

La complessit di calcolo del metodo di Gauss quella preferibile. Anzi, con il metodo di Gauss si
pu anche trovare il determinante di una matrice abbassando notevolmente la complessit di
calcolo rispetto allutilizzo della definizione ricorsiva di determinante.

Il metodo di Gauss-Jordan esegue un numero circa doppio di operazioni rispetto al metodo di Gauss
ma molto utile per calcolare linversa di una matrice perch riduce notevolmente la complessit
di calcolo rispetto alla definizione matematica di inversa.

Linstabilit
Anche utilizzando il metodo di Gauss si ottengo a volte risultati errati ovvero molto distanti da
quelli corretti. In questi casi si dice che il sistema instabile.
Un sistema instabile se ha un determinante molto prossimo allo ZERO.
Non sempre si riesce ad evitare tale instabilit anche se parte di questa pu essere annullata
attraverso i metodi di Gauss e GausJordan calcolando preventivamente il determinante del sistema.

Conclusioni:
Per ragioni di complessit di calcolo si scarta il metodo di Cramer perch sempre necessario
calcolare n+1 determinanti. Rimangono accettabili nellordine i metodi di Gauss, Gauss-Jordan e
Inversa (nellultimo caso solo se si determina A
-1
con il metodo di Gauss-Jordan).


12.6.1 Tecnica per determinare la Matrice Inversa (metodo di Gauss-
Jordan)

Il procedimento illustrato ha il pregio di abbassare la complessit di calcolo insita nella
determinazione della matrice inversa, che per la definizione matematica, implica il calcolo di molti
determinanti.

Partendo dalla matrice (3,3) seguente:
PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 16
1 1 1
1 1 2
1 1 1
A
1
1

1
1
]

Si procede costruendo la matrice (3, 6) che contiene a destra la matrice identit:
1 1 1 1 0 0
1 1 2 0 1 0
1 1 1 0 0 1
M
1
1

1
1
]

Ora si opera per ottenere a sinistra la matrice Identit, al termine dei calcoli la matrice (3,3) di
destra conterr la matrice inversa di quella di partenza.
Ciclo di Colonna (colonna uno):
1 -1 -1 1 0 0
1 1 2 0 1 0
1 1 1 0 0 1
Si fa perno su a
00
per rendere nulli tutti gli elementi sotto di esso.
1 operazione: se a
00
fosse ZERO occorre scambiare tutta la riga con una riga il cui primo
elemento sia diverso da ZERO.
2 operazione: si normalizza la riga uno (R
0
) dividendo tutti gli elementi per a
00
in modo
che a
00
divenga 1 (in questo caso lo gi)

Ciclo di riga: (Seconda riga)
3 operazione: si ottiene la nuova seconda riga( R
1
)=R
1
-R
0
*a
10

1 -1 -1 1 0 0
0 2 3 -1 1 0
1 1 1 0 0 1
Ciclo di riga: (Terza riga)
4 operazione: si ottiene la nuova terza riga( R
2
)=R
2
-R
0
*a
20
1 -1 -1 1 0 0
0 2 3 -1 1 0
0 2 2 -1 0 1
Ciclo di Colonna (colonna due):
1 -1 -1 1 0 0
0 2 3 -1 1 0
0 2 2 -1 0 1

Si fa perno su a
11
per rendere nulli tutti gli elementi sotto e sopra di esso.
1 operazione: se a
11
fosse ZERO occorre scambiare tutta la riga con una riga il cui secondo
elemento sia diverso da ZERO.
2 operazione: si normalizza la riga due (R
1
) dividendo tutti gli elementi per a
11
in modo
che a
11
divenga 1 (in questo caso si divide per 2)
1 -1 -1 1 0 0
0 1 3/2 -1/2 1/2 0
0 2 2 -1 0 1
Ciclo di riga: (Terza riga)
3 operazione: si ottiene la nuova terza riga( R
2
)=R
2
-R
1
*a
21
1 -1 -1 1 0 0
0 1 3/2 -1/2 1/2 0
0 0 -1 0 -1 1
PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 17
Ciclo di riga: (Prima riga)
4 operazione: si ottiene la nuova prima riga( R
0
)=R
0
-R
1
*a
21
1 0 1/2 1/2 1/2 0
0 1 3/2 -1/2 1/2 0
0 0 -1 0 -1 1

Ciclo di Colonna (colonna tre):
1 0 1/2 1/2 1/2 0
0 1 3/2 -1/2 1/2 0
0 0 -1 0 -1 1

Si fa perno su a
22
per rendere nulli tutti gli elementi sopra di esso.
1 operazione: se a
22
fosse ZERO il determinante sarebbe ZERO e il procedimento FINITO.
(NON possibile calcolare linversa di un Determinante NULLO)
2 operazione: si normalizza la riga tre (R
2
) dividendo tutti gli elementi per a
22
in modo
che a
22
divenga 1 (in questo caso si divide per -1)
1 0 1/2 1/2 1/2 0
0 1 3/2 -1/2 1/2 0
0 0 1 0 1 -1

Ciclo di riga: (Seconda riga)
3 operazione: si ottiene la nuova seconda riga( R
1
)=R
1
-R
2
*a
12
1 0 1/2 1/2 1/2 0
0 1 0 -1/2 -1 3/2
0 0 1 0 1 -1
Ciclo di riga: (Prima riga)
4 operazione: si ottiene la nuova prima riga( R
0
)=R
0
-R
2
*a
02
1 0 0 1/2 0 1/2
0 1 0 -1/2 -1 3/2
0 0 1 0 1 -1

Si ottenuta la matrice identit e il procedimento ha termine con il seguente risultato:
1
1 1
0
2 2
1 3
1
2 2
0 1 1
A

1
1
1
1

1
1

1
1
]


PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 18
12.7 Definire e individuare le trasformazioni nel piano

Il diagramma seguente dovrebbe mostrare le relazioni che intercorrono tra le trasformazioni del
piano:












LAFFINITA la classe pi generale delle trasformazioni lineari nel piano lequazione generale
sar:
(1) A=
X ax by c
Y dx ey f
+ +
'
+ +


Propriet:
Conserva il parallelismo ovvero trasforma lati paralleli in lati paralleli (es. rettangoli in
parallegrammi)
Trasforma poligoni di n lati in poligoni di n lati
Trasforma circonferenze in ellissi
Delta=
0
a b
ae db
d e

altrimenti non una trasformazione
Delta>0 Affinit DIRETTA (Conserva lordine dei vertici della figura origine-trasformata).
Delta<0 Affinit INVERSA (Cambia lordine dei vertici della figura trasformata).

( 1)
( )
S F
D Delta ae db
S F

, ovvero il valore assoluto di Delta
ae db
un numero
che rappresenta il rapporto tra le aree di figure corrispondenti. S(F1) la superficie della
figura F1 trasformata di F ed S(F) e la superficie della figura origine F ovvero F1=A(F).

Le SIMILITUDINI sono un sottinsieme delle AFFINITA nel piano, lequazione generale di una
similitudine
1 2
X ax by c X ax by c
S o anche S
Y bx ay f Y bx ay f
+ + +

' '
+ + +



Propriet:
Conserva parallelismo, angoli e rapporto tra i lati.
Trasforma poligoni di n lati in poligoni Simili di n lati
Trasforma circonferenze in circonferenze
Notare la simmetria dei coefficienti a e b.
Delta=
2 2
0
a b
a b Similitudine DIRETTA
b a

+ >

Affinit
Omotetie
Similitudini
Isometrie
PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 19
Delta=
2 2
0
a b
a b Similitudine INVERSA
b a
<



2 2
( 1)
( )
S F
D Delta a b
S F
+
,

2 2
( 1)
( )
S F
D Delta a b
S F

, rapporto tra aree corrispondenti
K=
2 2
D a b + Rapporto della similitudine diretta, o rapporto tra lati corrispondenti
K=
2 2
D a b
Rapporto della similitudine inversa, o rapporto tra lati corrispondenti

Le OMOTETIE sono sottinsieme delle Similitudini ma sono trasformazioni DIRETTE,
lequazione generale di una omotetia e
1 2
X kx c X kx c
O o anche O
Y ky f Y ky f
+ +

' '
+ +



Come per le similitudini si avr che
Conserva parallelismo, angoli e rapporto tra i lati.
Ha sempre un punto unito che il suo centro C
;
1 1
c d
k k
_


,

Notare la simmetria dei coefficienti a=k e b=0 come per le similitudini
Delta=
2
0 0
0
0 0
k k
k sempre DIRETTA
k k

>



2
( 1)
( )
S F
D Delta k
S F

, rapporto tra aree corrispondenti
K=
2
D k Rapporto di omotetia o rapporto tra lati corrispondenti


Le ISOMETRIE sono un sottinsieme delle Similitudini nel piano, lequazione generale di una
isometria
1 2
X ax by c X ax by c
I o anche I
Y bx ay f Y bx ay f
+ + +

' '
+ + +


Propriet:
Conserva lati e angoli.
Notare la simmetria dei coefficienti a e b
Delta=
2 2
1 0
a b
a b DIRETTA
b a

+ >

Delta=
2 2
1 0
a b
a b INVERSA
b a
<



2
( 1)
1
( )
S F
D Delta k
S F

, le figure sono congruenti e hanno la stessa area
In particolare le TRASLAZIONI di vettore (c, f) ha equazione
( , ) c f
X x c
T
Y y f
+

'
+



PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 20
Delta S
(x=a)
=
1 0
1 0
0 1
>
isometria sempre Diretta


In particolare una ROTAZIONE di centro (xc, yc) e angolo ha equazioni:
cos( ) ( )
( ) cos( )
A
X x ysen c
R
Y xsen y f


+

'
+ +



c c
c c
c=x (1-cos )+y sen
d= y (1-cos )- x sen


o inversamente
2(1 cos )
2
c
c
c dsen
x
c dsen
y
sen



Delta=
2 2
cos( ) ( )
cos 1 0
( ) cos( )
sen
sen
sen


+ >

0 isometria sempre DIRETTA e rotazione antioraria se >


In particolare le SIMMETRIE ORTOGONALI di assi x=a o y=b saranno
( ) ( )
2
2
o x a o y b
X x a X x
S o anche S
Y y Y y b

+

' '
+



Delta S
(x=a)
=
1 0
1 0
0 1

<

Delta S
(y=b) =
1 0
1 0
0 1
<

Sempre Isometrie Inverse


In particolare le SIMMETRIE CENTRALI di centro (a,b) saranno
( , )
2
2
c a b
X x a
S
Y y b
+

'
+



Delta S
(y=b) =
1 0
1 0
0 1

>

Sempre Isometrie Dirette


PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 21
12.8 Trasformazioni nel piano come modello applicativo per le
matrici.

Rappresentazione di una trasformazione con matrici.

Una generica trasformazione lineare ha equazioni
(1)
X ax by c
Y dx ey f
+ +
'
+ +

con
0
a b
ae db
d e


potrebbe essere rappresentata dalle seguenti matrici

a b c
A
d e f
1

1
]

x
B
y
1

1
]

X
C
Y
1

1
]


A matrice dei coefficienti, B, C vettori colonna delle incognite.
Scritte in questo modo NON possibile rappresentare la trasformazione come prodotto di matrice.

Se invece si riscrivono le tre matrici con laggiunta di una opportuna riga TUTTO funziona:
0 0 1
a b c
A d e f
1
1

1
1
]

1
x
B y
1
1

1
1
]

1
X
C Y
1
1

1
1
]
anche in questo caso
0 0 1
a b c
ae db d e f


Si nota che, sulla base delle propriet delloperazione prodotto definito sulle matrici, la
trasformazione (1) pu essere rappresentata dal prodotto
C=A*B infatti
*
1 0 0 1 1
X a b c x
Y d e f y
1 1 1
1 1 1

1 1 1
1 1 1
] ] ]
(2)
Eseguendo il prodotto a destra si ha
1 1
X ax by c
Y dx ey f
+ + 1 1
1 1
+ +
1 1
1 1
] ]

La scrittura del sistema (1) equivalente alla (2) se si astrae dallultima riga 1=1

Esempio: Traslazione di vettore (1, -2) :

(3)
1
2
X x
Y y
+
'

pu essere scritta anche


1
X
Y
1
1

1
1
]

1 0 1
0 1 2 *
0 0 1 1
x
y
1 1
1 1

1 1
1 1
] ]
eseguendo il prodotto si
ottiene:

1
X
Y
1
1

1
1
]

1 0 1
0 1 2
1
x y
x y
+ + 1
1
+
1
1
]
che equivale alla (3)

PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 22
12.8.1 Come si trasforma un punto P(x,y) con le matrici

Assegnato il punto P(x, y) per ottenere il suo trasformato con la trasformazione T, simbolicamente
si scrive P=T(P), sufficiente moltiplicate la matrice T di tipo (3,3) della trasformazione con la
matrice colonna P di tipo (3,1). Si otterr una Matrice (3,1) che rappresenta il punto P.

Esempio: Assegnato il punto P(1,1) e la precedente Traslazione di vettore (1, -2) T=
1
2
X x
Y y
+
'

la
loro forma equivalente con le matrici diviene:

T=
1 0 1
0 1 2
0 0 1
1
1

1
1
]
P=
1
1
1
1
1
1
1
]
da cui moltiplicando T(P)=
1 0 1 2
' 0 1 2 1
0 0 1 1
P
+ + 1 1
1 1
+
1 1
1 1 + +
] ]
Si pu facilmente
vedere che P(2,-1) il corrispondente di P nella traslazione.

12.8.2 Come si Trasforma una Figura con le matrici

Una figura disegnabile su un pannello grafico o su un foglio pu sempre essere rappresentata da
una poligonale (x
i
,y
i
), se la figura curvilinea sufficiente prendere segmenti molto piccoli.
Ne segue che, se un punto una matrice colonna del tipo (3,1), un poligono (una figura) una
matrice del tipo (3,n) dove n il numero di punti o vertici del poligono.

Un rettangolo con lati paralleli agli assi e vertice sinistro-basso in (1,1) sar rappresentata dalla
matrice (3,4) seguente:



F=
1 4 4 1
1 1 3 3
1 1 1 1
1
1
1
1
]






La figura trasformata F di F nella simmetria centrale di cento (0,0)
S
c(0,0)
=
1 0 0
0 1 0
0 0 1
1
1

1
1
]









PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 23
la si ottiene immediatamente come prodotto di
S
c

F=
1 0 0
0 1 0
0 0 1
1
1

1
1
]

1 4 4 1
1 1 3 3
1 1 1 1
1
1
1
1
]
=F=
1 4 4 1
1 1 3 3
1 1 1 1
1
1

1
1
]


12.8.3 La Matrice inversa di una trasformazione la trasformazione inversa.

E noto che il prodotto di una trasformazione geometria del piano per la corrispondente
trasformazione inversa genera la trasformazione identica. Questo fatto corrisponde alla definizione
di inversa di una matrice quadrata nella struttura delle matrici. Ne consegue che Assegnata la
matrice di una trasformazione T del tipo (3,3), determinando la sua inversa si determina lequazione
della trasformazione geometrica inversa T
-1
di T.

Esempio: Si ricorder sicuramente che linversa di una traslazione di vettore (1,-2) la traslazione
di vettore (-1, 2).
T
(1,-2)
=
1 0 1
0 1 2
0 0 1
1
1

1
1
]
T
-1
(-1, 2)
=
1 0 1
0 1 2
0 0 1
1
1
1
1
]

Ma anche che linversa di una simmetria ortogonale di asse x=0 ancora la simmetria ortogonale
stessa.

S
(x=0)
=
1 0 0
0 1 0
0 0 1
1
1
1
1
]
S
-1
(x=0)
=
1 0 0
0 1 0
0 0 1
1
1
1
1
]

E facile verificare, con semplici calcoli che T*T
-1
=I ed anche che S*S
-1
=I

12.8.4 Composizione di trasformazioni.

Se le matrici quadrate del tipo (3,3) formano un gruppo non commutativo rispetto al prodotto ne
segue che le trasformazioni lineari del piano sono un gruppo non commutativo.

Esempio: verifichiamo che la composizione di due traslazioni T1 e T2 genera una Traslazione T3
di vettore pari alla somma vettoriale dei due vettori componenti.


PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 24
T
(2,1)

T
(1,2)
=T
(3,3)
infatti
1 0 2
0 1 1
0 0 1
1
1

1
1
]
1 0 1
0 1 2
0 0 1
1
1
1
1
]
=
1 0 3
0 1 3
0 0 1
1
1
1
1
]

Verifichiamo anche che la composizione di due simmetrie ortogonali con assi perpendicolari tra
loro genera una simmetria centrale di centro lintersezione dei due assi.
Si ricorda che una simmetria ortogonale di asse x=a ha equazione:
S
(x=a)
=
2 X x a
Y y
+
'

quindi che la simmetria ortogonale di asse y=a vale S


(y=a)
=
2
X x
Y y a

'
+


Se componiamo due simmetrie, una di asse x=1 e laltre di asse y=1 si avr:

S
(x=1)

S
(y=1)
=Sc
(1,1)
infatti
1 0 2
0 1 0
0 0 1
1
1

1
1
]
1 0 0
0 1 2
0 0 1
1
1

1
1
]
=
1 0 2
0 1 2
0 0 1
1
1

1
1
]






Il risultato una simmetria centrale di centro (1,1) che ha equazione
vale S
c(1,1)
=
2
2
X x
Y y
+
'
+



12.8.5 Progettare la soluzione della seguente situazione problematica:

Sarebbe desiderabile realizzare un programma che consenta di rappresentare Figure su un
sistema di Assi Cartesiani e consenta di applicare alle figure stesse le Trasformazioni
geometriche studiate visualizzandole.

Realizzare il progetto per fasi: Analisi, disegno e codifica facendo il caso semplificato nel quale si
utilizza come unica trasformazione una Traslazione. Successivamente generalizzare il problema
cercando di realizzare tutte le trasformazioni noye del piano.
CASI DUSO (Lutente quali funzionalit desidera ?)
CLASSI (Quali? Ricordate CHI FA CHE COSA ?)
Relazioni Tra le classi (HA UN ? E UN ?)

PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 25
Ipotesi di Soluzione: CASI DUSO




















Disegno Classi : CHI FA CHE COSA























Classe : Figura
-Matrice A;


Figura(double a[][])
Figura(double x[], y[])

+ get() : Matrice;
+toString() : String
Classe : Trasfor

-Matrice A;

Trasfor(double a, double b)

+ trasfor(Figura F) :Figura ;
+toString() :String


Crea_figura
Crea_trasform
Trasforma_fig
Crea_pann_assi
Disegna_figura
PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 26













Codifica: Cominciamo dal Main(). Senza usare la classe ASSI

public class pro_tra{
public static void main(String arg[]) {
Figura F= new Figura(.....);
System.out.println(F);// stampa le coordinate di F per controllo
Traslazione T=new Traslazione(.....);
System.out.println(T); // stampa la matrice traslazione per controllo
Figura F1=T.trasla(F);
System.out.println(F1);// stampa le coordinate di F1 per controllo
}
}

Codifica: Cominciamo dal Main(). CON la classe ASSI
public class pro_tra{
public static void main(String arg[]) {
double f[][]={{1,1,2,2,1},{1,3,3,2,2}};
Figura F= new Figura(f);
Assi A=new Assi();
A.disegna(F);
Traslazione T=new Traslazione(-3,2);
Figura F1=T.trasla(F);
A.disegna(F1);
}


12.8.6 Progettare un qualificatore di trasformazioni

Progettare un programma (o metodo da inserire in una opportuna Classe) che qualifichi le
trasformazioni nel senso che assegnata una trasformazione qualsiasi stampi:
non una trasformazione
unaffinit diretta/inversa
una similitudine diretta/inversa di rapporto k
unomotetia di rapporto k e centro xc,yc
unisometria diretta/inversa (Si possono distinguere ? quali ?)
Classe : Assi extends JFrame
int L, H, Xmin, Xmax, Ymin, Ymax ;
altro ???

Assi()
Assi(int larga, int alta)
Assi(int larga, alta, xmin, xmax, ymin, ymax )
+disegna(Figura, Color):void
+dis_assi():void
PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 27
12.8.7 Traccia per il codice della classe Assi

Supponiamo che si desideri un pannello di default che mostri gli assi CENTRATI ed evidenzi una
griglia da 5 a 5 per le X e da 5 a 5 per le Y come il seguente:



La classe Assi:

import javax.swing.*;
import java.awt.*;
public class Assi extends JFrame {
private Image IM=null; // immagine fuori schermo su cui disegnare
private Graphics k; // Oggetto "astratto" sul quale si disegna associato alla immagine IM
private static int L=300,H=300; // dimensione pannallo grafico di default
private static int xmin=-5,ymin=-5, xmax=5, ymax=5; // estremi assi cartesiani di deafault
private static int Ux=L/(xmax-xmin), Uy=H/(ymax-ymin); // Ux, Uy = numero di pixel per unit cartesiana
private int xc=Math.abs(xmin)*Ux, yc=Math.abs(ymax)*Uy; // xc,yc = coordinate centro in pixel

// COSTRUTTORE
public Assi(int larg, int alt, int mix, int max, int miy, int may) {
L=larg; H=alt; xmin=mix; xmax=max; ymin=miy; ymax=may;
Ux=L/(xmax-xmin); Uy=H/(ymax-ymin);
xc=Math.abs(xmin)*Ux; yc=Math.abs(ymax)*Uy;
setGui();
setEvent();
}

// COSTRUTTORE di DEFAULT
public Assi() {
setGui();
setEvent();
}

private void setGui() {
setBounds(0,0,L,H);
setVisible(true);
setResizable(false);
dis_assi();
}

PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com
Appunti java Capitolo 12 pag. 28
private void setEvent() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

private void dis_assi() {
IM=createImage(L,H); // cattura dal Component (this) i pixel e li copia in IM (immagine fuori schermo)
k=IM.getGraphics(); // costruisce un oggetto "astratto" graphics associato a IM sul quale tracciare segmenti
// Disegno assi

disegna_seg(Color.BLACK,k,xmin,0,xmax,0); // asse x
disegna_seg(Color.BLACK,k,0,ymin,0,ymax); // asse y
// disegno griglia
for (int i=xmin; i<xmax; i++)
if (i!=0) disegna_seg(Color.GREEN, k,i,ymin,i,ymax); // segm. di griglia delle unita X
for (int j=ymin; j<ymax; j++)
if (j!=0) disegna_seg(Color.GREEN,k,xmin,j,xmax,j); // segm. di griglia delle unita X
repaint(); // Ridisegna gli assi (la IM) chiamando paint()
}


// FINE COSTRUTTORE
public void paint(Graphics g) {
Graphics2D g2=(Graphics2D) g;
if (IM!=null) g2.drawImage(IM,0,0,this); //all'avvio IM=null non disegna
}

// METODO Publico DISEGNA
public void disegna(Figura F, Color C) {
Color HC=k.getColor();
k.setColor(C);
Matrice f=F.get(); // mi serve la matrice (3,n) della figura
double Xcart[]=(f.get())[0]; //serve la riga 0 dell'array (3,n) della figura
double Ycart[]=(f.get())[1]; //serve la riga 1 dell'array (3,n) della figura
int N=f.getCol(); //N numero di punti
int x[]=new int[N]; // x[], y[] array necessari per disegnare
int y[]=new int[N]; // con il metodo drawPolyline() o drawPolygon()
for (int i=0; i<N; i++){
x[i]=trX(Xcart[i]); // trasformazione pixel
y[i]=trY(Ycart[i]);
}
k.drawPolygon(x,y,N); // disegno del poligono chiuso drawPoligon() poligonale aperta drawPolyline()
repaint();
k.setColor(HC);
}

private void disegna_seg( Color c, Graphics g, double x1, double y1, double x2, double y2) {
g.setColor(c);
g.drawLine(trX(x1),trY(y1),trX(x2),trY(y2));
}

private int trX(double x) {
int Xp=(int) Math.round(xc+x*Ux);
return Xp;
}

private int trY( double y) {
int Yp=(int) Math.round(yc-y*Uy);
return Yp;
}
}

PDF created with FinePrint pdfFactory Pro trial version www.pdffactory.com

Potrebbero piacerti anche