Main Content

mtimes, *

Multiplicación de matrices

Descripción

ejemplo

C = A*B es el producto matricial de A y B. Si A es una matriz de m por p y B es una matriz de p por n, C es una matriz de m por n definida por

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

Esta definición indica que C(i,j) es el producto interno de la i-ésima fila de A por la j-ésima columna de B. Puede escribir esta definición utilizando el operador de dos puntos de MATLAB® como

C(i,j) = A(i,:)*B(:,j)
Si A y B son no escalares, el número de columnas de A debe ser igual al número de filas de B. La multiplicación de matrices no es universalmente conmutativa para entradas no escalares. Es decir, normalmente A*B no es igual a B*A. Si al menos una entrada es escalar, A*B es equivalente a A.*B y es conmutativa.

C = mtimes(A,B) es una forma alternativa de ejecutar A*B, pero se utiliza con poca frecuencia. Permite la sobrecarga de operadores para las clases.

Ejemplos

contraer todo

Cree un vector fila de 1 por 4, A, y un vector columna de 4 por 1, B.

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

Multiplique A por B.

C = A*B
C = 3

El resultado es un escalar de 1 por 1, también llamado producto punto o producto interno de los vectores A y B. De forma alternativa, puede calcular el producto punto AB con la sintaxis dot(A,B).

Multiplique B por A.

C = B*A
C = 4×4

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

El resultado es una matriz de 4 por 4, también llamado producto externo de los vectores A y B. El producto externo de dos vectores, AB, devuelve una matriz.

Cree dos arreglos, A y B.

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

Calcule el producto de A y B.

C = A*B
C = 2×3

    24    35   114
    30    52   162

Calcule el producto interno de la segunda fila de A y la tercera columna de B.

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

La respuesta es la misma que C(2,3).

Argumentos de entrada

contraer todo

Operandos, especificados como escalares, vectores o matrices.

  • Si al menos una entrada es escalar, A*B es equivalente a A.*B. En este caso, el arreglo no escalar puede ser de cualquier tamaño.

  • En las entradas no escalares, A y B deben ser arreglos 2D donde el número de columnas de A debe ser igual al número de filas de B.

  • Si A o B es una clase de enteros (int16, uint8, …), la otra entrada debe ser un escalar. Los operandos con un tipo de datos enteros no pueden ser complejos.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | duration | calendarDuration
Soporte de números complejos:

Argumentos de salida

contraer todo

Producto, devuelto como escalar, vector o matriz. El arreglo C tiene el mismo número de filas que la entrada A y el mismo número de columnas que la entrada B. Por ejemplo, si A es una matriz vacía de m por 0 y B es una matriz vacía de 0 por n, A*B es una matriz de ceros de m por n.

Sugerencias

  • Con multiplicaciones de matrices en cadena, como A*B*C, podría mejorar el tiempo de ejecución utilizando paréntesis para dictar el orden de las operaciones. Considere la multiplicación de tres matrices con A*B*C, donde A es de 500 por 2, B es de 2 por 500 y C es de 500 por 2.

    • Sin paréntesis, el orden de las operaciones es de izquierda a derecha por lo que A*B se calcula primero, lo que forma una matriz de 500 por 500. Después esta matriz se multiplica por C para obtener el resultado de 500 por 2.

    • Si, en su lugar, especifica A*(B*C), B*C se multiplica primero y produce una matriz de 2 por 2. Después, la matriz pequeña multiplica A para obtener el mismo resultado de 500 por 2, pero con menos operaciones y menos uso de memoria intermedia.

Referencias

[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.

Capacidades ampliadas

Generación de código HDL
Genere código VHDL, Verilog y SystemVerilog para diseños FPGA y ASIC mediante HDL Coder™.

Historial de versiones

Introducido antes de R2006a

expandir todo