# Prodotto diadico

In algebra lineare, il prodotto diadico o prodotto esterno, di due vettori è una matrice . Se i due vettori hanno dimensioni n e m, il loro prodotto esterno è una matrice n × m.
Il prodotto esterno si può definire in ambito più generale: dati due tensori, il loro prodotto esterno è un tensore. Il prodotto esterno dei tensori è anche chiamato il loro prodotto tensoriale e può essere usato per definire l'algebra tensoriale .
Il prodotto esterno differisce da:
* il prodotto scalare, che a partire da una coppia di vettori produce uno scalare;
* il prodotto di Kronecker, che a partire da una coppia di matrici produce una matrice;
* la classica moltiplicazione di matrici righe per colonne.

## Definizione

Dati due vettori di dimensioni $m\times 1$ e $n\times 1$ rispettivamente
    $\mathbf {u} ={\begin{bmatrix}u_{1}\\u_{2}\\\vdots \\u_{m}\end{bmatrix}},\quad \mathbf {v} ={\begin{bmatrix}v_{1}\\v_{2}\\\vdots \\v_{n}\end{bmatrix}},$
il loro prodotto esterno, denotato $\mathbf {u} \otimes \mathbf {v} ,$ è definito come una matrice $\mathbf {A}$ con forma $m\times n$ e il prodotto esterno è ottenuto moltiplicando ogni elemento di $\mathbf {u}$ con ogni elemento di $\mathbf {v}$:
    $\mathbf {u} \otimes \mathbf {v} =\mathbf {A} ={\begin{bmatrix}u_{1}v_{1}&u_{1}v_{2}&\dots &u_{1}v_{n}\\u_{2}v_{1}&u_{2}v_{2}&\dots &u_{2}v_{n}\\\vdots &\vdots &\ddots &\vdots \\u_{m}v_{1}&u_{m}v_{2}&\dots &u_{m}v_{n}\end{bmatrix}}.$
Alternativamente nella notazione con indici:
    $(\mathbf {u} \otimes \mathbf {v} )_{ij}=u_{i}v_{j}.$
Sia $\cdot$ il prodotto scalare, allora per ogni vettore $\mathbf {w}$ di dimensioni $n\times 1$ si ha
    $(\mathbf {u} \otimes \mathbf {v} )\mathbf {w} =(\mathbf {v} \cdot \mathbf {w} )\mathbf {u} ,$
e per ogni vettore $\mathbf {x}$ di dimensioni $1\times m$ si ha
    $\mathbf {x} (\mathbf {u} \otimes \mathbf {v} )=(\mathbf {x} \cdot \mathbf {u} )\mathbf {v} ^{\operatorname {T} }.$
Se $\mathbf {u}$ e $\mathbf {v}$ sono vettori con stesse dimensioni, allora $\det(\mathbf {u} \otimes \mathbf {v} )=0.$
Il prodotto esterno $\mathbf {u} \otimes \mathbf {v}$ è equivalente a una moltiplicazione matriciale $\mathbf {u} \mathbf {v} ^{\operatorname {T} },$ purché $\mathbf {u}$ è rappresentato come a $m\times 1$ vettore colonna e $\mathbf {v}$ come un $n\times 1$ vettore colonna (che rende $\mathbf {v} ^{\operatorname {T} }$ un vettore riga). Ad esempio, se $m=4$ e $n=3,$ allora
    $\mathbf {u} \otimes \mathbf {v} =\mathbf {u} \mathbf {v} ^{\operatorname {T} }={\begin{bmatrix}u_{1}\\u_{2}\\u_{3}\\u_{4}\end{bmatrix}}{\begin{bmatrix}v_{1}&v_{2}&v_{3}\end{bmatrix}}={\begin{bmatrix}u_{1}v_{1}&u_{1}v_{2}&u_{1}v_{3}\\u_{2}v_{1}&u_{2}v_{2}&u_{2}v_{3}\\u_{3}v_{1}&u_{3}v_{2}&u_{3}v_{3}\\u_{4}v_{1}&u_{4}v_{2}&u_{4}v_{3}\end{bmatrix}}.$
Per vettori a elementi complessi, è spesso utile prendere la trasposta coniugata di $\mathbf {v} ,$ indicato $\mathbf {v} ^{\dagger }$ o $\left(\mathbf {v} ^{\operatorname {T} }\right)^{*}$:
    $\mathbf {u} \otimes \mathbf {v} =\mathbf {u} \mathbf {v} ^{\dagger }=\mathbf {u} \left(\mathbf {v} ^{\operatorname {T} }\right)^{*}.$

### Confronto con il prodotto scalare euclideo

Se $m=n,$ allora si può prendere il prodotto matriciale $\mathbf {u} ^{\textsf {T}}\mathbf {v}$ ottenendo uno scalare (o matrice $1\times 1$). Questo è il prodotto scalare standard per gli spazi vettoriali euclidei. Il prodotto scalare è la traccia del prodotto esterno. A differenza del prodotto scalare, il prodotto esterno non è commutativo.
La moltiplicazione di un vettore $\mathbf {w}$ per una matrice $\mathbf {u} \otimes \mathbf {v}$ può essere scritta in termini di prodotto scalare, usando la relazione $\left(\mathbf {u} \otimes \mathbf {v} \right)\mathbf {w} =\mathbf {u} \left\langle \mathbf {v} ,\mathbf {w} \right\rangle$.

