Ich möchte in tikz folgendes Ergebnis erzielen:
Ich kann die Matrizen jedoch nur ohne die mathematischen Operationen zwischen ihnen zeichnen, also das Skalarprodukt und die Gleichheitszeichen (die gleiche Höhe der Klammern ist ein Plus). Unten füge ich einen Teil meines Codes an und zeige, wie weit ich bisher gekommen bin.
Für jede Hilfe wäre ich sehr dankbar
Danke
\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}
Antwort1
Zunächst würde ich die positioning
Bibliothek verwenden, um die Matrizen nebeneinander zu platzieren. Dann muss ich nicht mehr das richtige herausfinden xshift
. (Sie könnten auch \matrix (m2) at (95pt,0) ...
anstelle von tun scope
.)
Nachdem Sie die Matrizen m
, m2
und benannt haben m3
, können Sie beispielsweise Folgendes tun:
\path (m) -- node {$\cdot$} (m2)
(m2) -- node {$=$} (m3);
um die Symbole in der Mitte dazwischen zu platzieren.
\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}
Nachtrag
Beachten Sie, dass Sie in beamer
nicht direkt eine Matrix verwenden können. Sie benötigen einen fragile
Rahmen oder verwenden ampersand replacement
, siehe zum BeispielFehler „Einzelnes Et-Zeichen mit falschem Catcode verwendet“ bei Verwendung der Tikz-Matrix in Beamer
Unten habe ich den Rahmen erstellt fragile
. Außerdem habe ich einen neuen Stil erstellt pmat
, den ich auf alle Matrizen angewendet habe, und ich habe einige Dinge geändert, damit sie tatsächlich in den Rahmen passen.
\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}
Antwort2
Unter Verwendung der \vphantom{b_{ij}}
Anfänge jeder Zeile mit Variablen in der ersten und letzten Matrix:
\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}
Antwort3
{pNiceMatrix}
Sie können das mit of tun nicematrix
. Diese Umgebung ist ähnlich wie {pmatrix}
of amsmath
, erstellt aber PGF/Tikz-Knoten unter den Zellen des Arrays. Mit diesen Knoten können Sie die Rechtecke ganz einfach mit Tikz zeichnen.
\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}