Dimensionsdiagramm der Matrixzerlegung

Dimensionsdiagramm der Matrixzerlegung

Wie lassen sich am einfachsten Diagramme erstellen, die Matrixdimensionen wie die folgenden darstellen?

Bildbeschreibung hier eingeben

Ich kann es mit einfachen Indizes machen, aber mir gefällt der visuelle Effekt, den diese Diagramme erzeugen.

Antwort1

Hier mache ich es mit Stapeln, indem ich die Indizes unter den Boxen setze. Das primäre Makro ist

\matbox{rows}{columns}{row index}{column index}{matrix name}.

Ein Hilfsmakro ist \raiserows, das wie ein ist \raisebox, außer dass die „Länge“ in Zeilen und nicht in der tatsächlichen Länge angegeben wird. Beachten Sie, dass im MWE (7-2)/2 = 2,5 Zeilen angehoben werden müssen, da X7 Zeilen hat, während P^Tnur 2 Zeilen vorhanden sind P^T.

Ich stelle den Faktor \matscalezur Skalierung Ihrer Boxgrößen vor. Standardmäßig nimmt jede Zeile und Spalte der Boxgröße ein Quadrat der Größe \baselineskipeiner Seite ein. Der Faktor \matscale(der standardmäßig 1 ist) skaliert diesen Wert.

BEARBEITET, um Array-Indizes festzulegen in\scriptstyle

\documentclass{article}
\usepackage{stackengine}
\stackMath
\newlength\matfield
\newlength\tmplength
\def\matscale{1.}
\newcommand\dimbox[3]{%
  \setlength\matfield{\matscale\baselineskip}%
  \setbox0=\hbox{\vphantom{X}\smash{#3}}%
  \setlength{\tmplength}{#1\matfield-\ht0-\dp0}%
  \fboxrule=1pt\fboxsep=-\fboxrule\relax%
  \fbox{\makebox[#2\matfield]{\addstackgap[.5\tmplength]{\box0}}}%
}
\newcommand\raiserows[2]{%
   \setlength\matfield{\matscale\baselineskip}%
   \raisebox{#1\matfield}{#2}%
}
\newcommand\matbox[5]{
  \stackunder{\dimbox{#1}{#2}{$\mathbf{#5}$}}{\scriptstyle(#3\times #4)}%
}
\parskip 1em
\begin{document}
$\renewcommand\matscale{.6}
\matbox{7}{4}{I}{J}{X} = 
\matbox{7}{2}{I}{R}{T} \raiserows{2.5}{\matbox{2}{4}{R}{J}{P^T}} +
\matbox{7}{4}{I}{J}{E}$
\end{document}

Bildbeschreibung hier eingeben


Nur zur Klarstellung, falls es nicht klar war. Man kann tatsächliche (sehr große) Matrixdimensionen verwenden, solange man angemessen klein skaliert. Beispielsweise funktioniert Folgendes::

$\renewcommand\matscale{.05}
\matbox{300}{75}{I}{J}{X} = 
\matbox{300}{25}{I}{R}{T} \raiserows{137.5}{\matbox{25}{75}{R}{J}{P^T}} +
\matbox{300}{75}{I}{J}{E}$

Antwort2

Hier ist eine Möglichkeit, es „manuell“ zu tun.

\documentclass{article}
\usepackage{amsbsy}
\newcommand*{\clap}[1]{\hbox to 0pt{\hss#1\hss}}
\newcommand*{\mat}[1]{\boldsymbol{\mathrm{#1}}}
\newcommand*{\subdims}[3]{\clap{\raisebox{#1}[0pt][0pt]{$\scriptstyle(#2 \times #3)$}}}
\fboxrule=1pt

\begin{document}
\Huge
\[
\framebox[2.5cm]{\clap{\raisebox{0pt}[1.5cm][1.5cm]{$\mat X$}}\subdims{-2.5cm} I J} =
\framebox[1.5cm]{\clap{\raisebox{0pt}[1.5cm][1.5cm]{$\mat T$}}\subdims{-2.5cm} I R} \ 
\framebox[2.5cm]{\clap{\raisebox{5mm}[1.5cm]{$\mat P^T$}}     \subdims{-1cm} R J} + 
\framebox[2.5cm]{\clap{\raisebox{0pt}[1.5cm][1.5cm]{$\mat E$}}\subdims{-2.5cm} I J}
\]

\end{document}

Ergebnis:

Matrixgleichung

Dies ist natürlich nicht mit der überzeugenden und allgemeinen Antwort von Herrn Segletes zu vergleichen! Es werden jedoch grundlegendere Befehle verwendet, was den Vorteil haben könnte, dass es auf einem langsamen Rechner schneller kompiliert werden kann und sogar mit einer kleineren Installation funktioniert, die nicht über genügend Pakete verfügt. Oder vielleicht machen Sie sich einfach gerne die Hände schmutzig. Der Nachteil ist natürlich, dass Sie alle Breiten, Höhen und Tiefen selbst bestimmen müssen.

Hinweis: Wenn Sie mathtoolsoder ein anderes Paket verwenden, das einen \clapBefehl bereitstellt, steht dieser im Konflikt mit der Definition. Lassen Sie in diesem Fall diese Definition einfach weg und verwenden Sie die \clapbereitgestellte.

Antwort3

Dies ist eine mögliche Lösung per amsmathPaket.

Bildbeschreibung hier eingeben

Code

\documentclass[12pt]{article}
\usepackage[margin=1cm,paper size={20cm,5cm}]{geometry}
\usepackage{amsmath,amssymb}

\thispagestyle{empty}
\begin{document}
\[
{\begin{pmatrix}
  &    & \\
  & X &\\
  &     &
\end{pmatrix}
\mkern-10mu}_{I \times J}=
{\begin{pmatrix}
\phantom{T}\\
\makebox[20pt][c]{$T$}\\
\phantom{T}   
\end{pmatrix}
\mkern-10mu}_{I \times R}
{\begin{pmatrix}
  &    & \\
  & \raisebox{10pt}{$P^T$} &\\
\end{pmatrix}\mkern-10mu}_{R \times J}+
{\begin{pmatrix}
  &    & \\
  & E &\\
  &    &
\end{pmatrix}
\mkern-10mu}_{I \times J}
\]

\end{document}

verwandte Informationen