-->

Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

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.