ml - Introduzione interattiva di MATLAB       Vai all'indice del corso

Matrici di tipi particolari
Versione 0.8

Indice del modulo

2map.10 - Quadro di functions che danno matrici particolari
2map.12 - Matrici fornite da zeroes, ones ed eye
2map.15 - Matrici fornite dalla function pascal
2map.16 - Matrici fornite dalla function hadamard
2map.17 - Matrici fornite dalla function hankel
2map.18 - Matrici fornite dalla function hilb
2map.19 - Matrici fornite dalla function invhilb
2map.20 - Matrici fornite dalla function toeplitz
2map.21 - Matrici fornite dalla function vander
2map.22 - Matrici fornite dalla function wilkiinson
2map.25 - Alcune matrici fornite dalla function rand
2map.30 - Quadrati magici
2map.32 - Matrici fornite dalla function magic
2map.34 - Quadrato magico di Dürer
2map.40 - Permutazione delle colonne di una matrice
2map.50 - Matrici permutazione

torna all'indice del modulo - del corso

2map.10 - Quadro di functions che danno matrici particolari

MATLAB mette a disposizione varie functions che forniscono matrici di tipi determinati e delle varie dimensioni. In particolare presentiamo le seguenti:

eye(n) matrice identita` del tipo n x n
ones(nr,nc) matrice con tutti gli componenti uguali ad 1 e del tipo nr x nc
zeros(nr,nc) matrice con tutti gli componenti uguali a 0 e del tipo nr x nc
pascal(n) matrice quadrata n x n il cui componente (i,j) e` il coefficiente binomiale i+j su i
hadamard(n) matrice di Hadamard quadrata n x n il cui componenti sono 1 e -1 e le cui colonne sono ortogonali
hankel(vc) matrice di Hankel quadrata avente il vettore vc nella prima colonna
hankel(vc,vr) matrice di Hankel avente il vettore vc nella prima colonna ed il vettore vr nella prima riga
hilb(n) matrice quadrata n x n il cui componente (i,j) e` 1/(i+j)
invhilb(n) matrice quadrata n x n inversa della matrice di Hilbert di ordine n
toeplitz(v) matrice di Toeplitz simmetrica con il vettore v nella prima colonna e nella prima riga
toeplitz(vc,vr) matrice di Toeplitz non simmetrica con il vettore vc nella prima colonna ed il vettore vr per la prima riga
vander(v) matrice di Vandermonde quadrata avente il vettore v nella penultima colonna
magic(n) un determinato quadrato magico n x n
rand(nr,nc) matrice nr x nc i cui componenti costituiscono sequenze pseudocasuali

L'elenco completo può essere consultato ponendosi in stato di interrogazione dell'help con il comando helpdesk e poi concentrando la ricerca con i comandi function by subject ed elementary matrices.

Ricordiamo in particolare che MATLAB puo` fornire numerose matrici per il test di procedure di algebra lineare, matrici che, trattate senza le dovute attenzioni, possono portare a rilevanti errori di approssimazione.

torna all'indice del modulo - del corso

2map.12 - Matrici fornite da zeroes, ones ed eye

Verifica il funzionamento delle functions zeroes, ones ed eye.

>> zeros(2) 
ans =
     0     0
     0     0
>> zeros(3,1) 
ans =
     0
     0
     0
>> ones(3) 
ans =
     1     1     1
     1     1     1
     1     1     1
>> ones(2,5) 
ans =
     1     1     1     1     1
     1     1     1     1     1
>> eye(5) 
ans =
     1     0     0     0     0
     0     1     0     0     0
     0     0     1     0     0
     0     0     0     1     0
     0     0     0     0     1
>> eye(3,4) 
ans =
     1     0     0     0
     0     1     0     0
     0     0     1     0

torna all'indice del modulo - del corso

2map.15 - Matrici fornite dalla function pascal

Verifica il funzionamento della function pascal(n), considera un quadrato magico e ricorda le operazioni di somma e prodotto di matrici.

>> A = pascal(4) 
A =
     1     1     1     1
     1     2     3     4
     1     3     6    10
     1     4    10    20
>> B = magic(4) 
B =
    16     2     3    13
     5    11    10     8
     9     7     6     12
     4    14    15     1
>> SumAB = A + B 
SumAB =
    17     3     4    14
     6    13    13    12
    10    10    12    22
     5    18    25    21
>> ProAB = A * B 
ProAB =
    34    34    34    34
    69   101   101    69
   125   217   219   119
   206   396   403   185 

torna all'indice del modulo - del corso

2map.16 - Matrici fornite dalla function hadamard

Verifica il funzionamento della function hadamard(n).

>> hadamard(4)
ans =
      1            1            1            1      
      1           -1            1           -1      
      1            1           -1           -1      
      1           -1           -1            1      
>> hadamard(8)
ans =
      1          1          1          1          1          1          1          1 
      1         -1          1         -1          1         -1          1         -1
      1          1         -1         -1          1          1         -1         -1
      1         -1         -1          1          1         -1         -1          1
      1          1          1          1         -1         -1         -1         -1
      1         -1          1         -1         -1          1         -1          1
      1          1         -1         -1         -1         -1          1          1
      1         -1         -1          1         -1          1          1         -1

