Calcolatore Prodotto Scalare tra Vettori
Calcola facilmente il prodotto scalare (dot product) tra due vettori in qualsiasi dimensione. Inserisci le componenti e ottieni il risultato con visualizzazione grafica.
Vettore A
Vettore B
Risultato:
Guida Completa al Prodotto Scalare tra Vettori
Il prodotto scalare (o dot product) è un’operazione fondamentale nell’algebra lineare con applicazioni in fisica, ingegneria, computer grafica e machine learning. Questa guida approfondita ti spiegherà tutto ciò che devi sapere sul calcolo del prodotto scalare tra due vettori.
Cos’è il Prodotto Scalare?
Il prodotto scalare è un’operazione che prende due vettori di uguale dimensione e restituisce un singolo numero (scalare). A differenza del prodotto vettoriale, il risultato non è un vettore ma uno scalare.
Matematicamente, per due vettori a = [a₁, a₂, …, aₙ] e b = [b₁, b₂, …, bₙ], il prodotto scalare è definito come:
a · b = a₁b₁ + a₂b₂ + … + aₙbₙ = Σ(aᵢbᵢ) per i = 1 a n
Proprietà Fondamentali del Prodotto Scalare
- Commutatività: a · b = b · a
- Distributività: a · (b + c) = a · b + a · c
- Associatività con moltiplicazione scalare: (k a) · b = k (a · b) = a · (k b)
- Relazione con la norma: a · a = ||a||²
- Ortogonalità: a · b = 0 se e solo se a e b sono ortogonali (perpendicolari)
Formula del Prodotto Scalare in Termini di Angolo
Il prodotto scalare può anche essere espresso usando l’angolo θ tra i due vettori:
a · b = ||a|| ||b|| cosθ
Dove ||a|| e ||b|| rappresentano le norme (lunghezze) dei vettori a e b rispettivamente.
Applicazioni Pratiche del Prodotto Scalare
- Fisica: Calcolo del lavoro (L = F · d), dove F è la forza e d è lo spostamento
- Computer Grafica: Illuminazione (modello di illuminazione di Phong), ray tracing
- Machine Learning: Similarità tra vettori (cosine similarity), reti neurali
- Elaborazione Segnali: Filtri, correlazione tra segnali
- Geometria: Proiezioni ortogonali, calcolo di angoli tra vettori
Calcolo del Prodotto Scalare: Esempi Pratici
Esempio 1: Vettori in 2D
Dati i vettori a = [3, 4] e b = [1, 2]:
a · b = (3)(1) + (4)(2) = 3 + 8 = 11
Esempio 2: Vettori in 3D
Dati i vettori a = [1, 3, -5] e b = [4, -2, -1]:
a · b = (1)(4) + (3)(-2) + (-5)(-1) = 4 – 6 + 5 = 3
Esempio 3: Vettori Ortogonali
Dati i vettori a = [1, 0, 0] e b = [0, 1, 0] (ortogonali tra loro):
a · b = (1)(0) + (0)(1) + (0)(0) = 0
Il risultato 0 conferma che i vettori sono ortogonali.
Relazione tra Prodotto Scalare e Angolo tra Vettori
Una delle proprietà più importanti del prodotto scalare è la sua relazione con l’angolo tra due vettori. Possiamo usare il prodotto scalare per:
- Determinare se due vettori sono ortogonali (prodotto scalare = 0)
- Calcolare l’angolo tra due vettori usando la formula:
cosθ = (a · b) / (||a|| ||b||)
Dove θ è l’angolo tra i vettori a e b. - Trovare la proiezione di un vettore su un altro
| Caratteristica | Prodotto Scalare | Prodotto Vettoriale |
|---|---|---|
| Tipo di risultato | Scalare (numero) | Vettore |
| Dimensione vettori | Qualsiasi (stessa dimensione) | Solo 3D |
| Commutatività | a · b = b · a | a × b = – (b × a) |
| Applicazioni tipiche | Proiezioni, angoli, lavoro | Aree, momenti, rotazioni |
| Ortogonalità | a · b = 0 se ortogonali | a × b è ortogonale sia ad a che a b |
Algoritmo per il Calcolo del Prodotto Scalare
Ecco i passaggi per calcolare manualmente il prodotto scalare:
- Verificare che i due vettori abbiano la stessa dimensione
- Moltiplicare le componenti corrispondenti dei due vettori
- Sommare tutti i prodotti ottenuti
- Il risultato è il prodotto scalare
Per vettori di dimensione n, il prodotto scalare richiede n moltiplicazioni e n-1 addizioni.
Complessità Computazionale
L’algoritmo naive per il calcolo del prodotto scalare ha una complessità O(n), dove n è la dimensione dei vettori. Questo perché:
- Ogni componente richiede 1 moltiplicazione
- Ogni componente (eccetto l’ultima) richiede 1 addizione
- Totale operazioni: 2n – 1 ≈ O(n)
Implementazione in Diversi Linguaggi di Programmazione
Python (con NumPy)
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
dot_product = np.dot(a, b)
# oppure: dot_product = a @ b
print(dot_product) # Output: 32
JavaScript
function dotProduct(a, b) {
if (a.length !== b.length) throw new Error("Vectors must be same length");
return a.reduce((sum, val, i) => sum + val * b[i], 0);
}
const a = [1, 2, 3];
const b = [4, 5, 6];
console.log(dotProduct(a, b)); // Output: 32
C++
#include <iostream>
#include <vector>
double dotProduct(const std::vector<double>& a, const std::vector<double>& b) {
if (a.size() != b.size()) throw std::invalid_argument("Vectors must be same size");
double result = 0.0;
for (size_t i = 0; i < a.size(); ++i) {
result += a[i] * b[i];
}
return result;
}
int main() {
std::vector<double> a = {1, 2, 3};
std::vector<double> b = {4, 5, 6};
std::cout << dotProduct(a, b) << std::endl; // Output: 32
return 0;
}
Errori Comuni nel Calcolo del Prodotto Scalare
- Dimensione diversa dei vettori: Il prodotto scalare è definito solo per vettori della stessa dimensione. Tentare di calcolarlo con vettori di dimensioni diverse porterà a risultati errati o errori.
- Confondere con il prodotto vettoriale: Il prodotto scalare restituisce uno scalare, mentre il prodotto vettoriale restituisce un vettore (solo in 3D).
- Dimenticare di sommare tutti i prodotti: È facile dimenticare di sommare tutti i prodotti delle componenti corrispondenti.
- Errori di segno: Particolare attenzione va posta ai segni delle componenti negative.
- Normalizzazione errata: Quando si usa il prodotto scalare per calcolare angoli, è essenziale normalizzare correttamente i vettori.
Applicazioni Avanzate del Prodotto Scalare
Machine Learning: Similarità tra Vettori
Nel machine learning, il prodotto scalare è alla base del concetto di similarità coseno, una metrica che misura quanto due vettori sono simili indipendentemente dalla loro magnitudine:
similarità coseno = (a · b) / (||a|| ||b||)
Questa misura è ampiamente usata in:
- Sistemi di raccomandazione (es: “utenti che hanno apprezzato X hanno anche apprezzato Y”)
- Elaborazione del linguaggio naturale (similarità tra documenti o parole)
- Riconoscimento di immagini (similarità tra feature vectors)
| Metrica | Formula | Range | Invarianza alla Scala | Applicazioni Tipiche |
|---|---|---|---|---|
| Similarità Coseno | (a·b)/(|a||b|) | [-1, 1] | Sì | Testo, raccomandazioni |
| Prodotto Scalare | a·b | (-∞, ∞) | No | Reti neurali, attention |
| Distanza Euclidea | ||a-b|| | [0, ∞) | No | Clustering, k-NN |
| Correlazione di Pearson | cov(a,b)/(σ_aσ_b) | [-1, 1] | Sì | Analisi statistica |
Computer Grafica: Illuminazione
Nel rendering 3D, il prodotto scalare è fondamentale per calcolare:
- Illuminazione diffusa (Lambertian reflectance):
I_diffuse = I_light * (n · l)
dove n è la normale alla superficie e l è la direzione della luce - Specular highlights (Phong reflection):
I_specular = I_light * (v · r)^p
dove v è la direzione della vista, r è la direzione della luce riflessa, e p è il coefficiente di lucidità - Shadow mapping: Per determinare se un punto è in ombra
- Environment mapping: Per riflessi realistici
Fisica: Lavoro e Energia
In fisica, il lavoro compiuto da una forza è definito come il prodotto scalare tra la forza e lo spostamento:
L = F · d = ||F|| ||d|| cosθ
Dove:
- L è il lavoro
- F è il vettore forza
- d è il vettore spostamento
- θ è l’angolo tra forza e spostamento
Questa formula spiega perché:
- Non si compie lavoro quando la forza è perpendicolare allo spostamento (cos90° = 0)
- Il lavoro è massimo quando forza e spostamento sono nella stessa direzione (cos0° = 1)
- Il lavoro può essere negativo quando la forza si oppone allo spostamento (cos180° = -1)
Estensioni del Concetto di Prodotto Scalare
Prodotto Scalare in Spazi Astratti
Il concetto di prodotto scalare può essere esteso a spazi più astratti come:
- Spazi di funzioni: Il prodotto scalare tra due funzioni f(x) e g(x) su un intervallo [a,b] è definito come:
〈f,g〉 = ∫[a,b] f(x)g(x)dx - Spazi di Hilbert: Spazi infinito-dimensionali con prodotto scalare, fondamentali in meccanica quantistica
- Spazi di sequenze: Per sequenze infinite {aₙ} e {bₙ}, il prodotto scalare è Σ aₙ bₙ (se la serie converge)
Prodotti Scalari Pesati
In alcuni contesti, si usa un prodotto scalare pesato dove ogni componente ha un peso diverso:
a · b = Σ wᵢ aᵢ bᵢ
Dove wᵢ sono i pesi. Questo è utile in:
- Analisi statistica (covarianza pesata)
- Elaborazione di immagini (filtri con pesi diversi per diversi pixel)
- Ottimizzazione (dove alcune dimensioni sono più importanti di altre)
Prodotto Scalare Complesso
Per vettori con componenti complesse, il prodotto scalare è definito come:
a · b = Σ aᵢ bᵢ*
Dove bᵢ* è il complesso coniugato di bᵢ. Questo assicura che:
- Il prodotto scalare di un vettore con sé stesso sia reale e non negativo
- La norma sia sempre un numero reale non negativo