Matrici e quadrati magici
Definizione di matrice
Nell'ambiente di MATLAB®, una matrice è un array rettangolare di numeri. A volte viene attribuito un significato speciale alle matrici 1x1, che sono scalari, e alle matrici con una sola riga o colonna, che sono vettori. MATLAB offre altri metodi per registrare sia dati numerici che non numerici, ma inizialmente è consigliabile pensare a tutto come a una matrice. In MATLAB le operazioni sono state ideate per essere il più naturali possibili. Mentre altri linguaggi di programmazione lavorano su numeri uno alla volta, MATLAB consente di operare su intere matrici in modo rapido e facile. Un buon esempio di matrice, utilizzato in tutta questa documentazione, appare nell'incisione rinascimentale Melencolia I, opera dell'artista tedesco Albrecht Dürer, appassionato di matematica.
L'immagine è densa di simbolismo matematico e, osservandola attentamente, si può notare una matrice nell'angolo superiore a destra. Questa matrice è nota come quadrato magico e molti, all'epoca di Dürer, ritenevano che avesse vere proprietà magiche. Ha invece dimostrato di possedere alcune caratteristiche affascinanti degne di essere analizzate.
Inserimento di matrici
Il metodo migliore per iniziare a utilizzare MATLAB consiste nell'imparare a gestire le matrici. Avviare MATLAB e seguire tutti gli esempi.
È possibile inserire matrici in MATLAB in diversi modi:
Inserire un elenco esplicito di elementi.
Caricare matrici da file di dati esterni.
Generare matrici utilizzando le funzioni incluse nel programma.
Creare matrici utilizzando funzioni personalizzate e salvarle su file.
Iniziare inserendo la matrice di Dürer sotto forma di elenco di elementi. È necessario semplicemente rispettare alcune convenzioni di base:
Separare gli elementi di una riga con spazi vuoti o virgole.
Utilizzare un punto e virgola,
;
, per indicare la fine di ogni riga.Racchiudere l'intero elenco di elementi tra parentesi quadre,
[ ]
.
Per inserire la matrice di Dürer, dalla Finestra di comando digitare semplicemente
A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]
MATLAB visualizza la matrice appena inserita:
A = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1
Questa matrice corrisponde ai numeri nell'incisione. Una volta inserita, la matrice viene automaticamente ricordata nel workspace di MATLAB. Può essere semplicemente indicata come A
. Ora che A
appare nel workspace, osservare cosa rende questa matrice così interessante. Perché è magica?
Funzioni sum, transpose e diag
Probabilmente si è già a conoscenza del fatto che le proprietà speciali di un riguardano i vari modi per sommarne gli elementi. Calcolando la somma di ogni riga o colonna, oppure delle due diagonali principali, si ottiene sempre lo stesso numero. Utilizzare MATLAB per verificare questa affermazione. La prima dichiarazione da provare è
sum(A)
MATLAB risponde con
ans = 34 34 34 34
Quando non si specifica una variabile di output, per memorizzare i risultati di un calcolo MATLAB utilizza la variabile ans
, abbreviazione del termine inglese answer, cioè risposta. Si è calcolato un vettore di riga che contiene le somme delle colonne di A
. Ogni colonna presenta la stessa somma, la somma magica 34.
Per quanto riguarda la somma delle righe, poiché MATLAB lavora preferibilmente sulle colonne di una matrice, uno dei metodi per effettuare questo calcolo consiste nel trasporre la matrice, calcolare la somma delle colonne della trasposizione e quindi trasporre i risultati.
MATLAB presenta due operatori per la trasposizione. L'operatore apostrofo, ad esempio A'
, effettua una complessa trasposizione coniugata. Ruota una matrice sulla diagonale principale e cambia il segno del componente immaginario di qualsiasi elemento complesso della matrice. L'operatore punto-apostrofo (A.'
) effettua la trasposizione senza influire sul segno degli elementi complessi. I due operatori restituiscono lo stesso risultato in caso di matrici che contengono tutti elementi reali.
Quindi
A'
genera
ans = 16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1
e
sum(A')'
genera un vettore di colonna contenente la somma delle righe
ans = 34 34 34 34
Vi è un altro metodo per sommare le righe evitando la doppia trasposizione, che utilizza l'argomento dimensione per la funzione sum
:
sum(A,2)
genera
ans = 34 34 34 34
La somma degli elementi della diagonale principale è ottenuta tramite le funzioni sum
e diag
:
diag(A)
genera
ans = 16 10 7 1
e
sum(diag(A))
genera
ans = 34
L'altra diagonale, la cosiddetta antidiagonale, non è così importante dal punto di vista matematico e quindi MATLAB non offre una funzione specifica per calcolarla. Ma fliplr
, una funzione originariamente creata per essere usata in ambiente grafico, inverte gli elementi di una matrice da sinistra a destra:
sum(diag(fliplr(A))) ans = 34
Si è verificato che la matrice nell'incisione di Dürer è effettivamente un quadrato magico e, nel processo, si è provato a utilizzare alcune delle operazioni sulle matrici di MATLAB. Nelle sezioni successive si continuerà a utilizzare questa matrice per illustrare altre capacità di MATLAB.
La funzione magic
MATLAB dispone in realtà di una funzione incorporata che crea quadrati magici praticamente di ogni dimensione. Non sorprende che questa funzione prenda il nome di magic
:
B = magic(4) B = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1
Questa matrice richiama da vicino quella nell'incisione di Dürer e presenta tutte le stesse proprietà 'magiche'; la sola differenza è che le due colonne intermedie sono scambiate.
È possibile scambiare le due colonne intermedie di B
per rendere il quadrato uguale a quello di Dürer A
. Per ciascuna riga di B
, disporre le colonne nell'ordine specificato da 1, 3, 2, 4:
A = B(:,[1 3 2 4])
A = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1
Generazione di matrici
Il software di MATLAB offre funzioni che generano matrici di base.
Tutti zero | |
Tutti uno | |
Elementi casuali distribuiti uniformemente | |
Elementi casuali distribuiti non uniformemente |
Ecco alcuni esempi:
Z = zeros(2,4) Z = 0 0 0 0 0 0 0 0 F = 5*ones(3,3) F = 5 5 5 5 5 5 5 5 5 N = fix(10*rand(1,10)) N = 9 2 6 4 8 7 4 0 8 4 R = randn(4,4) R = 0.6353 0.0860 -0.3210 -1.2316 -0.6014 -2.0046 1.2366 1.0556 0.5512 -0.4931 -0.6313 -0.1132 -1.0998 0.4620 -2.3252 0.3792