矩阵中的正方形

矩阵中的正方形

我想写一个矩阵方程,其中矩阵在对角线上包含大小相同的彩色块。例如: 在此处输入图片描述

有人知道该怎么做吗?

答案1

以下示例根据行数自动计算对角线框的矩阵内容。表格的环境有点棘手,因为每个单元格都放在一个组中。因此,该示例首先在全局宏中收集矩阵的内容,\DiagonalMatrixLines并在矩阵环境中使用此宏。\foreach包的宏pgffor用于循环。(还有许多其他可能性。)

正方形由行的高度和深度决定。矩阵环境基于array插入特殊支柱\@arstrut来设置行的最小高度和深度的环境。环境添加的额外空白通过设置为零来array删除。\arraycolsep

\vdots占用一行多一点,但似乎对角线框的矩阵不应该包含一行\vdots。因此是一个高度小四个块、高度大五个块的矩阵。下一个示例使用左矩阵的内部部分来获取矩阵的高度,并使用此高度调整对角线块矩阵的大小。矩阵的垂直中间位于数学轴上。因此,我们必须在调整大小之前将矩阵的中间移动到基线。

\documentclass{article}
\usepackage{xcolor}
\usepackage{amsmath}
\usepackage{pgf,pgffor,graphicx}

\makeatletter
\newcommand*{\DiagonalMatrixBlock}{%
  \begingroup
    \setlength{\fboxsep}{0pt}%
    \colorbox{red}{%
     \@arstrut
     \kern\dp\@arstrutbox
     \kern\ht\@arstrutbox
    }%
  \endgroup
}

\newcommand*{\@DiagonalMatrix}[1]{%
  \begingroup
    \setlength{\arraycolsep}{0pt}%
    \global\let\DiagonalMatrixLines\@empty
    \foreach[count=\xi] \x in {1,...,#1} {%
      \ifnum\xi>1 %
        \g@addto@macro\DiagonalMatrixLines{\\}%
      \fi
      \foreach \x in {1,...,\xi} {
        \g@addto@macro\DiagonalMatrixLines{&}%
      }%
      \g@addto@macro\DiagonalMatrixLines{\DiagonalMatrixBlock}%
    }%
  \endgroup
}

\newcommand*{\DiagonalMatrix}[1]{%
  \begingroup
    \setlength{\arraycolsep}{0pt}%
    \@DiagonalMatrix{#1}%
    \begin{pmatrix}\DiagonalMatrixLines\end{pmatrix}%
  \endgroup
}
\newcommand*{\ScaledDiagonalMatrix}[2]{%
  \begingroup
    \sbox0{$\begin{matrix}#2\end{matrix}$}%
    \sbox2{$\vcenter{}$}
    \setlength{\arraycolsep}{0pt}%
    \@DiagonalMatrix{#1}%
    \left(%
      \raisebox{\ht2}{%
        \resizebox{!}{\dimexpr\ht0-\ht2\relax}{%
          \raisebox{-\ht2}{%
            $\begin{matrix}\DiagonalMatrixLines\end{matrix}$%
          }%
        }%
      }%
    \right)%
  \endgroup
}
\makeatother

\begin{document}
\[
  \begin{pmatrix}
    b_1 \\ b_2 \\ \vdots \\ b_n
  \end{pmatrix}
  =
  \DiagonalMatrix{5}
  \begin{pmatrix}
    a_1 \\ a_2 \\ \vdots \\ a_n
  \end{pmatrix}
\]
\[
  \newcommand*{\MatrixB}{b_1 \\ b_2 \\ \vdots \\ b_n}
  \begin{pmatrix}\MatrixB\end{pmatrix}
  =
  \ScaledDiagonalMatrix{8}{\MatrixB}
  \begin{pmatrix}
    a_1 \\ a_2 \\ \vdots \\ a_n
  \end{pmatrix}
\]
\end{document}

结果

答案2

可能有很多方法可以做到这一点,但这是一种使用包colorbox的简单方法color

\documentclass{article}
\usepackage{xcolor}
\begin{document}
\[\left(\begin{array}{c}b_1\\b_2\\\vdots\\b_n\end{array}\right) = 
  \left(\begin{array}{cccc}
          \colorbox{red}{\,}\\    
          &\colorbox{red}{\,}\\    
          &&\ddots\\
          &&&\colorbox{red}{\,}
  \end{array}\right)
  \left(\begin{array}{c}a_1\\a_2\\\vdots\\a_n\end{array}\right)\]
\end{document}

在此处输入图片描述

答案3

另一种方法是使用pmatrix来自amsmath矩阵和\cellcolor(从table选项到xcolor)来为单元格着色:

\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{amsmath}

\begin{document}
\[
\begin{pmatrix}
  b_1\\b_2\\\vdots\\b_n
\end{pmatrix} = 
\begin{pmatrix}
  & \cellcolor{red} \\    
  &&\cellcolor{red}\\    
  &&&\ddots\\
  &&&&\cellcolor{red} &
\end{pmatrix}
\begin{pmatrix}
  a_1\\a_2\\\vdots\\a_n
\end{pmatrix}
\]

\end{document}

在此处输入图片描述

答案4

与。{pNiceMatrix}nicematrix

\documentclass{article}
\usepackage{nicematrix}

\begin{document}


$\begin{pNiceMatrix}[nullify-dots]
b_1    \\
b_2    \\
\Vdots \\
       \\
b_n 
\end{pNiceMatrix}
=
\begin{pNiceMatrix}[columns-width=1.8mm,margin]
\CodeBefore
  \cellcolor{red}{1-1,2-2,3-3,4-4,5-5}
\Body
&&&& \\
\\
\\
\\
\\
\end{pNiceMatrix}
\begin{pNiceMatrix}
a_1 \\
a_2 \\
\Vdots \\
\\
a_n 
\end{pNiceMatrix}$

\end{document}

您需要多次编译(因为nicematrix在后台使用 PGF/Tikz 节点)。

上述代码的输出

相关内容