Diagrama de dimensiones de descomposición matricial.

Diagrama de dimensiones de descomposición matricial.

¿Cuál es la forma más sencilla de hacer diagramas que representen dimensiones matriciales como los siguientes?

ingrese la descripción de la imagen aquí

Puedo hacerlo con subíndices simples, pero me gusta el efecto visual que dan estos diagramas.

Respuesta1

Aquí lo hago con pilas, colocando los índices debajo de las casillas. La macro principal es

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

Una macro auxiliar es \raiserows, que es como \raisebox, excepto que la "longitud" se especifica en filas, no en la longitud real. Tenga en cuenta que en el MWE, debido a que Xtiene 7 filas, mientras que P^Tsolo tiene 2 filas, P^Tse debe levantar (7-2)/2 = 2,5 filas.

Introduzco el factor \matscalepara escalar los tamaños de tus cajas. De forma predeterminada, cada fila y columna del tamaño del cuadro ocupará un cuadrado de tamaño \baselineskipen un lado. El factor \matscale(que por defecto es 1) escalará ese valor.

EDITADO para establecer índices de matriz en\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}

ingrese la descripción de la imagen aquí


Sólo para aclarar, por si no quedó claro. Se pueden utilizar dimensiones matriciales reales (muy grandes), siempre que se escale adecuadamente. Por ejemplo, lo siguiente funciona::

$\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}$

Respuesta2

Aquí hay una manera de hacerlo "manualmente".

\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}

Resultado:

Ecuación matricial

¡Obviamente esto no se compara con la poderosa y general respuesta del Sr. Segletes! Sin embargo, utiliza comandos más básicos, lo que podría tener la ventaja de que es más rápido de compilar en una máquina lenta y funcionará incluso con una instalación más pequeña que carece de paquetes. O tal vez simplemente te guste ensuciarte las manos. El inconveniente, por supuesto, es que usted mismo tendrá que determinar todas las anchuras, alturas y profundidades.

Nota: si utiliza mathtoolscualquier otro paquete que proporcione un \clapcomando, entrará en conflicto con la definición. En este caso, simplemente omita esta definición y utilice la \clapproporcionada.

Respuesta3

Esta es una posible solución a través amsmathdel paquete.

ingrese la descripción de la imagen aquí

Código

\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}

información relacionada