torna all'indice del modulo - del corso

2map.17 - Matrici fornite dalla function hankel

Verifica il funzionamento della function hankel(n).

>> >> hankel([2:2:10])
ans =
      2            4            6            8           10      
      4            6            8           10            0      
      6            8           10            0            0      
      8           10            0            0            0      
     10            0            0            0            0      
>> hankel([1:3],[7:10])
Warning: Column wins anti-diagonal conflict.
> In C:\MATLAB_SR11\toolbox\matlab\elmat\hankel.m at line 27
ans =
      1            2            3            8      
      2            3            8            9      
      3            8            9           10  

torna all'indice del modulo - del corso

2map.18 - Matrici fornite dalla function hilb

Verifica il funzionamento della function hilb(n).

>> hilb(3)
ans =
      1           1/2          1/3
     1/2          1/3          1/4
     1/3          1/4          1/5
>> hilb(5)
ans =
      1           1/2          1/3          1/4          1/5     
     1/2          1/3          1/4          1/5          1/6     
     1/3          1/4          1/5          1/6          1/7     
     1/4          1/5          1/6          1/7          1/8     
     1/5          1/6          1/7          1/8          1/9     

torna all'indice del modulo - del corso

2map.19 - Matrici fornite dalla function invhilb

Verifica il funzionamento della function invhilb(n).

>> format rat
>> h = hilb(4)
h =
      1           1/2          1/3          1/4     
     1/2          1/3          1/4          1/5     
     1/3          1/4          1/5          1/6     
     1/4          1/5          1/6          1/7     
>> ih = invhilb(4)
ih =
     16         -120          240         -140      
   -120         1200        -2700         1680      
    240        -2700         6480        -4200      
   -140         1680        -4200         2800      
>> h*ih
ans =
      1            0            0            0      
      0            1            0            0      
      0            0            1            *      
      0            0            0            1      
>> ih*h
ans =
      1            0            0            0      
      0            1            0            0      
      0            0            1            0      
      0            0            *            1   

torna all'indice del modulo - del corso

2map.20 - Matrici fornite dalla function toeplitz

Verifica il funzionamento della function toeplitz(n).

>> toeplitz([1 1.5 2 2.5 3])
ans =
    1.0000    1.5000    2.0000    2.5000    3.0000
    1.5000    1.0000    1.5000    2.0000    2.5000
    2.0000    1.5000    1.0000    1.5000    2.0000
    2.5000    2.0000    1.5000    1.0000    1.5000
    3.0000    2.5000    2.0000    1.5000    1.0000
>> toeplitz([1:5],[1.5:0.5:5.5])
Warning: Column wins diagonal conflict.
> In C:\MATLAB_SR11\toolbox\matlab\elmat\toeplitz.m at line 18
ans =
    1.0000    2.0000    2.5000    3.0000    3.5000    4.0000    4.5000    5.0000    5.5000
    2.0000    1.0000    2.0000    2.5000    3.0000    3.5000    4.0000    4.5000    5.0000
    3.0000    2.0000    1.0000    2.0000    2.5000    3.0000    3.5000    4.0000    4.5000
    4.0000    3.0000    2.0000    1.0000    2.0000    2.5000    3.0000    3.5000    4.0000
    5.0000    4.0000    3.0000    2.0000    1.0000    2.0000    2.5000    3.0000    3.5000 

torna all'indice del modulo - del corso

2map.21 - Matrici fornite dalla function vander

Verifica il funzionamento della function vander(n).

>> hilb(3)
ans =
      1           1/2          1/3
     1/2          1/3          1/4
     1/3          1/4          1/5
>> hilb(5)
ans =
      1           1/2          1/3          1/4          1/5     
     1/2          1/3          1/4          1/5          1/6     
     1/3          1/4          1/5          1/6          1/7     
     1/4          1/5          1/6          1/7          1/8     
     1/5          1/6          1/7          1/8          1/9 

torna all'indice del modulo - del corso

2map.22 - Matrici fornite dalla function wilkinson

Verifica il funzionamento della function wilkinson(n).

>> wilkinson(7)
ans =
     3     1     0     0     0     0     0
     1     2     1     0     0     0     0
     0     1     1     1     0     0     0
     0     0     1     0     1     0     0
     0     0     0     1     1     1     0
     0     0     0     0     1     2     1
     0     0     0     0     0     1     3

torna all'indice del modulo - del corso

2map.25 - Semplici matrici fornite dalla function rand

Verifica il funzionamento della function rand(n).

>> rand(5,4)
ans =
    0.0579    0.2028    0.0153    0.4186
    0.3529    0.1987    0.7468    0.8462
    0.8132    0.6038    0.4451    0.5252
    0.0099    0.2722    0.9318    0.2026
    0.1389    0.1988    0.4660    0.6721
>> r=rand(4,4)
r =
    0.8381    0.8318    0.3046    0.3028
    0.0196    0.5028    0.1897    0.5417
    0.6813    0.7095    0.1934    0.1509
    0.3795    0.4289    0.6822    0.6979
