tikz 中的行减少和列收集

tikz 中的行减少和列收集

我想用 tikz 制作一个像这样的图表 在此处输入图片描述

我希望它有两行。第一行是矩阵行缩减,第二行是将第一行中的行缩减矩阵的一些列聚集起来并有箭头连接(例如,第一行中第一个矩阵的第一列连接到第二行中 L 的第一列(我假设这需要 tikz)。我想知道这是否可以在 latex 中实现。如果不行,我可能只会扫描这个方程式。

示例代码如下:

  \[
      \begin{pmatrix}
          2 & 4 & -1 & 5 & -2 \\
          -4 & -5 & 3 & 8 & 1 \\
          2 & -5 & -4 & 1 & 8 \\
          -6 & 0 & 7 & -3 & 1
      \end{pmatrix}
      \sim
      \begin{pmatrix}
          2 & 4 &   &  \\
           & 3 &  &  \\
           & -9 &  &  \\
           & 12 &  &
      \end{pmatrix}
      \sim
      \begin{pmatrix}
          2 & 4 &  -1 & 5 & 2  \\
            & 3 & 1 & 2 & -3 \\
            & &  & 2 & 1 \\
           &  &  & 4 & 7
      \end{pmatrix}
      \sim
      \begin{pmatrix}
          2 & 4 &  -1 & 5 & 2  \\
            & 3 & 1 & 2 & -3 \\
            & &  & 2 & 1 \\
           &  &  &  & 5
      \end{pmatrix}
      = U
  \]
  %%%% how to add arrows between the two rows?
  \[
  L = \begin{pmatrix}
      1 & 0 & 0 & 0 \\
      -2 & 1 & 0 & 0 \\
      1 & -3 & 1 & 0 \\
      3 & 4 & 2 & 1 \\
  \end{pmatrix}
  \]

谢谢。

答案1

nicematrix以下是使用和 的可能性tikzmark。请注意,必须编译 3 次。

在此处输入图片描述

\documentclass{article}

\usepackage{amsmath, nicematrix, tikz}
\usetikzlibrary{tikzmark}

\begin{document}
  \[
      \begin{pNiceMatrix}[left-margin=.5em]
          \Block[tikz={draw, thick, dashed, red}]{4-1}{}2 & 4 & -1 & 5 & -2 \\
          -4 & -5 & 3 & 8 & 1 \\
          2 & -5 & -4 & 1 & 8 \\
          \tikzmarknode{a1}{-6} & 0 & 7 & -3 & 1
      \end{pNiceMatrix}
      \sim
      \begin{pNiceMatrix}
          2 & 4 &   &  \\
           & \Block[tikz={draw, thick, dashed, red}]{3-1}{}3 &  &  \\
           & -9 &  &  \\
           & \tikzmarknode{a2}{12} &  &
      \end{pNiceMatrix}
      \sim
      \begin{pNiceMatrix}
          2 & 4 &  -1 & 5 & 2  \\
            & 3 & 1 & 2 & -3 \\
            & &  & \Block[tikz={draw, thick, dashed, red}]{2-1}{}2 & 1 \\
           &  &  & \tikzmarknode{a3}{4} & 7
      \end{pNiceMatrix}
      \sim
      \begin{pNiceMatrix}[right-margin=.5em]
          2 & 4 &  -1 & 5 & 2  \\
            & 3 & 1 & 2 & -3 \\
            & &  & 2 & 1 \\
           &  &  &  & \Block[tikz={draw, thick, dashed,red}]{1-1}{}\tikzmarknode{a4}{5}
      \end{pNiceMatrix}
      = U
  \]
\vspace{1cm}
  \[
    L = \begin{pNiceMatrix}
      \tikzmarknode{b1}{1} & \tikzmarknode{b2}{0} & \tikzmarknode{b3}{0} & \tikzmarknode{b4}{0} \\
      -2 & 1 & 0 & 0 \\
      1 & -3 & 1 & 0 \\
      3 & 4 & 2 & 1 \\
    \end{pNiceMatrix}
  \]
\begin{tikzpicture}[remember picture, overlay]
  \draw[red, ->, shorten <=1.5mm, shorten >=1mm](a1) to[out=south, in=north] (b1);
  \draw[red, ->, shorten <=1.5mm, shorten >=1mm](a2) to[out=south, in=north] (b2);
  \draw[red, ->, shorten <=1.5mm, shorten >=1mm](a3.west) to[out=west, in=north] (b3);
  \draw[red, ->, shorten <=1.5mm, shorten >=1mm](a4) to[out=south, in=north] (b4);
  \end{tikzpicture}
  
\end{document}

答案2

这个解决方案只是 Sandy G 的(非常好的)解决方案的一个微小变化。它展示了如何使用nicematrix(没有tikzmark)创建的节点来获得相同的输出。

\documentclass{article}

\usepackage{nicematrix, tikz}

\begin{document}
  \[
      \begin{pNiceMatrix}[left-margin=.5em,name=A1]
          \Block[tikz={draw, thick, dashed, red}]{4-1}{}2 & 4 & -1 & 5 & -2 \\
          -4 & -5 & 3  & 8  & 1 \\
          2  & -5 & -4 & 1  & 8 \\
          -6 & 0  & 7  & -3 & 1
      \end{pNiceMatrix}
      \sim
      \begin{pNiceMatrix}[name=A2]
          2 & 4 &   &  \\
           & \Block[tikz={draw, thick, dashed, red}]{3-1}{}3 &  &  \\
           & -9 &  &  \\
           & 12 &  &
      \end{pNiceMatrix}
      \sim
      \begin{pNiceMatrix}[name=A3]
          2 & 4 &  -1 & 5 & 2  \\
            & 3 & 1 & 2 & -3 \\
            & &  & \Block[tikz={draw, thick, dashed, red}]{2-1}{} 2 & 1 \\
           &  &  & 4 & 7
      \end{pNiceMatrix}
      \sim
      \begin{pNiceMatrix}[right-margin=.5em,name=A4]
          2 & 4 &  -1 & 5 & 2  \\
            & 3 & 1 & 2 & -3 \\
            & &  & 2 & 1 \\
           &  &  &  & \Block[tikz={draw, thick, dashed,red}]{1-1}{} 5
      \end{pNiceMatrix}
      = U
  \]
\vspace{1cm}
  \[
    L = \begin{pNiceMatrix}[name=B]
      1 & 0 & 0 & 0 \\
      -2 & 1 & 0 & 0 \\
      1 & -3 & 1 & 0 \\
      3 & 4 & 2 & 1 \\
    \end{pNiceMatrix}
  \]
\begin{tikzpicture}[remember picture, overlay]
  \draw[red, ->, shorten <=1.5mm, shorten >=1mm](A1-4-1) to[out=south, in=north] (B-1-1);
  \draw[red, ->, shorten <=1.5mm, shorten >=1mm](A2-4-2) to[out=south, in=north] (B-1-2);
  \draw[red, ->, shorten <=1.5mm, shorten >=1mm](A3-4-4.west) to[out=west, in=north] (B-1-3);
  \draw[red, ->, shorten <=1.5mm, shorten >=1mm](A4-4-5) to[out=south, in=north] (B-1-4);
  \end{tikzpicture}
  
\end{document}

与往常一样nicematrix,您需要进行多次编译。

上述代码的输出

答案3

我猜你正在寻找这样的东西:

在此处输入图片描述

\documentclass{article}
%---------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%
\usepackage{lipsum}
\usepackage{mathtools}
\usepackage{tikz}
\usetikzlibrary{tikzmark}

\begin{document}
\lipsum[66]
\begin{gather*}
 \begin{multlined}
\begin{pmatrix}
   2 &  4 & -1 &  5 & -2 \\
  -4 & -5 &  3 &  8 &  1 \\
   2 & -5 & -4 &  1 &  8 \\
  -6 &  0 &  7 & -3 &  1
\end{pmatrix}
      \sim
\begin{pmatrix}
  2 &  4 &  \\
    &  3 &  \\
    & -9 &  \\
    & 12 & 
\end{pmatrix}       \\  % <---
      \sim
\begin{pmatrix}
2   & 4 & -1 & 5 &  2   \\
    & 3 &  1 & 2 & -3   \\
    &   &    & 2 &  1   \\
    &   &    & 4 &  7
\end{pmatrix}
      \sim
\begin{pmatrix}
2   & 4 & -1 & 5 &  2   \\
    & 3 &  1 & 2 & -3   \\
    &   &    & 2 &  1   \\
    &   &    &   &  5
\end{pmatrix} = U
\end{multlined}     \\  % <---
%
L = \begin{pmatrix}
       1 &  0 & 0 & 0 \\
      -2 &  1 & 0 & 0 \\
       1 & -3 & 1 & 0 \\
       3 &  4 & 2 & 1 \\
    \end{pmatrix}
\end{gather*}
\end{document}

有关使用 LaTeX 编写数学公式的更多信息,请参阅维基百科,基础数学,特别维基百科,高等数学以及其他介绍性文字。

编辑:

  • 您(到目前为止)没有提供所需箭头的起点和终点信息。
  • 因此,以下只是猜测你想要什么
  • 如果我的猜测是错误的,至少给出了一个原理,如何使用包tikzmark库在方程元素之间画箭头tikz
\documentclass{article}
\usepackage{lipsum}
\usepackage{mathtools}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
                fit,
                tikzmark}   % <---
