Apéndice

Apéndice

Me gustaría lograr el siguiente resultado en tikz: ingrese la descripción de la imagen aquí

Sin embargo, sólo puedo dibujar las matrices sin las operaciones matemáticas entre ellas, es decir, el producto escalar y los signos iguales (tener la misma altura para el paréntesis es una ventaja). A continuación adjunto parte de mi código y hasta dónde he llegado hasta ahora.

Cualquier ayuda sería muy apreciada.

Gracias

\documentclass[usenames,dvipsnames]{beamer}
\usepackage{tikz}
    \usetikzlibrary{arrows.meta}
    \usetikzlibrary{decorations.pathreplacing}
    \usetikzlibrary{fit, calc, matrix, positioning, arrows.meta, intersections, through, backgrounds, patterns}
\usepackage{pgfplots}
    \pgfplotsset{compat = newest}
    \pgfplotsset{overwrite option/.style args={#1 with #2}{#1=#2,#1/.code=}}


\begin{frame}{MATRIX MULTIPLICATION}
    More graphically:
    
    \begin{tikzpicture}
    \scriptsize
        \matrix (m)[
        matrix of math nodes,
        nodes in empty cells,
        %minimum width=width("998888"),
        left delimiter=(,
        right delimiter=)
        ] {
        a_{11} && \cdots && a_{1k} && \cdots &&  a_{1n} \\
        \vdots &&        && \vdots &&        &&\vdots  \\
        a_{i1} && \cdots && a_{ik} && \cdots &&  a_{in} \\
        \vdots &&        && \vdots &&        && \vdots  \\
        a_{m1} && \cdots && a_{mk} && \cdots &&  a_{mn} \\
        } ;
        
        \draw (m-3-1.south west) rectangle (m-3-5.north east);
        
    \begin{scope}[xshift=95pt]
        
        \matrix (m)[
        matrix of math nodes,
        nodes in empty cells,
        %minimum width=width("998888"),
        left delimiter=(,
        right delimiter=)
        ] {
        b_{11} && \cdots && b_{1j} && \cdots &&  b_{1p} \\
        \vdots &&        && \vdots &&        &&\vdots  \\
        b_{k1} && \cdots && b_{kj} && \cdots &&  b_{kp} \\
        \vdots &&        && \vdots &&        && \vdots  \\
        b_{n1} && \cdots && b_{nj} && \cdots &&  b_{np} \\
        } ;
        
        \draw (m-5-3.south west) rectangle (m-1-3.north east);
    \end{scope}
    \begin{scope}[xshift=200pt]
        
        \matrix (m)[
        matrix of math nodes,
        nodes in empty cells,
        %minimum width=width("998888"),
        left delimiter=(,
        right delimiter=)
        ] {
        c_{11} && \cdots && c_{1j} && \cdots &&  c_{1p} \\
        \vdots &&        && \vdots &&        &&\vdots  \\
        c_{i1} && \cdots && c_{ij} && \cdots &&  c_{ip} \\
        \vdots &&        && \vdots &&        && \vdots  \\
        c_{m1} && \cdots && c_{mj} && \cdots &&  c_{mp} \\
        } ;
        
        \draw (m-3-3.south west) rectangle (m-3-3.north east);
    \end{scope}    
    \end{tikzpicture}
\end{frame}

ingrese la descripción de la imagen aquí

Respuesta1

En primer lugar, usaría la positioningbiblioteca para colocar las matrices una al lado de la otra, sin necesidad de encontrar la correcta xshift. (También puedes hacerlo \matrix (m2) at (95pt,0) ...en lugar de scope.)

Habiendo nombrado las matrices m, m2y m3, puedes, por ejemplo, hacer

\path (m) -- node {$\cdot$} (m2)
      (m2) -- node {$=$} (m3);

para colocar los símbolos a medio camino entre ellos.

ingrese la descripción de la imagen aquí

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning, matrix}
\begin{document}
\begin{tikzpicture}
    \scriptsize
        \matrix (m)[
        matrix of math nodes,
        nodes in empty cells,
        %minimum width=width("998888"),
        left delimiter=(,
        right delimiter=)
        ] {
        a_{11} && \cdots && a_{1k} && \cdots &&  a_{1n} \\
        \vdots &&        && \vdots &&        &&\vdots  \\
        a_{i1} && \cdots && a_{ik} && \cdots &&  a_{in} \\
        \vdots &&        && \vdots &&        && \vdots  \\
        a_{m1} && \cdots && a_{mk} && \cdots &&  a_{mn} \\
        } ;
        
        \draw (m-3-1.south west) rectangle (m-3-5.north east);
        

        
        \matrix (m2) [
        matrix of math nodes,
        nodes in empty cells,
        %minimum width=width("998888"),
        left delimiter=(,
        right delimiter=),
        right=of m
        ] {
        b_{11} && \cdots && b_{1j} && \cdots &&  b_{1p} \\
        \vdots &&        && \vdots &&        &&\vdots  \\
        b_{k1} && \cdots && b_{kj} && \cdots &&  b_{kp} \\
        \vdots &&        && \vdots &&        && \vdots  \\
        b_{n1} && \cdots && b_{nj} && \cdots &&  b_{np} \\
        } ;
        
        \draw (m-5-3.south west) rectangle (m-1-3.north east);

        
        \matrix (m3)[
        matrix of math nodes,
        nodes in empty cells,
        %minimum width=width("998888"),
        left delimiter=(,
        right delimiter=),
        right=of m2
        ] {
        c_{11} && \cdots && c_{1j} && \cdots &&  c_{1p} \\
        \vdots &&        && \vdots &&        &&\vdots  \\
        c_{i1} && \cdots && c_{ij} && \cdots &&  c_{ip} \\
        \vdots &&        && \vdots &&        && \vdots  \\
        c_{m1} && \cdots && c_{mj} && \cdots &&  c_{mp} \\
        } ;
        
        \draw (m-3-3.south west) rectangle (m-3-3.north east);

        \path (m) -- node {$\cdot$} (m2)
              (m2) -- node {$=$} (m3);
    \end{tikzpicture}
\end{document}

Apéndice

Tenga en cuenta que beamerno puede usar una matriz directamente, necesita un fragilemarco o usar ampersand replacement, ver por ejemploError "Un solo signo usado con un código cat incorrecto" al usar la matriz tikz en el proyector

A continuación hice el marco fragile. También hice un nuevo estilo pmatque apliqué a todas las matrices y modifiqué un poco las cosas para que realmente encajaran en el marco.

ingrese la descripción de la imagen aquí

\documentclass[usenames,dvipsnames]{beamer}
\usepackage{tikz}
    \usetikzlibrary{arrows.meta}
    \usetikzlibrary{decorations.pathreplacing}
    \usetikzlibrary{fit, calc, matrix, positioning, arrows.meta, intersections, through, backgrounds, patterns}
\usepackage{pgfplots}
    \pgfplotsset{compat = newest}
    \pgfplotsset{overwrite option/.style args={#1 with #2}{#1=#2,#1/.code=}}
\begin{document}

\begin{frame}[fragile]{MATRIX MULTIPLICATION}
    More graphically:
    
 \begin{tikzpicture}[
    pmat/.style={
       matrix of math nodes,
       nodes={font=\footnotesize\strut, inner sep=1.5pt},
       left delimiter=(,
       right delimiter=),
       }
       ]

        \matrix (m)[pmat] {
        a_{11} && \cdots && a_{1k} && \cdots &&  a_{1n} \\
        \vdots &&        && \vdots &&        &&\vdots  \\
        a_{i1} && \cdots && a_{ik} && \cdots &&  a_{in} \\
        \vdots &&        && \vdots &&        && \vdots  \\
        a_{m1} && \cdots && a_{mk} && \cdots &&  a_{mn} \\
        } ;
        
        \draw (m-3-1.south west) rectangle (m-3-5.north east);
        
        
        \matrix (m2) [pmat,right=of m] {
        b_{11} && \cdots && b_{1j} && \cdots &&  b_{1p} \\
        \vdots &&        && \vdots &&        &&\vdots  \\
        b_{k1} && \cdots && b_{kj} && \cdots &&  b_{kp} \\
        \vdots &&        && \vdots &&        && \vdots  \\
        b_{n1} && \cdots && b_{nj} && \cdots &&  b_{np} \\
        } ;
        
        \draw (m-5-3.south west) rectangle (m-1-3.north east);

        
        \matrix (m3)[pmat,right=of m2] {
        c_{11} && \cdots && c_{1j} && \cdots &&  c_{1p} \\
        \vdots &&        && \vdots &&        &&\vdots  \\
        c_{i1} && \cdots && c_{ij} && \cdots &&  c_{ip} \\
        \vdots &&        && \vdots &&        && \vdots  \\
        c_{m1} && \cdots && c_{mj} && \cdots &&  c_{mp} \\
        } ;
        
        \draw (m-3-3.south west) rectangle (m-3-3.north east);

        \path (m) -- node {$\cdot$} (m2)
              (m2) -- node {$=$} (m3);
    \end{tikzpicture}
\end{frame}
\end{document}

Respuesta2

ingrese la descripción de la imagen aquí

Con el uso del \vphantom{b_{ij}}comienzo de cada fila con variables en la primera y última matriz:

\documentclass[usenames,dvipsnames]{beamer}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
                backgrounds, 
                calc, 
                decorations.pathreplacing,
                fit, 
                intersections, 
                matrix, 
                positioning, patterns,
                through
                }

\begin{document}
\begin{frame}[fragile]
\frametitle{MATRIX MULTIPLICATION}

    More graphically:
    
\[
    \begin{tikzpicture}[
every matrix/.style = {matrix of math nodes,
                       nodes in empty cells,
                       nodes = {inner sep=2pt, font=\scriptsize},
                       left delimiter=(,
                       right delimiter=),
                       inner sep=0pt
                       },
                        ]    
\matrix (m1)
    {
\vphantom{b_{ij}}
    a_{11} & \cdots & a_{1k} & \cdots &  a_{1n} \\
    \vdots &        & \vdots &        & \vdots  \\
\vphantom{b_{ij}}
    a_{i1} & \cdots & a_{ik} & \cdots &  a_{in} \\
    \vdots &        & \vdots &        & \vdots  \\
\vphantom{b_{ij}}
    a_{m1} & \cdots & a_{mk} & \cdots &  a_{mn} \\
    } ;
\draw (m1-3-1.south west) rectangle (m1-3-5.north east);
\node (m1a) [right=2mm of m1] {$\cdot$};
\matrix (m2)[right=2mm of m1a] 
    {
    b_{11} & \cdots & b_{1j} & \cdots &  b_{1p} \\
    \vdots &        & \vdots &        & \vdots  \\
    b_{k1} & \cdots & b_{kj} & \cdots &  b_{kp} \\
    \vdots &        & \vdots &        & \vdots  \\
    b_{n1} & \cdots & b_{nj} & \cdots &  b_{np} \\
    } ;
\draw (m2-5-3.south west) rectangle (m2-1-3.north east);
\node (m2a) [right=2mm of m2] {$=$};
\matrix (m3) [right=2mm of m2a] 
    {
\vphantom{b_{ij}}
    c_{11} & \cdots & c_{1j} & \cdots &  c_{1p} \\
    \vdots &        & \vdots &        &\vdots  \\
\vphantom{b_{ij}}
    c_{i1} & \cdots & c_{ij} & \cdots &  c_{ip} \\
    \vdots &        & \vdots &        & \vdots  \\
\vphantom{b_{ij}}
    c_{m1} & \cdots & c_{mj} & \cdots &  c_{mp} \\
    } ;
\draw (m3-3-3.south west) rectangle (m3-3-3.north east);
    \end{tikzpicture}
\]
\end{frame}
\end{document}

Respuesta3

Puedes hacer eso con {pNiceMatrix}of nicematrix. Este entorno es similar a {pmatrix}pero amsmathcrea nodos PGF/Tikz debajo de las celdas de la matriz. Es fácil usar estos nodos para dibujar rectángulos con Tikz.

\documentclass[usenames,dvipsnames]{beamer}
\usepackage{tikz}
\usepackage{nicematrix}

\begin{document}

\begin{frame}[fragile]{MATRIX MULTIPLICATION}
    More graphically:

\NiceMatrixOptions{small,create-large-nodes,columns-width=4mm}

$\begin{pNiceArray}{ccccc<{\vphantom{b_{np}}}}
a_{11} & \cdots & a_{1j} & \cdots &  a_{1p} \\
\vdots &        & \vdots &        &\vdots  \\
a_{i1} & \cdots & a_{ij} & \cdots &  a_{ip} \\
\vdots &        & \vdots &        & \vdots  \\
a_{m1} & \cdots & a_{mj} & \cdots &  a_{mp} 
\CodeAfter
\tikz \draw (3-1-large.south west) rectangle (3-5-large.north east);
\end{pNiceArray}
\cdot
\begin{pNiceArray}{ccccc}
b_{11} & \cdots & b_{1j} & \cdots &  b_{1p} \\
\vdots &        & \vdots &        &\vdots  \\
b_{k1} & \cdots & b_{kj} & \cdots &  b_{kp} \\
\vdots &        & \vdots &        & \vdots  \\
b_{n1} & \cdots & b_{nj} & \cdots &  b_{np} 
\CodeAfter
\tikz \draw (5-3-large.south west) rectangle (1-3-large.north east);
\end{pNiceArray}
=
\begin{pNiceArray}{ccccc<{\vphantom{b_{np}}}}
c_{11} & \cdots & c_{1j} & \cdots &  c_{1p} \\
\vdots &        & \vdots &        &\vdots  \\
c_{i1} & \cdots & c_{ij} & \cdots &  c_{ip} \\
\vdots &        & \vdots &        & \vdots  \\
c_{m1} & \cdots & c_{mj} & \cdots &  c_{mp} 
\CodeAfter
\tikz \draw (3-3-large.south west) rectangle (3-3-large.north east);
\end{pNiceArray}$
\end{frame}

\end{document}

Salida del código anterior

información relacionada