Saltar al contenido principal
LibreTexts Español

18.1: Multiplicación Matricial (y Adición)

  • Page ID
    87814
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    Podemos pensar en un hipotético lenguaje informático (o scripting) en el que debemos declarar un “tableau” de\(m\) por\(n\) números para que sea una matriz de doble índice o una matriz; también introducimos un operador hipotético de “multiplicación” #. (Tenga en cuenta que # no es un carácter/operador de multiplicación de MATLAB real; se introduce aquí únicamente con fines pedagógicos temporales). En el caso en el que (digamos) declaramos que A y B son matrices entonces el producto se\(C=A \# B\) interpretaría automáticamente como multiplicación elemento por elemento: tanto A como B deben ser del mismo tamaño\(m \times n\) para que la operación tenga sentido, y el resultado C por supuesto también sería de tamaño\(m \times n\). En el caso en el que declaremos\(\mathrm{A}\) y\(\mathrm{B}\) seamos matrices entonces el producto se\(\mathrm{A} \# \mathrm{~B}\) interpretaría automáticamente como multiplicación matriz-matriz: si\(\mathrm{A}\) es\(m_{1}\) por\(n_{1}\) y \(\mathrm{B}\)es\(m_{2}\) para\(n_{2}\) entonces\(n_{1}\) debe ser igual\(m_{2}\) para que la operación tenga sentido y el producto\(\mathrm{C}=\mathrm{A} \# \mathrm{~B}\) sería de dimensiones\(m_{1} \times n_{2}\). Este es un ejemplo muy sencillo de programación orientada a objetos en la que se define una operación, digamos multiplicación, -de maneras potencialmente diferentes- para diferentes clases de objetos (en nuestro caso aquí, arrays y matrices) - pero también podríamos imaginar una extensión a funciones y otras entidades también. Este modelo para lenguajes de programación y abstracción puede ser muy potente por diversas razones.

    Sin embargo, en algunos casos tal abstracción puede ser posiblemente más una carga que una bendición. Por ejemplo, en MATLAB a menudo deseamos reinterpretar arrays como matrices o matrices como matrices en muchas ocasiones diferentes incluso con un solo código o aplicación. Para evitar problemas de conversión entre estas dos clases, MATLAB prefiere tratar arrays y matrices como (efectivamente) una sola clase y luego distinguir las dos opciones de multiplicación a través de operadores especiales. En particular, como ya sabemos, la multiplicación elemento por elemento de dos matrices es efectuada por el operador .*\(\mathrm{C}=\mathrm{A} . * \mathrm{~B}\) formas C como producto elemento por elemento de\(\mathrm{A}\) y\(\mathrm{B}\); la multiplicación matriz-matriz (en el sentido de álgebra lineal) se efectúa entonces simplemente por\(*-C=A * B\) formas\(C\) como el producto matriz de A y B. De hecho, el énfasis en MATLAB al menos históricamente está en el álgebra lineal, y por lo tanto la multiplicación de matrices es en cierto sentido la predeterminada; las operaciones elemento por elemento son el “caso especial” y requieren el “punteado operadores.”

    En principio, también debemos distinguir la suma y resta elemento por elemento como .+ y .- de la suma y resta matriz-matriz como + y -. Sin embargo, la suma y resta elemento por elemento y la suma y resta matriz-matriz son idénticas -tanto en términos de los requisitos en los operandos como en el resultado de la operación- y, por lo tanto, basta con introducir solo un único operador de suma y resta,\(+\) y \(-\), respectivamente. (En particular, tenga en cuenta que no hay operadores. + y. - en MATLAB.) De manera similar, solo necesitamos un único operador de transposición, ', que es directamente aplicable tanto a matrices como a matrices. \({ }_{-}\)

    De este modo se deduce que la suma matriz-matriz, resta, multiplicación y transposición se efectúan en MATLAB esencialmente de la misma manera que escribiríamos tales operaciones en el contexto de álgebra lineal: en la suma o resta de dos vectores\(x\) y\(y\), el \(x+y\)y\(x-y\) de álgebra lineal se convierte\(\mathrm{x}+\mathrm{y}\) y\(\mathrm{x}-\mathrm{y}\) en MATLAB; en la multiplicación de dos matrices\(A\) y\(B\), la\(A B\) de álgebra lineal se convierte \(\mathrm{A} * \mathrm{~B}\)en MATLAB; y en la transposición de una matriz (o vector)\(M\), el\(M^{\mathrm{T}}\) álgebra lineal se convierte en\(\mathrm{M}\) 'en MATLAB.

    Por supuesto, también podría implementar siempre estas operaciones matriciales en MATLAB “explícitamente” con bucles for e indexación apropiada: por ejemplo,\(z=x+y\) podría implementarse como

    z = 0.*x; % initialize z to be same size as x 
    for i = 1:length(x) 
        z(i) = x(i) + y(i); 
    end
    

    sin embargo, esto lleva a un código que es mucho menos eficiente y también mucho más largo y, de hecho, mucho menos legible (y por lo tanto desconectable). (Tenga en cuenta también que lo anterior aún no contiene ninguna verificación de dimensiones o indicadores de error). Ya hemos discutido el poder de la abstracción de funciones. En el caso de estas funciones muy ubicuas - matriz estándar y manipulaciones matriciales - MATLAB proporciona la conveniencia adicional de caracteres especiales y, por lo tanto, una sintaxis muy simple. (Tenga en cuenta que como estos caracteres especiales son, como siempre, una manera fácil de invocar el operador o función subyacente de MATLAB: por ejemplo, la operación de multiplicación elemento por elemento A. B también se puede escribir (pero menos convenientemente) como tiempos\((A, B)\), y la matriz-matriz multiplicación A B también se puede escribir como mtimes (A, B).)

    Cerramos con un ejemplo simple para ilustrar nuevamente las diferencias entre las operaciones de matriz y matriz. Introducimos dos vectores de columna\(x=\left(\begin{array}{ll}1 & 1\end{array}\right)^{\mathrm{T}}\) y\(y=\left(\begin{array}{ll}2 & 2\end{array}\right)^{\mathrm{T}}\) que en MATLAB expresamos como\(\mathrm{x}=[1 ; 1]\) y\(\mathrm{y}=[2 ; 2]\). (Tenga en cuenta la distinción: paréntesis para vectores y matrices en el contexto de álgebra lineal, paréntesis para vectores y matrices en MATLAB; paréntesis en MATLAB se utilizan para indexación y llamadas a funciones, no para definir un vector o matriz.) Entonces podemos realizar la operación de álgebra lineal del producto interno\(\alpha=x^{\mathrm{T}} y\), de dos maneras: con multiplicación de elementopor-byelement (y por lo tanto veces) como alfa\(=\operatorname{sum}(\mathrm{x} \cdot * \mathrm{y})\); con multiplicación matricial (y por lo tanto mtimes) como alpha_too\(=\mathrm{x}^{\prime} * \mathrm{y}\).


    This page titled 18.1: Multiplicación Matricial (y Adición) is shared under a CC BY-NC-SA 4.0 license and was authored, remixed, and/or curated by Masayuki Yano, James Douglass Penn, George Konidaris, & Anthony T Patera (MIT OpenCourseWare) via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.