11 marzo 2013

Plantilla LaTeX

Ésta es la plantilla que comúnmente uso al escribir en LaTeX


\documentclass[12pt,letterpaper,onecolumn]{article}
\usepackage{amsfonts,amsmath,amssymb,amsthm,dsfont}
\usepackage[spanish,mexico,activeacute]{babel}
% Incluir figuras
\usepackage{graphicx}
% Formato de párrafos
\usepackage{parskip}
\setlength{\parindent}{20pt}
% Encabezado y pie de página
\usepackage{fancyhdr,lastpage}
\pagestyle{fancy}
\fancyhf{}
\rhead{\footnotesize{Evaristo.Rojas@UABC.edu.mx}}
\lhead{\footnotesize{Materia, Escuela}}
\rfoot{\scriptsize{\thepage\ de \pageref{LastPage}}}
% Símbolo "tal que"
\usepackage{ulem}
\newcommand{\st}{\ \textnormal{\sout{)}}\ }
% Info
\title{T\'itulo}
\author{Evaristo Rojas}
% Documento
\begin{document}
\maketitle
Hola mundo.
\end{document}

10 febrero 2013

Octave es la mejor alternativa gratuita a MATLAB

Las tres alternativas gratuitas a MATLAB más comunes son Octave, FreeMat y Scilab; de esas tres opciones Octave es la más compatible con MATLAB.

Tal vez Python con SciPy, NumPy, matplotlib y Sage sea más poderoso que Octave, pero Octave corre los programas que codifiqué en MATLAB.

Referencia:

02 febrero 2013

Guía de estilo para MATLAB: Estructuras

Cuando proceso datos en MATLAB uso estructuras. El uso de estructuras hace engorroso el acceso a los datos pero me facilita el manejo de los metadatos. Para cada variable creo una estructura con el campo datos donde almaceno el valor de la variable; el resto de los campos de la estructura contienen los metadatos de la variable.

Ejemplo 1

Para ilustrar el caso más sencillo, cuando tenemos un único conjunto de datos, supongamos que queremos graficar una serie de tiempo de la marea.

% Inicializar
clear, close all

% Se define la variable independiente
X.datos = linspace(0,24);
X.nombre = 'Tiempo';
X.unidades = 'Horas';
X.husoHorario = 'UTC-8';

% Se define la variable dependiente
Y.datos = sin(X.datos/24*2*pi);
Y.nombre = 'Altura del Nivel del Mar';
Y.unidades = 'm';
Y.nivelReferencia = 'Baja Mar Media Inferior';

% Graficado
plot(X.datos,Y.datos)
xlabel([X.nombre ' (' X.unidades ')']);
ylabel([Y.nombre ' (' Y.unidades ')']);

Ejemplo 2

Ahora consideremos un caso más complicado; supongamos que tenemos varias series de tiempo. En este caso uso una estructura anidada donde cada campo es una variable y agrego solo un campo extra llamado Info que a su vez es una estructura que contiene todos los metadatos de cada conjunto de datos (no de las variables).

% Inicializar
clear, close all

% Se define la primer serie de tiempo
S(1).Info.nombre='Ensenada, B.C.';
S(1).Info.coordenadas='31.8667 -116.5964';
S(1).Info.clave='9mtj6c1j5xkht';
S(1).X.datos = linspace(0,24);
S(1).X.nombre = 'Tiempo';
S(1).X.unidades = 'Horas';
S(1).Y.datos = sin(S(1).X.datos/24*2*pi);
S(1).Y.nombre = 'Altura del Nivel del Mar';
S(1).Y.unidades = 'm';

% Se define la segunda serie de tiempo
S(2).Info.nombre='El Sauzal, B.C.';
S(2).Info.coordenadas='31.9007 -116.6880';
S(2).Info.clave='9mtj2xq7h7jvk';
S(2).X.datos = linspace(0,24);
S(2).X.nombre = 'Tiempo';
S(2).X.unidades = 'Horas';
S(2).Y.datos = cos(S(2).X.datos/24*2*pi);
S(2).Y.nombre = 'Altura del Nivel del Mar';
S(2).Y.unidades = 'm';

% Graficado
figure, hold on
arrayfun(@(S) (plot(S.X.datos , S.Y.datos, ...
   'color',rand(1,3))), S) xlabel([S(1).X.nombre ' (' S(1).X.unidades ')']); ylabel([S(1).Y.nombre ' (' S(1).Y.unidades ')']); legend(arrayfun(@(S) (S.Info.nombre), S, ...
   'UniformOutput',false))

Es importante distinguir los metadatos asociados a las series de tiempo, los cuales son campos en Info, de los metadatos correspondientes a las variables, los cuales son campos en la estructura de cada variable. Así, Info es el único campo que no contiene el campo datos. También conviene observar que length(S) es igual al número total de conjuntos de datos y que
all(arrayfun(@(S) (length(S.Y)==1),S)) es verdadero.