%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%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{infolines}
  \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}

\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[Exercises]{Introductory Scientific Computing with Python}
\subtitle{Exercises}

\author[FOSSEE] {FOSSEE}

\institute[FOSSEE -- IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay}
\date[] {Mumbai, India}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

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


% 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}
  \titlepage
\end{frame}


\begin{frame}[fragile]
  \frametitle{Problem 1}
  \begin{columns}
    \column{0.5\textwidth}
    \hspace*{-0.5in}
    \includegraphics[height=2in, interpolate=true]{data/L-Tsq.png}
    \column{0.45\textwidth}
    \begin{block}{Example code}
      \tiny
\begin{lstlisting}
In []: l, t = loadtxt('pendulum.txt',
               unpack=True)
In []: plot(l, t, '.')
    \end{lstlisting}
    \end{block}
  \end{columns}
  \begin{block}{Problem Statement}
      Tweak above code to plot data in file \typ{pos.txt}.
  \end{block}
\end{frame}

\begin{frame}
  \frametitle{Problem 1 cont...}
  \begin{itemize}
  \item Label both the axes.
  \item What kind of motion is this?
  \item Title the graph accordingly.
  \item Annotate the position where vertical velocity is zero.
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Solution}
\begin{lstlisting}
x, y = loadtxt('pos.txt', unpack=True)
plot(x, y)
xlabel('x')
ylabel('y')
title('Projectile motion')
annotate('v = 0', xy=(5, 4.75))
# Or
annotate(r'$v_y = 0$', xy=(5, 4.75))
\end{lstlisting}
  \begin{itemize}
  \item Note the \LaTeX\ syntax
  \item Note the raw strings: \typ{r'$v_y = 0$'}
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Problem 2}
  \begin{columns}
    \column{0.5\textwidth}
    \hspace*{-0.5in}
    \includegraphics[height=2in, interpolate=true]{data/exercises/triangle}
    \column{0.45\textwidth}
    \begin{block}{Plot points given x and y coordinates}
    \tiny
    \begin{lstlisting}
In []: x = [3, 2, -2, 3]
In []: y = [1, -3, 4, 1]
In []: plot(x, y)
    \end{lstlisting}
    \end{block}
  \end{columns}
  Line can be plotted using arrays of coordinates.
  \pause
  \begin{block}{Problem statement}
    Write a Program that plots a regular n-gon(Let n = 5).
  \end{block}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Solution}
\begin{lstlisting}
n = 5
t = linspace(0, 2*pi, n+1)
x = cos(t)
y = sin(t)
plot(x, y)
axis('equal')
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Better Solution}
\begin{lstlisting}
def plot_ngon(n):
    t = linspace(0, 2*pi, n+1)
    x = cos(t)
    y = sin(t)
    plot(x, y)
    axis('equal')

plot_ngon(5)
clf()
plot_ngon(10)
\end{lstlisting}
\end{frame}


\begin{frame}[fragile]
  \frametitle{Problem 3}
  \begin{columns}
    \column{0.5\textwidth}
    \hspace*{-0.5in}
    \includegraphics[height=2in, interpolate=true]{data/exercises/damp}
    \column{0.45\textwidth}
    \begin{block}{Damped Oscillation}
    \tiny
    \begin{lstlisting}
In []: t = linspace(0, 4*pi)
In []: plot(t, exp(-t/10)*sin(t))
    \end{lstlisting}
    \end{block}
  \end{columns}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Problem 3 cont...}
Create a sequence of images (say 10) in which the damped
oscillator($e^{-t/10}sin(t)$) slowly evolves over time $t$.
\begin{columns}
\column{0.35\textwidth}
\includegraphics[width=1.5in,height=1.5in, interpolate=true]{data/exercises/plot2}
\column{0.35\textwidth}
\includegraphics[width=1.5in,height=1.5in, interpolate=true]{data/exercises/plot4}
\column{0.35\textwidth}
\includegraphics[width=1.5in,height=1.5in, interpolate=true]{data/exercises/plot6}
\end{columns}
\begin{block}{Hint}
\small
  \begin{lstlisting}
savefig('plot'+str(i)+'.png') #i is some int
  \end{lstlisting}
\end{block}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Naive Solution}
\begin{lstlisting}
for i in range(1, 11):
    t = linspace(0, 0.5*pi*i, 50*i)
    clf()
    plot(t, exp(-t/10)*sin(t))
    savefig('plot' + str(i) + '.png')
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Better Solution}
\begin{lstlisting}
for i in range(1, 11):
    t = linspace(0, 0.5*pi*i, 50*i)
    clf()
    plot(t, exp(-t/10)*sin(t))
    xlim(0, 5*pi)
    ylim(-1, 1)
    savefig('plot' + str(i) + '.png')
\end{lstlisting}
\end{frame}


\begin{frame}[fragile]
  \frametitle{Problem 4}
  \begin{lstlisting}
In []: x = imread('smoothing.gif')
In []: x.shape
Out[]: (256, 256)
In []: imshow(x,cmap=cm.gray)
In []: colorbar()
\end{lstlisting}
\emphbar{Replace each pixel with mean of neighboring pixels}
  \begin{center}
  \includegraphics[height=1in, interpolate=true]{data/exercises/neighbour}
  \end{center}
\end{frame}

