Le permutazioni in Matlab e Octave
Sia Matlab che Octave hanno una funzione predefinita per calcolare le permutazioni di un insieme di elementi. Si tratta della funzione perms().
perms(array)
Questa funzione mi permette di generare tutte le permutazioni di un vettore di \( n \) numeri, restituendo una matrice in cui ogni riga rappresenta una permutazione.
Inoltre, mi consente indirettamente anche di esplorare il concetto di gruppo simmetrico usando Matlab.
Nota. Il gruppo simmetrico \( S_n \) è il gruppo di tutte le permutazioni di \( n \) elementi distinti. Una volta stabilito il gruppo simmetrico posso calcolare la composizione di due permutazioni semplicemente applicando una permutazione dopo l'altra, visualizzare i cicli o le trasposizioni, ecc..
Un esempio pratico
Ecco un esempio di codice MATLAB che mostra come generare il gruppo simmetrico \( S_3 \), che è il gruppo di tutte le permutazioni di tre elementi.
Genero tutte le permutazioni di un insieme {1,2,3}.
permutations = perms([1,2,3]);
L'insieme va inserito come argomento della funzione perms() sotto forma di array [1,2,3]
La funzione genera e restituisce tutte le permutazioni degli elementi.
disp(permutazions)
3 2 1
3 1 2
2 3 1
2 1 3
1 3 2
1 2 3
A partire da questo codice, posso esplorare ulteriori operazioni, come il calcolo del prodotto di due permutazioni, l'indagine su sottogruppi, o l'analisi delle proprietà delle permutazioni come la parità (dispari o pari).
Esempio (composizione di permutazioni)
Per comporre due permutazioni posso utilizzare l'operatore di indicizzazione per applicare una permutazione all'altra.
Questo processo si basa sull'applicazione sequenziale di una permutazione all'altra, che è l'essenza della composizione nel contesto dei gruppi simmetrici.
Per prima cosa definisco due permutazioni \( \sigma \) e \( \tau \) in MATLAB:
tau = [3, 1, 2];
sigma = [2, 3, 1];
Per calcolare \( \sigma \circ \tau \) (dove \( \tau \) viene applicato per primo), uso l'operatore di indicizzazione per applicare prima \( \tau \) e poi \( \sigma \) ai risultati di \( \tau \).
composed_permutation = sigma(tau);
Poi stampo il risultato.
disp(composed_permutation);
1 2 3
In questo esempio il risultato è 1, 2, 3 perché:
$$ \tau = (1 \rightarrow 3, 2 \rightarrow 1, 3 \rightarrow 2) $$
$$ \sigma = (1 \rightarrow 2, 2 \rightarrow 3, 3 \rightarrow 1) $$
La composizione \( \sigma \circ \tau \) applica prima \( \tau \) e poi \( \sigma \).
In altre parole, viene calcolata prima la permutazione più interna \( \tau \) e poi la permutazione più esterna \( \sigma \) al risultato.
\begin{array}{|c|c|c|}
\hline
\text{Elemento} & \tau & \sigma(\tau) \\
\hline
1 & 3 & \sigma(3) = 1 \\
2 & 1 & \sigma(1) = 2 \\
3 & 2 & \sigma(2) = 3 \\
\hline
\end{array}
Lo stesso approccio si può estendere per comporre più di due permutazioni o per realizzare calcoli più complessi sui gruppi simmetrici.
E così via.