\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[english,spanish]{babel}
\decimalpoint
\unaccentedoperators
\usepackage[bookmarks=false,colorlinks = true,linkcolor = blue,urlcolor  = blue,citecolor = blue,anchorcolor = blue]{hyperref}

\usepackage[intlimits]{amsmath}
\usepackage{amsfonts,amssymb,amsthm,extarrows}
\usepackage[width=16cm,height=21cm]{geometry}
\usepackage{graphicx}
\usepackage{tikz}
\usepackage{ifthen}
\usepackage{enumerate}
\usepackage{colortbl}

\theoremstyle{definition}
\newtheorem{example}{Ejemplo}
\newtheorem{defn}{Definición}
\newtheorem{algorithm}{Algoritmo}
\newtheorem{test}{Prueba}

\newcommand{\medstrut}{\ensuremath{\vphantom{\int_{0_0}^{1^1}}}}
\newcommand{\bigstrut}{\ensuremath{\vphantom{\displaystyle\int}}}

\newcommand{\IntegerNumbers}{{\mathbb{Z}}}
\newcommand{\RationalNumbers}{{\mathbb{Q}}}
\newcommand{\RealNumbers}{{\mathbb{R}}}
\newcommand{\ComplexNumbers}{{\mathbb{C}}}

\newcommand{\nullvector}{\boldsymbol{0}}
\renewcommand{\Re}{\mathop{\mathrm{Re}}\nolimits}
\renewcommand{\Im}{\mathop{\mathrm{Im}}\nolimits}
\renewcommand{\phi}{\varphi}
\newcommand{\eps}{\varepsilon}

\DeclareMathOperator{\diag}{diag}
\DeclareMathOperator{\tr}{tr}
\DeclareMathOperator{\rank}{r}
\DeclareMathOperator{\imagunit}{i}
\DeclareMathOperator{\enumber}{e}
\newcommand{\matr}[2]{\left[\begin{array}{#1}#2\end{array}\right]}
\newcommand{\Matrices}[3]{\mathcal{M}_{#2\times #3}(#1)}
\newcommand{\SquareRealMatrices}[1]{\mathcal{M}_{#1}(\RealNumbers)}
\newcommand{\markedcell}{\cellcolor[rgb]{0.7,1.0,0.7}}

\begin{document}
\begin{center}
\bfseries\large Matrices de simétricas de banda
\end{center}

Estos apuntes están escritos por Eduardo Camps Moreno, ???, ???, con ayuda de Egor Maximenko.

\tableofcontents

\bigskip\bigskip
Una matriz cuadrada simétrica $A$ se llama \emph{matriz de banda} de ancho $2w-1$,
si para cualesquiera $j,k\in\{1,\ldots,n\}$, si $|j-k|\ge w$, entonces $A_{j,k}=0$.
Por ejemplo, si $n=7$ y $w=3$, entonces la matriz es de la siguiente forma:
\[
\matr{ccccccc}{
A_{1,1} & A_{2,1} & A_{3,1} & 0 & 0 & 0 & 0 \\
A_{2,1} & A_{2,2} & A_{2,3} & A_{?,?} & 0 & 0 & 0 \\
A_{3,1} & A_{3,2} & A_{3,3} & A_{?,?} & A_{?,?} & 0 & 0 \\
? & ? & ? & ? & ? & ? & ? \\
? & ? & ? & ? & ? & ? & ? \\
? & ? & ? & ? & ? & ? & ? \\
? & ? & ? & ? & ? & ? & ?
}.
\]
Vamos a guardar las entradas diagonales en un arreglo de tamaño $w \times n$.
Por ejemplo, a la matriz
\[
B=
\matr{ccccccc}{
B_{1,1} & B_{1,2} & B_{1,3} & B_{1,4} & B_{1,5} & B_{1,6} & B_{1,7} \\
B_{2,1} & B_{2,2} & B_{2,3} & B_{2,4} & B_{2,5} & B_{2,6} & 0 \\
B_{3,1} & B_{3,2} & B_{3,3} & B_{3,4} & B_{3,5} & 0 & 0
}
\]
le corresponde la matriz completa
\begin{equation}\label{eq:BtoA}
A=\matr{ccccccc}{
B_{1,1} & B_{2,1} & B_{3,1} & 0 & 0 & 0 & 0 \\
B_{2,1} & B_{1,2} & B_{2,2} & B_{3,2} & 0 & 0 & \\
B_{3,1} & B_{2,2} & B_{1,3} & B_{2,3} & B_{3,3} & 0 & 0 \\
0 & B_{3,2} & B_{2,3} & B_{1,4} & B_{2,4} & B_{3,4} & 0 \\
? & ? & ? & ? & ? & ? & ? \\
? & ? & ? & ? & ? & ? & ? \\
? & ? & ? & ? & ? & ? & ? \\
? & ? & ? & ? & ? & ? & ? \\
}.
\end{equation}

\clearpage
\section{Generación de una matriz simétrica de banda en la forma completa}

\noindent
Primero vamos a hacerlo trabajando por entradas.
Este algoritmo no es eficiente en el lenguaje de MATLAB,
pero se traduce fácilmente a lenguajes de tipo C, Fortran, Java, etc.,
que no tienen operaciones para trabajar con renglones y columnas.

\begin{algorithm}[generación de una matriz simétrica de banda en la forma completa, trabajando por entradas]
Dada una matriz $B\in\Matrices{\RealNumbers}{w}{n}$,
la la siguiente función construye la matriz $A$,
como en la fórmula \eqref{eq:BtoA}.
\begin{verbatim}
function A = SymmetricBandToComplete(B),
  [w, n] = size(B);
  A = zeros(n);
  for j = 1 : n,
    for k = 1 : n,
      result(j, k) = ???;
    endfor
  endfor
endfunction
\end{verbatim}
\end{algorithm}

\begin{test}
Por ejemplo, si
\[
B =
\matr{rrrrrr}{
4 & -7 & 6 & 5 & 2 & -1 \\
5 & 1 & 3 & 0 & -2 & 4
},
\]
entonces
\[
A = \matr{rrrrrr}{
? & ? & ? & ? & ? & ? \\
? & ? & ? & ? & ? & ? \\
? & ? & ? & ? & ? & ? \\
? & ? & ? & ? & ? & ? \\
? & ? & ? & ? & ? & ? \\
? & ? & ? & ? & ? & ?
}.
\]
\end{test}

Luego hay que escribir una versión más eficiente de este algoritmo,
usando posibilidades del lenguaje de MATLAB.

\clearpage
\section{Multiplicación de una matriz simétrica de banda por un vector}

\begin{algorithm}{multiplicación de una matriz simétrica de banda por un vector}
Dada una matriz $B\in\Matrices{\RealNumbers}{w}{n}$ y un vector $x\in\RealNumbers^n$,
la siguiente función calcula el producto $Ax$,
donde $A$ es la matriz completa corresponde a la matriz $B$.
La matriz $A$ no se construye en la forma completa.
\begin{verbatim}
function y = MulSymmBandByVector(B, x),
  [w, n] = size(B);
  y = zeros(n);
  for j = 1 : w,
    for k = 1 : n,
      ???
    endfor
  endfor
endfunction
\end{verbatim}
\end{algorithm}

\end{document}
