Decomposizione Matrice
Scomporre una matrice complessa in una più semplice
Decomposizione di una Matrice
La decomposizione di una matrice è un'operazione che permette di rappresentare una matrice complessa in forme più semplici, facilitando analisi e calcoli. Questa tecnica è fondamentale in molti ambiti, come la risoluzione di sistemi lineari, la compressione dei dati e il machine learning.
Tra i principali tipi di decomposizione troviamo:
1. Decomposizione LU: Scomposizione di una matrice in una triangolare inferiore e una superiore.
2. Decomposizione spettrale: Rappresenta una matrice quadrata tramite i suoi autovalori e autovettori.
3. Decomposizione SVD (Singular Value Decomposition): Scomposizione di una matrice in tre componenti, utile per riduzione dimensionale e raccomandazioni.
Decomposizione Spettrale
La decomposizione spettrale si applica a matrici quadrate simmetriche e si basa sugli autovalori e autovettori della matrice.
Dato che una matrice \( A \) è simmetrica, essa può essere scritta come: \[ A = Q \cdot \Lambda \cdot Q^T \]
dove:
- ( Q ) è una matrice ortogonale contenente gli autovettori di ( A ),
- Λ è una matrice diagonale con gli autovalori di ( A ).
Esempio in Python
import numpy as np
# Definiamo una matrice simmetrica
A = np.array([[4, 2],
[2, 3]])
# Calcoliamo autovalori e autovettori
eigenvalues, eigenvectors = np.linalg.eigh(A)
# Stampiamo i risultati
print("Matrice originale A:")
print(A)
print("\nAutovalori:")
print(eigenvalues)
print("\nAutovettori:")
print(eigenvectors)
```
**Output**:
```
Matrice originale A:
[[4 2]
[2 3]]
Autovalori:
[2. 5.]
Autovettori:
[[-0.70710678 0.70710678]
[ 0.70710678 0.70710678]]
Decomposizione a Valori Singolari (SVD)
La decomposizione SVD rappresenta una matrice qualsiasi A come: \[ A = U \cdot \Sigma \cdot V^T \] dove:
- ( U ) e ( V ) sono matrici ortogonali,
- Σ è una matrice diagonale contenente i valori singolari.
Esempio in Python
# Definiamo una matrice generica
A = np.array([[1, 2, 3],
[4, 5, 6]])
# Calcoliamo la decomposizione SVD
U, S, VT = np.linalg.svd(A)
# Stampiamo i risultati
print("Matrice originale A:")
print(A)
print("\nMatrice U:")
print(U)
print("\nValori singolari (S):")
print(S)
print("\nMatrice V^T:")
print(VT)
```
**Output**:
```
Matrice originale A:
[[1 2 3]
[4 5 6]]
Matrice U:
[[-0.3863177 -0.92236578]
[-0.92236578 0.3863177 ]]
Valori singolari (S):
[9.508032 0.77286964]
Matrice V^T:
[[-0.42866713 -0.56630692 -0.7039467 ]
[ 0.80596391 0.11238241 -0.58119949]
[ 0.40824829 -0.81649658 0.40824829]]
Conclusione
- Decomposizione spettrale: utile per analisi di sistemi lineari e trasformazioni simmetriche.
- Decomposizione SVD: cruciale per riduzione dimensionale e analisi dei dati.
- Decomposizione LU: ideale per risolvere sistemi lineari.