>> fix(100*r)
ans =
    83    83    30    30
     1    50    18    54
    68    70    19    15
    37    42    68    69
>> round(100*r)
ans =
    84    83    30    30
     2    50    19    54
    68    71    19    15
    38    43    68    70

torna all'indice del modulo - del corso

2map.30 - Quadrati magici

I quadrati magici sono matrici quadrate n x n nelle cui caselle compaiono senza ripetizioni gli interi positivi compresi tra 1 ed n2 disposti in modo tale che le somme delle componenti delle diverse righe e le somme delle componenti delle diverse colonne siano tutte coincidenti. Se indichiamo con Sn il valore di queste somme, dato che la somma degli interi tra 1 e n2 e` uguale a n2(n2-1)/2, deve essere nSn = n2(n2-1)/2 e quindi Sn = n(n2+1)/2). Nei quadrati magici piu` pregevoli hanno questo valore anche le somme degli componenti delle due diagonali della matrice.

I quadrati magici sono quindi matrici molto particolari, ricche di simmetrie. Esse sono state studiate fin dall'antichita`, sia come fenomeni aritmetici interessanti, sia in relazione a loro supposte proprieta` magiche. Attualmente sono studiati anche in relazione alla determinazione di procedimenti utilizabili in attivita` di crittografia.

torna all'indice del modulo - del corso

2map.32 - Matrici fornite dalla function magic

MATLAB mette a disposizione la function magic(n) che fornisce un quadrato magico di tipo n x n per tutti gli interi n maggiori o uguali a 2. Verificarne il funzionamento.

>> magic(2) 
ans =
     1     3
     4     2
>> Mgc4 = magic(4) 
Mgc4 =
    16     2     3    13
     5    11    10     8
     9     7     6     12
     4    14    15     1
>> magic(6) 
ans =
    35     1     6    26    19    24
     3    32     7    21    23    25
    31     9     2    22    27    20
     8    28    33    17    10    15
    30     5    34    12    14    16
     4    36    29    13    18    11
>> magic(8) 
ans =
    64     2     3    61    60     6     7    57
     9    55    54    12    13    51    50    16
    17    47    46    20    21    43    42    24
    40    26    27    37    36    30    31    33
    32    34    35    29    28    38    39    25
    41    23    22    44    45    19    18    48
    49    15    14    52    53    11    10    56
     8    58    59     5     4    62    63     1

torna all'indice del modulo - del corso

2map.34 - Quadrato magico di Dürer

Introdurre il quadrato magico che compare nella incisione di Albrecht Dürer del 1513 intitolata Melencholia e calcolare le somme delle sue colonne, delle sue righe e delle sue diagonali.

>> Drr=[16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1] 
Drr =
    16     3     2    13
     5    10    11     8
     9     6     7    12
     4    15    14     1
>> sum(Drr) 
ans =
    34    34    34    34
>> sum(Drr')' 
ans =
    34
    34
    34
    34
>> diag(Drr) 
ans =
    16
    10
     7
     1
>> sum(diag(Drr)) 
ans =
    34

torna all'indice del modulo - del corso

2map.40 - Permutazione delle colonne di una matrice

Il quadrato magico di ordine 4 fornito dalla function magic differisce da quello di Dürer solo per lo scambio della seconda e della terza colonna. Quindi si puo` ottenere un quadrato magico dall'altro applicandogli la operazione di permutazione delle colonne espressa dal vettore [1 3 2 4].


>> Mgc4P = Mgc4(:,[1 3 2 4]) 
Mgc4P =
    16     3     2    13
     5    10    11     8
     9     6     7    12
     4    15    14     1

Sottraendo le due matrici Drr e Mgc4P si deve ottenere la matrice con tutti i componenti nulli.

>> Drr - Mgc4P 
ans = 
     0     0     0     0 
     0     0     0     0 
     0     0     0     0 
     0     0     0     0 

Osserviamo che verificare che una matrice sia nulla e` piu` agevole che verificare che due matrici coincidono. Quindi un procedimento come il precedente puo` effettivamente risultare utile per verificare che due matrici di grandi dimensioni sono riconducibili l'una all'altra mediante l'azione di date trasformazioni.

torna all'indice del modulo - del corso

2map.50 - Matrici permutazione

Si dice matrice permutazione ogni matrice quadrata che in ogni sua linea, riga o colonna, presenta uno ed un solo 1, mentre tutti le altre componenti sono nulle.

Sottoponendo ad una permutazione le sole righe o le sole colonne della matrice identita` n x n si ottiene una matrice permutazione.


>> I = eye(5); 
>> I([2 5 1 4 3],:)
ans =
     0     1     0     0     0
     0     0     0     0     1
     1     0     0     0     0
     0     0     0     1     0
     0     0     1     0     0

Servendosi di una permutazione si possono permutare anche le righe di una matrice. Servendosi di due permutazioni si possono permutare sia le colonne che le righe delle matrici.

torna all'indice del modulo - del corso