Contenuto principale

mtimes, *

Moltiplicazione di matrici

Descrizione

C = A*B è il prodotto matriciale di A e B. Se A è una matrice m x p e B è una matrice p x n, C è una matrice m x n definita da

C(i,j)=k=1pA(i,k)B(k,j).

Questa definizione dice che C(i,j) è il prodotto interno dell'i-esima riga di A con la j-esima colonna di B. È possibile scrivere questa definizione utilizzando l'operatore due punti di MATLAB® come

C(i,j) = A(i,:)*B(:,j)
Per A e B non scalari, il numero di colonne di A deve essere uguale al numero di righe di B. La moltiplicazione di matrici non è universalmente commutativa per input non scalari. Ossia A*B, non è solitamente uguale a B*A. Se almeno un input è scalare, A*B è equivalente a A.*B ed è commutativo.

esempio

C = mtimes(A,B) è un modo alternativo per eseguire A*B, ma è utilizzato di rado. Consente il sovraccarico degli operatori per le classi.

Esempi

comprimi tutto

Creare un vettore riga 1x 4 A e un vettore colonna 4x1 B.

A = [1 1 0 0];
B = [1; 2; 3; 4];

Moltiplicare A per B.

C = A*B
C = 
3

Il risultato è uno scalare 1x1, chiamato anche prodotto scalare o prodotto interno dei vettori A e B. In alternativa, è possibile calcolare il prodotto scalare AB con la sintassi dot(A,B).

Moltiplicare B per A.

C = B*A
C = 4×4

     1     1     0     0
     2     2     0     0
     3     3     0     0
     4     4     0     0

Il risultato è una matrice 4x4, chiamata anche prodotto esterno dei vettori A e B. Il prodotto esterno di due vettori AB, restituisce una matrice.

Creare due array, A e B.

A = [1 3 5; 2 4 7];
B = [-5 8 11; 3 9 21; 4 0 8];

Calcolare il prodotto di A e B.

C = A*B
C = 2×3

    24    35   114
    30    52   162

Calcolare il prodotto interno della seconda riga di A e della terza colonna di B.

A(2,:)*B(:,3)
ans = 
162

Questa risposta equivale a C(2,3).

Argomenti di input

comprimi tutto

Operandi, specificati come scalari, vettori o matrici.

  • Se almeno un input è scalare, A*B è equivalente a A.*B. In questo caso, l'array non scalare può avere qualsiasi dimensione.

  • Per input non scalari, A e B devono essere array bidimensionali in cui il numero di colonne in A deve essere uguale al numero di righe in B.

  • Se A o B è una classe a numero intero (int16, uint8, …), l'altro input deve essere uno scalare. Gli operandi con un tipo di dato a numero intero non possono essere complessi.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | duration | calendarDuration
Supporto numeri complessi:

Argomenti di output

comprimi tutto

Prodotto, restituito come scalare, vettore o matrice. L'array C ha lo stesso numero di righe dell'input A e lo stesso numero di colonne dell'input B. Ad esempio, se A è una matrice vuota m x 0 e B è una matrice vuota 0 x n, A*B è una matrice m x n di zeri.

Suggerimenti

  • Con moltiplicazioni di matrici concatenate come A*B*C, è possibile migliorare i tempi di esecuzione utilizzando le parentesi per stabilire l'ordine delle operazioni. Si consideri il caso della moltiplicazione di tre matrici con A*B*C, dove A è 500x2, B è 2x500 e C è 500x2.

    • In assenza di parentesi, l'ordine delle operazioni è da sinistra verso destra, quindi viene calcolato prima A*B che produce una matrice 500x500. Questa matrice viene quindi moltiplicata per C per ottenere il risultato 500x2.

    • Se invece si specifica A*(B*C), B*C viene moltiplicato per primo, producendo una matrice 2x2. La matrice piccola moltiplica quindi A per produrre lo stesso risultato 500x2, ma con meno operazioni e minore utilizzo di memoria intermedia.

Riferimenti

[1] “BLAS (Basic Linear Algebra Subprograms).” Accessed July 18, 2022. https://netlib.org/blas/.

[2] Davis, Timothy A. “Algorithm 1000: SuiteSparse:GraphBLAS: Graph Algorithms in the Language of Sparse Linear Algebra.” ACM Transactions on Mathematical Software 45, no. 4 (December 31, 2019): 1–25. https://doi.org/10.1145/3322125.

Funzionalità estese

espandi tutto

Generazione di codice HDL
Genera codice VHDL, Verilog e SystemVerilog per progetti FPGA e ASIC utilizzando HDL Coder™.

Cronologia versioni

Introduzione prima di R2006a

espandi tutto