\begin{frame}
  \begin{center}
    \includegraphics[height=3in, interpolate=true]{data/exercises/smoothing}
  \end{center}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Problem 4: Approach}
  For \typ{y} being resultant image:
  \begin{lstlisting}
y[1, 1] = x[0, 1]/4 + x[1, 0]/4
          + x[2, 1]/4 + x[1, 2]/4
  \end{lstlisting}
   \begin{columns}
    \column{0.45\textwidth}
    \hspace*{-0.5in}
    \includegraphics[height=1.5in, interpolate=true]{data/exercises/smoothing}
    \column{0.45\textwidth}
    \hspace*{-0.5in}
    \includegraphics[height=1.5in, interpolate=true]{data/exercises/after-filter}
  \end{columns}
   \begin{block}{Hint:}
     Use array Slicing.
   \end{block}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Solution}
  \begin{lstlisting}
In []: y = zeros_like(x)
In []: y[1:-1,1:-1] = x[:-2,1:-1]/4 +
                      x[2:,1:-1]/4 +
                      x[1:-1,2:]/4 +
                      x[1:-1,:-2]/4
In []: imshow(y,cmap=cm.gray)
  \end{lstlisting}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Problem 4 cont\ldots}
  \begin{itemize}
      \item Apply the smoothing operation repeatedly to the original
          image

      \item Subtract the smoothed image from the original to obtain
          the edges
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Problem 5}

  What if you did the following in problem 4?
\begin{lstlisting}
In []: y1 = zeros_like(x)
In []: y1[1:-1,1:-1] = (x[:-2,1:-1] +
                        x[2:,1:-1] +
                        x[1:-1,2:] +
                        x[1:-1,:-2])/4
  \end{lstlisting}

    Are the answers different?

\end{frame}

\begin{frame}[fragile]
  \frametitle{Problem 5 cont\ldots}
  Why? The answer lies in the following:
\begin{lstlisting}
In []: x.dtype
Out[]: dtype('uint8')

In []: print(x.itemsize)
1

In []: z = x/4.0

In []: print(z.dtype)
float64

\end{lstlisting}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Problem 5 cont\ldots}
What if you did this?

\begin{lstlisting}
x = imread('smoothing.gif')
y2 = zeros_like(x)
y2[1:-1,1:-1] = x[:-2,1:-1]/4. + \
                x[2:,1:-1]/4.  + \
                x[1:-1,2:]/4.  + \
                x[1:-1,:-2]/4.
\end{lstlisting}
\begin{itemize}
    \item Will the answer be any different from \typ{y}?
    \item What will the dtype of \typ{y2} be?
    \item Discuss what is going on!
\end{itemize}

\end{frame}

\begin{frame}[fragile]
  \frametitle{Problem 5 cont\ldots}
  \begin{itemize}
  \item Did you do the right thing to find the edges earlier in problem 4?
  \item If not, fix it!
  \end{itemize}
  Note that:
  \small
\begin{lstlisting}
In []: print(x.dtype)
uint8
In []: x1 = x.astype('float64')
In []: print(x1.dtype)
float64
In []: print(x.dtype.char)
d
In []: x.dtype.<TAB> # Explore!
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Problem 6}

  Edge detection looks much nicer with \typ{penguins.png}, try it!  The
  caveat is that it is a 4 component RGBA image with elements in the
  range $[0.0, 1.0]$.

\begin{lstlisting}
In []: x = imread(penguins.png')

In []: print(x.shape)
(370, 370, 4)

In []: print(x.min(), x.max())
(0.0, 1.0)
\end{lstlisting}

 Repeat the edge detection with this image.

\end{frame}


\end{document}

%% \begin{frame}
%%   \frametitle{Problem 4}
%%   Legendre polynomials $P_n(x)$ are defined by the following recurrence relation

%% \center{$(n+1)P_{n+1}(x) - (2n+1)xP_n(x) + nP_{n-1}(x) = 0$}\\

%% with $P_0(x) = 1$, $P_1(x) = x$ and $P_2(x) = (3x^2 - 1)/2$. Compute the next three
%%    Legendre polynomials and plot all 6 over the interval [-1,1].
%% \end{frame}

%% \begin{frame}[fragile]
%% \frametitle{Problem Set 5}
%%   \begin{columns}
%%     \column{0.6\textwidth}
%%     \small{
%%     \begin{itemize}
%%       \item[3] Consider the iteration $x_{n+1} = f(x_n)$ where $f(x) = kx(1-x)$.  Plot the successive iterates of this process as explained below.
%%     \end{itemize}}
%%     \column{0.35\textwidth}
%%     \hspace*{-0.5in}
%%   \includegraphics[height=1.6in, interpolate=true]{data/cobweb}
%% \end{columns}
%% \end{frame}

%% \begin{frame}
%%   \frametitle{Problem Set 5.3}
%%   Plot the cobweb plot as follows:
%%   \begin{enumerate}
%%     \item Start at $(x_0, 0)$ ($\implies$ i=0)
%%     \item Draw a line to $(x_i, f(x_i))$
%%     \item Set $x_{i+1} = f(x_i)$
%%     \item Draw a line to $(x_{i+1}, x_{i+1})$
%%     \item $(i\implies i+1)$
%%     \item Repeat from 2 for as long as you want
%%   \end{enumerate}
%% \inctime{20}
%% \end{frame}
