2

how can I create the following matrix with the array environment? I don't have an idea

enter image description here

What I have got is this

$$
\left[
\begin{array}{c|c|c|c}
  \Pf_{AA}   & \Pf_{AB}    & \mathbf{0} & \Pf_{A\{\omega\}} \\
  \hline
  \mathbf{0} & \Pf_{BB}    & \Pf_{BA}   & \Pf_{B\{\omega\}} \\
  \hline  
  \mathbf{0} & \mathbf{0}  & \I         & \mathbf{0} \\
  \hline
  \mathbf{0} & \mathbf{0}  & \mathbf{0} & 1
\end{array}
\right]
$$

But now I want to label the rows and colums

2
  • 2
    What is the command \Pf?
    – Bernard
    Commented Dec 20, 2018 at 13:25
  • I have defined \Pf as \mathbf{P}. But this is not so important. I want only to know how to create the above matrix
    – wayne
    Commented Dec 20, 2018 at 14:04

3 Answers 3

6

A solution with bigdelim and arydshln:

\documentclass{book}
\usepackage{array, bigdelim}
\newcommand{\Pf}{\mathbf{P}}
\newcommand{\If}{\mathbf{I}}
\usepackage{arydshln} 

\begin{document}

\[ \setlength{\extrarowheight}{3pt}
  \begin{array}{@{}cc@{}*{3}{c:}c@{}c}
 & & \multicolumn{1}{c}{A} & \multicolumn{1}{c}{B} &\multicolumn{1}{c}{ C} & \multicolumn{1}{c}{\{\omega\}} \\
 A & \ldelim[{4.5}{0.8em} &\Pf_{AA} & \Pf_{AB} & \mathbf{0} & \Pf_{A\{\omega\}} & \rdelim]{4.5}{1em}\\[0.5ex]
 \cdashline{3-6}
B & & \mathbf{0} & \Pf_{BB} & \Pf_{BA} & \Pf_{B\{\omega\}} \\[0.8ex]
 \cdashline{3-6}
C & & \mathbf{0} & \mathbf{0} & & \mathbf{0} \\[0.5ex]
 \cdashline{3-6}
\{\omega\} & & \mathbf{0} & \mathbf{0} & \mathbf{0} & 1 
\end{array}
\]

\end{document} 

enter image description here

1
  • you are the best!
    – wayne
    Commented Dec 20, 2018 at 15:22
5

You can also add the first row/column using a new command without interfering with the rest of the array.

\documentclass{article}
\usepackage{arydshln}    
\begin{document}

\newcommand{\Pf}{\mathbf{P}}
\newcommand{\UP}[2]{\makebox[0pt]{\smash{\raisebox{1.5em}{$\phantom{#2}#1$}}}#2}
\newcommand{\LF}[1]{\makebox[0pt]{$#1$\hspace{4.5em}}}

\[\renewcommand{\arraystretch}{1.3}
\left[
\begin{array}{c@{}c:c:c:c}
  \LF{A}          & \UP{A}{\Pf_{AA}} & \UP{B}{\Pf_{AB}} & \UP{C}{\mathbf{0}} & \UP{\{\omega\}}{\Pf_{A\{\omega\}}} \\ \hdashline
  \LF{B}          & \mathbf{0}       & \Pf_{BB}         & \Pf_{BA}           & \Pf_{B\{\omega\}}                  \\ \hdashline
  \LF{C}          & \mathbf{0}       & \mathbf{0}       & \mathbf{I}         & \mathbf{0}                         \\ \hdashline
  \LF{\{\omega\}} & \mathbf{0}       & \mathbf{0}       & \mathbf{0}         & 1                                  \\
\end{array}\right]
\]

\end{document}

enter image description here

1
  • 1
    Very good answer!
    – wayne
    Commented Dec 20, 2018 at 16:42
3

With {bNiceArray} of nicematrix (≥ 6.6 of 2022-02-16).

\documentclass{book}
\usepackage{nicematrix,tikz}
\newcommand{\Pf}{\mathbf{P}}
\newcommand{\If}{\mathbf{I}}

\begin{document}

\[ \setlength{\extrarowheight}{3pt}
\NiceMatrixOptions
  {
    custom-line = 
     {
       command = hdashedline, 
       letter = I , 
       tikz = dashed ,
       width = \pgflinewidth
     }
  }
\begin{bNiceArray}{cIcIcIc}[first-col,first-row,left-margin,right-margin=3pt]
           & A          & B          & C          & \{\omega\} \\
A          & \Pf_{AA}   & \Pf_{AB}    & \mathbf{0} & \Pf_{A\{\omega\}} \\
\hdashedline
B          & \mathbf{0} & \Pf_{BB}    & \Pf_{BA}   & \Pf_{B\{\omega\}} \\
\hdashedline
C          & \mathbf{0} & \mathbf{0} &            & \mathbf{0} \\
\hdashedline
\{\omega\} & \mathbf{0} & \mathbf{0} & \mathbf{0} & 1 
\end{bNiceArray}
\]

\end{document}

You need several compilations (because nicematrix uses PGF/Tikz nodes under the hood).

Output of the above code

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .