Matematica discreta 2 Complementi ed esercizi dell'Unità 8. |
![]() |
Algoritmo di Gauss per il calcolo della matrice inversa Diamo in questo paragrafo un algoritmo che si basa sul metodo di riduzione di Gauss con il quale calcolare la matrice inversa di una matrice quadrata A di rango massimo. Supponiamo che i numeri ai,j siano i coefficienti della matrice. Per ogni vettore (colonna) x possiamo calcolare il vettore y = A.x cioè il vettore y dato da ![]() e il problema consiste, viceversa, dato il vettore y di calcolare il corrispondente vettore x, cioè dei numeri x1, x2, ... ,xn funzioni delle y, che verifichino le equazioni precedenti. L'idea dell'algoritmo consiste nel pensare il sistema precedente come un sistema omogeneo di n equazioni nelle 2n incognite x1, x2, ... ,xn e y1, y2, ... ,yn ![]() e nel fare operazioni elementari 1 sulle equazioni del sistema (senza però fare permutazioni) fino a ridurre il sistema alla forma ![]() La matrice di destra così ottenuta è la matrice inversa ![]() Il motivo per il quale non si debono fare permutazioni di equazioni dipende dal fatto che nella matrice finale
è importante l'ordine delle righe: la prima rapprersenta la prima incognita, la seconda la seconda ecc. ecc. ![]() nella matrice ![]() cosa che è sempre possibile se A ha rango massimo.
![]() La matrice da ridurre è la matrice ![]() Dato che la prima colonna ha come primo elemento 0 e dato che non possiamo permutare le righe della matrice, sostituiamo, con una operazione elementare consentita, la prima riga con un'altra riga che abbia il primo elemento non nullo. Possiamo, ad esempio, sostituire la prima riga con la sua somma con la seconda riga ![]() Cominciamo ora a fare operazioni elementari per produrre zeri sotto i pivot delle prime tre colonne ![]() Osserviamo che, essendo la matrice dei coefficienti di rango tre, le tre colonne sono indipendenti e quindi otteniamo sempre, a questo punto della riduzione, una matriche con tutti zeri sotto la diagonale principale. Ora, a partire dall'ultima colonna produciamo degli zeri sopra i pivot. Moltiplichiamo quindi l'ultima riga per 2 e sommiamola alla seconda ![]() Non ci resta ora che produrre uno zero sopra il pivot -1. Moltiplichiamo la seconda riga per 2 e sommiamola alla prima ![]() Infine, moltiplicando la prima riga per 1/2 e la terza per -2, abbiamo la matrice che cerchiamo ![]() In definitiva ![]() e la soluzione del sistema proposto è x=9/2, y=6, z=-4.
Le considerazioni precedenti possono essere utilizzate per
definire dei particolari codici utili a criptare un messaggio che si vuole mantenere segreto. In generale un determinato messaggio
x viene codificato in un nuovo messaggio irriconoscibile y = L(x). Questo nuovo messaggio y viene trasmesso
e può essere letto
da chiunque intercetti la trasmissione. Tuttavia per riconoscerlo occorre decriptarlo e per fare questo occorre conoscere l'operatore
L-1 di decodifica, operatore che, si suppone, sia noto solo al destinatario del messaggio. Il destinatario dunque riceve
il segnale
y, lo decodifica calcolando L-1(y) e può in questo modo leggere il messaggio originale
x = L-1(y). Il modo più semplice per fare questo è supporre L lineare. con questa notazione la stringa (x1,x2,x3,x4) corrisponde al numero decimale
Possiamo dunque pensare le parole come vettori
dello spazio F4 di dimensione 4. ![]() Con questo codice, la parola 9, ad esempio, che si scrive come x = (1,0,0,1) si codifica nella stringa A.x
cioè, eseguendo il prodotto, in y = (0,1,0,0). Questa è la striga che viene trasmessa e che può anche essere intercettata. Il destinatario
del messaggio, conoscendo il codice, può decodificare la stringa ricevuta calcolando A-1.y. ![]() Per produrre degli zeri nella prima colonna abbiamo sostituito la seconda riga con la somma delle prime due e la quarta con la somma della quarta con la prima. Il secondo elemento della seconda colonna è zero. Sostituiamo allora la seconda riga con la sua somma con la terza riga e facciamo operazioni elementari per produrre degli zeri sotto i pivot. ![]() A questo punto dobbiamo produrre degli zeri sopra il pivot della quarta colonna. Per questo sostituiamo la terza riga con la sua somma con la quarta, la seconda con la sua somma con la quarta e la prima con la sua somma con la quarta. ![]() Resta ancora da siatemare la prima riga. Per questo sostituiamo la prima riga con la sua somma con la seconda ![]() le ultime 4 colonne della matriche che abbiamo ottenuto sono le colonne della matrice A-1 che cercavamo ![]() Il messaggio in codice y può essere ora decodificato moltiplicandolo per la matrice A-1. Se
y = (0,1,0,0) allora, eseguendo il prodotto, abbiamo A-1.y = (1,0,0,1) e quindi la parola trasmessa era
23 + 1 = 9. e quindi la prima colonna della matrice A è (1,1,0,1). Analogamente, dato che e2 = u1 + u2, abbiamo la seconda colonna di A è allora (1,1,1,1). Poichè e3 = u1 + u3 + u4 la terza colonna di A è (0,1,1,1). Poichè, infine, e4 = u3 + u4 e quindi la quarta colonna di A è (1,0,0,1). Una volta calcolata la matrice A è possibile, per la spia decodificare qualunque messaggio y venga trasmesso dato che attraverso A, come abbiamo fatto precedentemente, si può calcolare A-1 e quindi x = A-1y. |