Le matrici

15 01 2009

Visual Basic e le matrici:
La matrice è una struttura di dati astratta caratterizzata da n per m elementi dello stesso tipo raggruppati con un nome collettivo i cui elementi sono selezionati mediante un indice di riga e di colonna. L’intervallo di variabilità degli indici è da 1..n,1..m se  n e m sono il numero delle righe e delle colonne della matrice.

Teoria delle Matrici

Una matrice rettangolare è una matrice in cui il numero delle righe è diverso da quelle delle colonne. Una matrice diventa quadrata quando le sue dimensioni sono uguali se m e n sono il numero di righe e colonne la matrice per essere quadrata deve avere m=m.
Sulle matrici quadrate si hanno alcune proprietà inportanti.

Matrice Trasposta

Si definisce la matrice trasposta MT la matrice che si ottiene dalla matrice M scambiando gli elementi di riga con quelli di colonna in sintesi MT(i,j)=M(I,J).
Ad esempio la matrice traposta di

M=  Matrice di esempio

allora MT sarà

Matrice Trasposta
Diagonali delle matrici quadrate

Proprio come in un quadrato nelle matrici quadrate si definiscono le diagonali.
Se definisce la diagonale principale DP quella per cui gli elementi di matrice sono tali che I=J. Si definisce invece diagonale secondaria DS quella in cui gli elementi della matrice M sono tali che I+J=N+1.

Operazioni con le matrici

Indipendentemente dal fatto che le matrici sono quadrate o rettangolari se date due matrici A e B le cui dimensioni sono rispettivamente m,n e p,q e si ha che m=p e n=q si può sempre costruire la matrice somma, differenza.
Per la somma di due matrici A e B si ha che la matrice somma/diffenze nelle ipotesi di sopra sarà data

S(I,J)=A(I,J)+B(I,J)
D(i,J)=A(I,J)-B(I,J)
per ogni I,J minori o uguali alle dimensioni delle matrici di partenza.

Un’altra operazione sempre possibile è il prodotto di una matrice di qualunque tipo per una costante k. Infatti si ha:

P(I,J)=K*A(I,J)

Prodotto di matrici

Siano dati due matrici A e B di dimensione m,p e p,q la matrice prodotto sarà una matrice di dimensione m,q. Ogni elemento della matrice è dato dalla seguente formula