\tikzset{FIT/.style = {fit=#1, node contents={},
                       draw=red, rounded corners, thick, 
                       inner sep=1pt}              
        }
\begin{document}
\lipsum[66]
\begin{gather*}
 \begin{multlined}
\begin{pmatrix}
\tikzmarknode{a}{2}
    &  4 & -1 &  5 & -2 \\
-4  & -5 &  3 &  8 &  1 \\
 2  & -5 & -4 &  1 &  8 \\
\tikzmarknode{b}{-6}  
    &  0 &  7 & -3 &  1
\end{pmatrix}
      \sim
\begin{pmatrix}
  2 &  4 &  \\
    &  3 &  \\
    & -9 &  \\
    & 12 & 
\end{pmatrix}       \\  % <---
      \sim
\begin{pmatrix}
2   & 4 & -1 & 5 &  2   \\
    & 3 &  1 & 2 & -3   \\
    &   &    & 2 &  1   \\
    &   &    & 4 &  7
\end{pmatrix}
      \sim
\begin{pmatrix}
2   & 4 & -1 & 5 &  2   \\
    & 3 &  1 & 2 & -3   \\
    &   &    & 2 &  1   \\
    &   &    &   &  5
\end{pmatrix} = U
\end{multlined}     \\  % <---
%
L = \begin{pmatrix}
       \tikzmarknode{c}{1}    
      ~  &  0 & 0 & 0 \\
       \tikzmarknode{d}{-2}
         &  1 & 0 & 0 \\
       1 & -3 & 1 & 0 \\
       \tikzmarknode{e}{3}
         &  4 & 2 & 1 \\
    \end{pmatrix}
%
    \begin{tikzpicture}[overlay, remember picture]
\node (A)   [FIT=(a) (b)];
\node (B)   [FIT=(c) (d) (e)];
    \draw[red!50,ultra thick, -{Stealth[scale=0.8]}] (A) -- (B);
    \end{tikzpicture}
\end{gather*}
\lipsum[66]
\end{document}

在此处输入图片描述

相关内容