\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}

\swapnumbers
\newtheorem{thm}{Teorema}
\newtheorem{prop}{Proposición}
\theoremstyle{definition}
\newtheorem{example}[thm]{Ejemplo}
\newtheorem{defn}[thm]{Definición}
\newtheorem{algorithm}[thm]{Algoritmo}

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

\newcommand{\bR}{{\mathbb{R}}}

\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{\greencell}{\cellcolor[rgb]{0.8,1.0,0.8}}
\newcommand{\bluecell}{\cellcolor[rgb]{0.8,0.8,1}}
\newcommand{\conv}{\ast}

\begin{document}
\begin{center}
\bfseries\Large Matrices tridiagonales
\end{center}


{\color{gray}\noindent Este archivo es un ejemplo de solución de la primera tarea de matrices especiales.}

\subsection*{Explicación de la estructura de las matrices tridiagonales}

\medskip\noindent
Sean $a\in\bR^5$, $b,c\in\bR^4$.
Entonces la \emph{matriz tridiagonal} generada por $a,b,c$ es
\[
\matr{ccccc}{
a_1 & b_1 & 0 & 0 & 0 \\[0.5ex]
c_1 & a_2 & b_2 & 0 & 0 \\[0.5ex]
0 & c_2 & a_3 & b_3 & 0 \\[0.5ex]
0 & 0 & c_3 & a_4 & b_4 \\[0.5ex]
0 & 0 & 0 & c_4 & a_5
}.
\]
En general, suponemos que $a\in\bR^n$, $b,c\in\bR^{n-1}$.
Entonces la matriz generada por $a,b,c$ es de tamaño $n\times n$.
Denotemos esta matriz por $T$.
Para cualesquiera $j,k\in\{1,\ldots,n\}$,
la entrada $(j,k)$ de la matriz $A$ es
\[
T_{j,k}=
\begin{cases}
a_j, & j=k; \\[0.5ex]
b_j, & j+1=k; \\[0.5ex]
c_{j-1}, & j=k+1; \\[0.5ex]
0, & \text{en otros casos}.
\end{cases}
\]

{\color{gray}\noindent
Para muchas otras clases interesantes de matrices,
sus entradas no se pueden describir por fórmulas tan simples,
y es suficiente explicar su estructura con uno o dos ejemplos.}

\medskip\noindent
Notamos que la matriz se determina por las entradas de los vectores $a,b,c$,
y el tamaño total de estos datos iniciales es
\[
D(n)=n+2(n-1)=3n-2.
\]
El tamaño de los datos iniciales es pequeño en comparación con $n^2$:
\[
\lim_{n\to\infty}\frac{D(n)}{n^2}=0.
\]


\clearpage
\subsection*{Función que construye matrices tridiagonales\\
a partir de los datos iniciales}

\begin{verbatim}
function [T] = tridiagonal_full(a, b, c),
   n = length(a);
   T = zeros(n);
   for j = 1 : n,
      T(j, j) = a(j);
   end
   for j = 1 : n - 1,
      T(j, j + 1) = b_j;
      T(j + 1, j) = c_j;
   end
end
\end{verbatim}
Podemos generar la misma matriz de manera más eficiente,
usando la función \texttt{diag} del lenguaje MATLAB:
\begin{verbatim}
function [T] = tridiagonal_full_2(a, b, c),
   T = diag(a) + diag(b, 1) + diag(c, -1);
end
\end{verbatim}
Una prueba:
\begin{verbatim}
function [] = test_tridiagonal_full(),
   n = 5;
   a = 2 * rand(n, 1) - ones(n, 1);
   b = 2 * rand(n - 1, 1) - ones(n - 1, 1);
   c = 2 * rand(n - 1, 1) - ones(n - 1, 1);
   T = tridiagonal_full(a, b, c);
   T1 = tridiagonal_full_2(a, b, c);
   display(T);
   display(T1);
end
\end{verbatim}


\clearpage
\subsection*{Matrices tridiagonales positivas definidas}

{\color{gray}\noindent Esta parte es optativa y se puede hacer después.}

\noindent
Luego vamos a resolver sistemas de ecuaciones lineales por el método de gradiente conjugado,
el cual se aplica solamente a matrices simétricas positivas definidas.
Encontremos una condición suficiente para que nuestras matrices sean simétricas y positivas definidas.

\begin{prop} \label{positive}
Sean $a\in\bR^n$, $b,c\in\bR^{n-1}$.
Denotemos por $T$ a la matriz tridiagonal generada por $a,b,c$.
\begin{enumerate}
\item $T$ es simétrica si, y sólo si, $b=c$.
\item Definimos $c_0=b_n=0$ y supongamos que $b=c$ y
\begin{equation}\label{a_greater_b_plus_c}
\forall j\in\{1,\ldots,n\}\qquad a_j>|b_j|+|c_{j-1}|.
\end{equation}
Entonces la matriz $T$ es positiva definida.
\end{enumerate}
\end{prop}

\begin{proof}
La primera afirmación es obvia.
Supongamos que se cumplen las hipótesis del inciso 2.
Para cada $j\in\{1,\ldots,n\}$ denotemos por $R_j$ a la suma de los valores absolutos
de las entradas en el $j$-ésimo renglón de la matriz, fuera de la diagonal principal:
\[
R_j = \sum_{k\in\{1,\ldots,n\}\setminus\{j\}} |T_{j,k}| = |b_j| + |c_{j-1}|.
\]
Por el teorema de Gershgorin, el espectro de la matriz está contenido
en la unión de los discos cerrados con centros $a_j$ y radios $R_j$.
Como la matriz es simétrica, sus valores propios son reales,
y en vez de los discos podemos hablar de los segmentos
\[
[a_j-R_j, a_j+R_j],\qquad j=1,\ldots,n.
\]
Pero la condición \eqref{a_greater_b_plus_c} garantiza que $a_j-R_j>0$,
así que todos los valores propios de $T$ son estrictamente positivos.
\end{proof}

\noindent
La siguiente función muestra como generar de manera pseudoaleatoria
matrices tridiagonales reales simétricas positivas definidas.

\begin{verbatim}
function [] = test_tridiagonal_positive(),
   n = 5;
   a = 2 * rand(n, 1) - ones(n, 1);
   b = 2 * rand(n - 1, 1) - ones(n - 1, 1);
   c = 2 * rand(n - 1, 1) - ones(n - 1, 1);
   bext = [b; 0];
   cext = [0; c];
   a = abs(bext) + abs(cext) + ones(n, 1) + rand(n, 1);
   T = tridiagonal_full(a, b, c);
   display(T);
   display(eig(T));
end
\end{verbatim}

\end{document}