P(I,J)=Somma(1..p indice r)(A(i,r)*B(r,j)

Le matrici nell’informatica rivestono un campo di applicazione enorme. Per comprendere l’utilizzo delle matrici è opportuno comprendere quali sono le operazioni fondamentali con esse. Sulle matrici le operazioni preliminari che si svolgono sono il caricamento o immissioni dati, la ricerca di uno o più elementi specifici, l’ordinamento. Per le matrici esistono delle procedure standard per il caricamento che prevedono il doppio ciclo su riga e colonna. L’algoritmo per caricare una matrice di 3 per 3 elementi interi è:

1-inizio
2-per i=1 a 3
3-per j=1 a 3
4-scrivi “dammi elementi”
5-leggi m(i,j)
6-fine ciclo su j (colonna)
7-fine ciclo su i (riga)
8-fine

In visual basic esiste la possibilità di gestire le matrici, proprio come in ogni altro linguaggio di programmazione con la differenza che se si vuole implementare un form che permetta l’inserimento dei dati nella matrice conviene usare la matrice di controlli ovvero un insieme di controlli che sono identificati da un uno stesso nome, ma  diversificati da un indice intero. Inoltre la numerazione dei controlli comincia da zero e non da uno. La procedura di caricamento va modificata come segue:

1-inizio
2-k=0
3-per i=1 a 3
4-per j=1 a 3
5-m(i,j)=contenuto casella di testo(k)
6-k=k+1
7-fine ciclo su j (colonna)
8-fine ciclo su i (riga)
9-fine

L’indice k si rende necessario per scorrere i controlli indipendentemente da i e j che selezionano la riga i e la colonna j della matrice. Notare che k in questo ciclo varia da 0 a 8.
Andiamo a risolvere il seguente problema data una matrice di 3 per 3 elementi interi calcolarne la somma.
La tabella dati prevede pertanto:
Classe                        Nome            Tipo
Input                          M                  Matrice di 3 per 3 elementi interi
Interni                        I,j,k               Interi
Output                       Somma          Intero

L’interfaccia grafica (il form) che si vuole realizzare è:
Form esercizio Matrici

In questo form sono definite 10 caselle di testo tutte con nome “Text1” e sono posizionate in modo che la casella di testo con la proprietà “index” a zero sia posizionata in alto a sinistra. La decima casella di testo è stato inserita per visualizzare la somma. I tre pulsanti uno carica i dati nella matrice attiva l’algoritmo visto nella pagina precedente, l’altro somma gli elementi della matrice, l’ultimo pulsante chiude l’applicazione.
L’algoritmo che verrà attivato al click del pulsante somma sarà:
1-Inizio
2-Somma=0
3-Per i=1 a 3
4-Per j=1 a 3
5-Somma=somma+m(i,j)
6-Fine ciclo j
7-Fine ciclo i
8-Scrivi nella casella testo(10) somma convertita in stringa
9-Fine

Finalmente la codifica completa è:

Dim m(3, 3) As Double
Dim somma As Double
Private Sub Command1_Click()
k = 0
For i = 1 To 3
For j = 1 To 3
m(i, j) = Val(Text1(k).Text)
k = k + 1
Next j
Next i
End Sub
Private Sub Command2_Click()
somma = 0
For i = 1 To 3
For j = 1 To 3
somma = somma + m(i, j)
Next j
Next i
Text1(9).Text = Str(somma)

End Sub
Private Sub Command3_Click()
Unload Me
End Sub
Private Sub Form_Load()
Label1.Caption = “Elementi matrice”
Label2.Caption = “Somma”
Command1.Caption = “Carica Elementi”
Command2.Caption = “Somma elementi”
Command3.Caption = “Esci”
For k = 0 To 9
Text1(k).Text = “”
Text1(k).TabIndex = k
Next k
End Sub

Un esempio di applicazioni sulle matrici può essere il calcolo delle soluzioni un sistema di equazioni primo grado con la regola di kramer, quindi il calcolo di un determinante.
Ad esempio per il calcolo di un determinante di 3 ordine matrice 3 per 3 si può utilizzare la regola di Sarrus:
Ad esempio data la matrice 3 per 3
La regola di Sarrus prevede la trasformazione della matrice iniziale in una di dimensioni 3 righe e 5 colonne con ulteriori due colonne che sono la copia della prima e della seconda colonna.

1 2 3
3 4 5                  Matrice di cui si vuole calcolare il determinante
1 6 0

1 2 3 1 2
3 4 5 3 4                 Matrice Trasformata
1 6 0 1 6
Sulla nuova matrice ottenuta si effettua il calcolo la somma dei prodotti di degli elementi di diagonale principali da sinistra a destra meno la somma dei prodotti di diagonale secondaria da destra verso sinistra. A questo punto l’algoritmo consta prima nella trasformazione della matrice di partenza nella matrice di Sarrus e poi nel calcolo del determinante attraverso la regola citata in precedenza.
Allora si ha;

Inizio
Per i=1 a 3
Per j=1 a 5
Se j<=3 allora
S(i,j)=m(i,j)
Altrimenti
S(i,j+2)=m(i, j-3)
Fine se
Fine ciclo j
Fine ciclo u
Calcolo del determinante
D=1
Sp=0
P1=1
P2=1
P3=1
Per i=1 a 3
Per j=1 a 3
Se i=j allora
P1=P1*S(i,j)
Fine Se
Se j=i+1 allora
P2=P2*s(i,j)
Fine Se
Se i=i+2 allora
P3=S(i,j)*P3
Fine Se
Fine ciclo j
Fine ciclo i
D=P1+P2+P3
P1=1, P2=1, P3=1
Per i=1 a 3
Per j=1 a 3
Se i+j=4 allora
P1=S(i,j)*P1
Fine Se
Se i+j=5 allora
P2=S(i,j)*P2
Fine Se
Se i+j=6 allora
P2=S(i,j)*P2
Fine Se
Fine Ciclo j
Fine Ciclo i
D=D-P1-P2-P3
Scrivi “Il determinante è”
Scrivi D
Fine

La traduzione in Visual Basic è lasciata per esercizio allo studente.


Azioni

Information

Lascia un commento

Effettua il login con uno di questi metodi per inviare il tuo commento:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...




%d blogger cliccano Mi Piace per questo: