创建转移概率矩阵

创建转移概率矩阵

我想创建一个转移概率矩阵,就像我在使用的教科书中找到的那样,随机建模简介 作者:Mark A. Pinsky 和 ​​Samuel Karlin。

双条形比仅使用 更紧密||。此外,索引列和条形之间的间距以及条形和矩阵条目之间的间距都很窄。至少,我希望实现这两个结果。

此外,我希望能够创建一个与 Ex1 完全相同的矩阵:

  1. 顶部索引与矩阵条目右对齐。
  2. 双垂直条比常规条稍微粗一些(尽管这可能只是字体)。
  3. 双垂直杆的长度刚好足以到达顶部入口和底部入口,不会更长。

如果我也能取得这些成果,那将不胜感激!

这是我目前所拥有的。我使用了blkarray包。间距太大(黑色),条形图相距太远(红色)。谢谢您的帮助! 我的结果

\mathbf{P} = 
        \begin{blockarray}{cccc}
         & 0   & 1   & 2 \\
        \begin{block}{r||rrr||}
        0 & 0.7 & 0.2 & 0.1 \\
        1 & 0.3 & 0.5 & 0.2 \\
        2 & 0   & 0   & 0   \\
        \end{block}
    \end{blockarray}

答案1

您可以使用@{}规范。或者查看限制垂直线大小的替代方法。

\documentclass{article}
\usepackage{amsmath,blkarray}
\begin{document}
\[
\mathbf{P} = 
        \begin{blockarray}{c@{\hspace{1pt}}rrr@{\hspace{3pt}}}
         & 0   & 1   & 2 \\
        \begin{block}{r@{\hspace{1pt}}|@{\hspace{1pt}}
    |@{\hspace{1pt}}rrr@{\hspace{1pt}}|@{\hspace{1pt}}|}
        0 & 0.7 & 0.2 & 0.1 \\
        1 & 0.3 & 0.5 & 0.2 \\
        2 & 0   & 0   & 0   \\
        \end{block}
    \end{blockarray}
\]
\end{document}

在此处输入图片描述


替代方案:

这使用了我的tabstackenginescalerel包来实现 OP 限制垂直行高的目标。我不得不打补丁\Centerstack来省略自动\strut插入。

\documentclass{article}
\usepackage{scalerel,tabstackengine,xpatch}
\setstacktabbedgap{1em}
\xpatchcmd\Centerstack{\strutlongstacks{T}}{}{}{}
\begin{document}
\[
\def\stackalignment{r}
\mathbf{P} = 
       \Centerstack{
        0  \\
        1  \\
        2    
        }\!
        \stackon{
        \stretchleftright{|\!|}{\tabbedCenterstack{
         0.7 & 0.2 & 0.1 \\
        0.3 & 0.5 & 0.2 \\
         0   & 0   & 0   
        }}{|\!|}}{\tabbedCenterstack{
        \protect\phantom{0.}0 & \protect\phantom{0.}1 & \protect\phantom{0.}2}
        \kern1pt}
\]
\end{document}

在此处输入图片描述

答案2

您可以使用{NiceArray}of来实现这一点nicematrix。该环境类似于标准环境{array}(包的array),但会在单元格、行和列下创建 PGF/Tikz 节点。在构建数组后,您可以使用它们在 Tikz 中绘制您想要的任何规则。

\documentclass{article}
\usepackage{nicematrix,tikz}
\usepackage{amsfonts}


\begin{document}

$\mathbf{P} = 
\begin{NiceArray}{c@{\hspace{1ex}}ccc}[baseline=3]
  & 0   & 1   & 2 \\
0 & 0.7 & 0.2 & 0.1 \\
1 & 0.3 & 0.5 & 0.2 \\
2 & 0   & 0   & 0   \\
\CodeAfter
  \tikz \draw [double] ([xshift=-0.5ex]2-|2) -- ([xshift=-0.5ex,yshift=0.5ex]last-|2) ;
  \tikz \draw [double] ([xshift=0.5ex]2-|5) -- ([xshift=0.5ex,yshift=0.5ex]last-|5) ;
\end{NiceArray}$

\end{document}

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

上述代码的输出

相关内容