3

Consider the following matrix

\begin{equation}
\begin{pmatrix}
     B_{0,0} & B_{0,1} \\
     B_{1,0} & B_{1,1} 
\end{pmatrix}
\end{equation}

The next matrix in the iteration is going to replace B_{i,j} with the following matrix

\begin{equation}
\begin{pmatrix}
     B_{i0,j0} & B_{i0,j1} \\
     B_{i1,j0} & B_{i1,j1} 
\end{pmatrix}
\end{equation}

for i and j = 0 , 1, to get a 4 x 4 matrix. Is there an easy way (with for loops) to write this down? We can continue with this construction (see my comments below) to get a 8 x 8 matrix and so on.

  • 1
    what should the result should look like ? – percusse Apr 27 '16 at 14:44
  • 1
  • @StevenB.Segletes, yes, it is related, but I am hoping for something simpler since there is no image involved. Somehow this should be more basic since it only involves latex symbols. – passerby51 Apr 27 '16 at 14:49
  • @percusse, it should be a 16x16 matrix with entries that look like B_{ir,js} as i,j,r,s range over 0 and 1. – passerby51 Apr 27 '16 at 14:49
  • Where is the recursion then? – percusse Apr 27 '16 at 15:05
3

Not really recursive. But, hey, it works!

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{\recursematrix}{O{B}m}
 {% #1 is the (optional) symbol for the coefficient, #2 is the step
  \begin{pmatrix}
  \passerby_recursematrix:nn { #1 } { #2 }
  \end{pmatrix}
 }

\tl_new:N \l_passerby_recursebody_tl

\cs_new_protected:Nn \passerby_recursematrix:nn
 {
  \int_step_inline:nnnn { 0 } { 1 } { \fp_to_int:n { 2**#2 } - 1}
   {
    \int_step_inline:nnnn { 0 } { 1 } { \fp_to_int:n { 2**#2 } -1 }
     {
      \tl_put_right:Nx \l_passerby_recursebody_tl
       {
        \exp_not:n { #1 }
        \sb
         {
          \passerby_padded_binary:nn { #2 } { ##1 },
          \passerby_padded_binary:nn { #2 } { ####1 }
         }
        &
       }
     }
    \tl_put_right:Nn \l_passerby_recursebody_tl { \hspace{-2\arraycolsep} \\ }
   }
   \tl_use:N \l_passerby_recursebody_tl
 }

\cs_new_protected:Nn \passerby_padded_binary:nn
 {
  \int_compare:nTF { #2 = 0 }
   {
    \prg_replicate:nn { #1 } { 0 }
   }
   {
    \prg_replicate:nn { #1 - 1 - \fp_to_int:n { floor( ln(#2)/ln(2) ) } } { 0 }
    \int_to_bin:n { #2 }
   }
 }

\ExplSyntaxOff

\begin{document}

\[
\recursematrix{1}
\]
\[
\recursematrix{2}
\]
\[
\recursematrix{3}
\]

\end{document}

enter image description here

This is the output of \recursematrix[X]{4} to illustrate the optional argument. It requires also

\setcounter{MaxMatrixCols}{17}

enter image description here

3

I think the first two matrices are what the OP asked for.

I believe I have got the 3rd level, as well. The key is in realizing that the indices are basically in binary (base 2) notation.

EDIT, To keep up with egreg, I also did 4th level.

\documentclass[landscape]{article}
\usepackage[margin=1cm]{geometry}
\usepackage{amsmath}
\newcommand\Amatrix[2]{%
  \begin{matrix}
     B_{{#1}0,{#2}0} & B_{{#1}0,{#2}1} \\ B_{{#1}1,{#2}0} & B_{{#1}1,{#2}1} 
  \end{matrix}
}
\makeatletter
\newcommand\makeAnmatrix[1]{%
  \expandafter\newcommand\csname #1matrix\endcsname[2]{%
    \begin{matrix}
      \csname\@gobble#1matrix\endcsname{{##1}0}{{##2}0} &  
      \csname\@gobble#1matrix\endcsname{{##1}0}{{##2}1}\\
      \csname\@gobble#1matrix\endcsname{{##1}1}{{##2}0} &
      \csname\@gobble#1matrix\endcsname{{##1}1}{{##2}1}
    \end{matrix}
  }%
}
\makeatother
\makeAnmatrix{AA} % ALLOWS TO DEPTH 2
\makeAnmatrix{AAA} % ALLOWS TO DEPTH 3
\makeAnmatrix{AAAA} % ALLOWS TO DEPTH 4
\begin{document}
\begin{equation*}\begin{pmatrix}\Amatrix{}{}\end{pmatrix}\end{equation*}
\begin{equation*}\begin{pmatrix}\AAmatrix{}{}\end{pmatrix}\end{equation*}
\begin{equation*}\begin{pmatrix}\AAAmatrix{}{}\end{pmatrix}\end{equation*}
\tiny
\begin{equation*}\begin{pmatrix}\AAAAmatrix{}{}\end{pmatrix}\end{equation*}
\end{document}

enter image description here

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.