%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Tutorial slides on Python.
%
% Author: Prabhu Ramachandran <prabhu at aero.iitb.ac.in>
% Copyright (c) 2005-2009, Prabhu Ramachandran
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\documentclass[14pt,compress]{beamer}
%\documentclass[draft]{beamer}
%\documentclass[compress,handout]{beamer}
%\usepackage{pgfpages} 
%\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm]

% Modified from: generic-ornate-15min-45min.de.tex
\mode<presentation>
{
  \usetheme{Warsaw}
  \useoutertheme{split}
  \setbeamercovered{transparent}
}

\usepackage[english]{babel}
\usepackage[latin1]{inputenc}
%\usepackage{times}
\usepackage[T1]{fontenc}

% Taken from Fernando's slides.
\usepackage{ae,aecompl}
\usepackage{mathpazo,courier,euler}
\usepackage[scaled=.95]{helvet}
\usepackage{amsmath}

\definecolor{darkgreen}{rgb}{0,0.5,0}

\usepackage{listings}
\lstset{language=Python,
    basicstyle=\ttfamily\bfseries,
    commentstyle=\color{red}\itshape,
  stringstyle=\color{darkgreen},
  showstringspaces=false,
  keywordstyle=\color{blue}\bfseries}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Macros
\setbeamercolor{emphbar}{bg=blue!20, fg=black}
\newcommand{\emphbar}[1]
{\begin{beamercolorbox}[rounded=true]{emphbar} 
      {#1}
 \end{beamercolorbox}
}
\newcounter{time}
\setcounter{time}{0}
\newcommand{\inctime}[1]{\addtocounter{time}{#1}{\tiny \thetime\ m}}

\newcommand{\typ}[1]{\lstinline{#1}}

\newcommand{\kwrd}[1]{ \texttt{\textbf{\color{blue}{#1}}}  }

%%% This is from Fernando's setup.
% \usepackage{color}
% \definecolor{orange}{cmyk}{0,0.4,0.8,0.2}
% % Use and configure listings package for nicely formatted code
% \usepackage{listings}
% \lstset{
%    language=Python,
%    basicstyle=\small\ttfamily,
%    commentstyle=\ttfamily\color{blue},
%    stringstyle=\ttfamily\color{orange},
%    showstringspaces=false,
%    breaklines=true,
%    postbreak = \space\dots
% }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Title page
\title[]{Arrays \& Least Squares Fit}

\author[FOSSEE] {FOSSEE}

\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay}
\date[] {31, October 2009}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%\pgfdeclareimage[height=0.75cm]{iitmlogo}{iitmlogo}
%\logo{\pgfuseimage{iitmlogo}}


%% Delete this, if you do not want the table of contents to pop up at
%% the beginning of each subsection:
\AtBeginSubsection[]
{
  \begin{frame}<beamer>
    \frametitle{Outline}
    \tableofcontents[currentsection,currentsubsection]
  \end{frame}
}

\AtBeginSection[]
{
  \begin{frame}<beamer>
    \frametitle{Outline}
    \tableofcontents[currentsection,currentsubsection]
  \end{frame}
}

\newcommand{\num}{\texttt{numpy}}


% If you wish to uncover everything in a step-wise fashion, uncomment
% the following command: 
%\beamerdefaultoverlayspecification{<+->}

%\includeonlyframes{current,current1,current2,current3,current4,current5,current6}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DOCUMENT STARTS
\begin{document}

\begin{frame}
  \maketitle
\end{frame}

%% \begin{frame}
%%   \frametitle{Outline}
%%   \tableofcontents
%%   % You might wish to add the option [pausesections]
%% \end{frame}

\begin{frame}
\frametitle{Least Squares Fit}
In this session - 
\begin{itemize}
\item We shall plot a least squares fit curve for time-period(T) squared vs. length(L) plot of a Simple Pendulum. 
\item Given a file containing L and T values
\end{itemize}
\end{frame}

\begin{frame}[fragile]
\frametitle{Least Squares Fit \ldots}
Machinery Required -
\begin{itemize}
\item Reading files and parsing data
\item Plotting points, lines
\item Calculating the Coefficients of the Least Squares Fit curve
\begin{itemize}
  \item Arrays
\end{itemize}
\end{itemize}
\end{frame}

\begin{frame}[fragile]
\frametitle{Reading pendulum.txt}
\begin{itemize}
  \item The file has two columns
  \item Column1 - L; Column2 - T
\end{itemize}
\begin{lstlisting}
In []: L = []
In []: T = []
In []: for line in open('pendulum.txt'):
  ....     len, t = line.split()
  ....     L.append(float(len))
  ....     T.append(float(t))
\end{lstlisting}
We now have two lists L and T
\end{frame}

\begin{frame}[fragile]
\frametitle{Calculating $T^2$}
\begin{itemize}
\item Each element of the list T must be squared
\item Iterating over each element of the list works
\item But very slow \ldots
\item Instead, we use arrays
\end{itemize}
\begin{lstlisting}
In []: array(L)
In []: T = array(T)
In []: Tsq = T*T
In []: plot(L, Tsq, 'o')
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]
\frametitle{Arrays}
\begin{itemize}
\item T is now a \typ{numpy array}
\item \typ{numpy} arrays are very efficient and powerful 
\item Very easy to perform element-wise operations
\item \typ{+, -, *, /, \%}
\item More about arrays later
\end{itemize}
\end{frame}

\begin{frame}[fragile]
\frametitle{Least Square Polynomial}
\begin{enumerate}
\item $T^2 = \frac{4\pi^2}{g}L$
\item $T^2$ and $L$ have a linear relationship
\item We find an approximate solution to $Ax = y$, where A is the Van der Monde matrix to get coefficients of the least squares fit line. 
\end{enumerate}
\end{frame}

\begin{frame}[fragile]
\frametitle{Van der Monde Matrix}
Van der Monde matrix of order M
\begin{equation*}
  \begin{bmatrix}
  l_1^{M-1} & \ldots & l_1 & 1 \\
  l_2^{M-1} & \ldots &l_2 & 1 \\
  \vdots & \ldots & \vdots & \vdots\\
  l_N^{M-1} & \ldots & l_N & 1 \\
  \end{bmatrix}
\end{equation*}
\begin{lstlisting}
In []: A=vander(L,2)
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]
\frametitle{Least Square Fit Line}
\begin{itemize}
\item We use the \typ{lstsq} function of pylab
\item It returns the 
\begin{enumerate}
\item Least squares solution
\item Sum of residues
\item Rank of matrix A
\item Singular values of A
\end{enumerate}
\end{itemize}
\begin{lstlisting}
coeffs, res, rank, sing = lstsq(A,Tsq)
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]
\frametitle{Least Square Fit Line \ldots}
\begin{itemize}
\item Use the poly1d function of pylab, to create a function for the line equation using the coefficients obtained
\begin{lstlisting}
p=poly1d(coeffs)
\end{lstlisting}
\item Get new $T^2$ values using the function \typ{p} obtained
\begin{lstlisting}
Tline = p(L)
\end{lstlisting}
\item Now plot Tline vs. L, to get the Least squares fit line. 
\begin{lstlisting}
plot(L, Tline)
\end{lstlisting}
\end{itemize}
\end{frame}

\end{document}

Least squares: Smooth curve fit. 
Array Operations: Mean, average (etc region wise like district wise and state wise from SSLC.txt) 
Subject wise average. Introduce idea of dictionary. 

Session 3

import scipy
from scipy import linalg.

choose some meaningful plot. ??
Newton's law of cooling. 
u, v, f - optics
hooke's law
Least fit curves. 


Choose a named problem. 
ODE - first order. Whatever. 


arrays, etc etc. 
sum, average, mean. whatever. statistical
sslc data
numpy load text??