### Prodotto esterno di tensori

Dati due tensori $\mathbf {u} ,\mathbf {v}$ con dimensioni $(k_{1},k_{2},\dots ,k_{m})$ e $(l_{1},l_{2},\dots ,l_{n})$, il loro prodotto esterno $\mathbf {u} \otimes \mathbf {v}$ è un tensore con dimensioni $(k_{1},k_{2},\dots ,k_{m},l_{1},l_{2},\dots ,l_{n})$ ed elementi
    $(\mathbf {u} \otimes \mathbf {v} )_{i_{1},i_{2},\dots i_{m},j_{1},j_{2},\dots ,j_{n}}=u_{i_{1},i_{2},\dots ,i_{m}}v_{j_{1},j_{2},\dots ,j_{n}}.$
Ad esempio, se $\mathbf {A}$ ha dimensioni $(3,5,7)$ e $\mathbf {B}$ ha dimensioni $(10,100),$ il loro prodotto esterno $\mathbf {C}$ ha dimensioni $(3,5,7,10,100).$ Se $\mathbf {A}$ ha una componente $\mathbf {A} _{2,2,4}=11$ e $\mathbf {B}$ ha una componente $\mathbf {B} _{8,88}=13,$ allora la componente di $\mathbf {C}$ formato dal prodotto esterno è $\mathbf {C} _{2,2,4,8,88}=143.$

### Collegamento con il prodotto Kronecker

Il prodotto esterno e il prodotto di Kronecker sono strettamente correlati; infatti lo stesso simbolo è comunemente usato per denotare entrambe le operazioni.
    $\mathbf {u} \otimes _{\text{Kron}}\mathbf {v} ={\begin{bmatrix}4\\5\\8\\10\\12\\15\end{bmatrix}},\qquad \mathbf {u} \otimes _{\text{outer}}\mathbf {v} ={\begin{bmatrix}4&5\\8&10\\12&15\end{bmatrix}}.$
Nel caso dei vettori colonna, il prodotto di Kronecker può essere visto come una forma di vettorializzazione del prodotto esterno. In particolare, per due vettori colonna $\mathbf {u}$ e $\mathbf {v}$, possiamo scrivere:
    $\mathbf {u} \otimes _{\text{Kron}}\mathbf {v} =\operatorname {vec} (\mathbf {v} \otimes _{\text{outer}}\mathbf {u} ).$
Notare che l'ordine dei vettori è invertito nella parte destra dell'uguaglianza.
Un'altra identità simile che evidenzia ulteriormente la somiglianza tra le operazioni è
    $\mathbf {u} \otimes _{\text{Kron}}\mathbf {v} ^{\operatorname {T} }=\mathbf {u} \mathbf {v} ^{\operatorname {T} }=\mathbf {u} \otimes _{\text{outer}}\mathbf {v} ,$
dove non è necessario invertire l'ordine dei vettori. L'espressione centrale usa la moltiplicazione matriciale, dove i vettori sono considerati come matrici colonna/riga.

## Proprietà

Il prodotto esterno dei vettori soddisfa le seguenti proprietà:
    $(\mathbf {u} \otimes \mathbf {v} )^{\operatorname {T} }=(\mathbf {v} \otimes \mathbf {u} );$
    $(\mathbf {v} +\mathbf {w} )\otimes \mathbf {u} =\mathbf {v} \otimes \mathbf {u} +\mathbf {w} \otimes \mathbf {u} ;$
    $\mathbf {u} \otimes (\mathbf {v} +\mathbf {w} )=\mathbf {u} \otimes \mathbf {v} +\mathbf {u} \otimes \mathbf {w} ;$
    $c(\mathbf {v} \otimes \mathbf {u} )=(c\mathbf {v} )\otimes \mathbf {u} =\mathbf {v} \otimes (c\mathbf {u} );$
    $(\mathbf {u} \otimes \mathbf {v} )\otimes \mathbf {w} =\mathbf {u} \otimes (\mathbf {v} \otimes \mathbf {w} ).$

### Rango di un prodotto esterno

Se $\mathbf {u}$ e $\mathbf {v}$ sono entrambi diversi da zero, la matrice del prodotto esterno $\mathbf {u} \mathbf {v} ^{\operatorname {T} }$ ha sempre rango 1. Infatti le colonne del prodotto esterno sono tutte proporzionali alla prima colonna, quindi sono tutte linearmente dipendenti da quella colonna e quindi la matrice è di rango 1.

## Nei linguaggi di programmazione

In alcuni linguaggi di programmazione, data una funzione a due argomenti f (o un operatore binario), il prodotto esterno di f e due array unidimensionali A e B è un array bidimensionale C tale che C[i, j] = f(A[i], B[j]). Questo è rappresentato sintatticamente in vari modi: in APL, come operatore binario infisso ∘.f; in J, come l'avverbio postfisso f/; in R, come funzione outer(A, B, f) o lo speciale %o% ; in Mathematica, come Outer[f, A, B]. In MATLAB, la funzione kron(A, B) viene utilizzato per questo prodotto. Questi spesso si generalizzano in argomenti multidimensionali e più di due argomenti.
Nella libreria Python NumPy, il prodotto esterno può essere calcolato con la funzione np.outer. Al contrario, np.kron risulta in un flat array. Il prodotto esterno di array multidimensionali può essere calcolato utilizzando np.multiply.outer .