diff options
Diffstat (limited to 'scipy/basic/09_exercises.tex')
-rw-r--r-- | scipy/basic/09_exercises.tex | 476 |
1 files changed, 476 insertions, 0 deletions
diff --git a/scipy/basic/09_exercises.tex b/scipy/basic/09_exercises.tex new file mode 100644 index 0000000..78ba335 --- /dev/null +++ b/scipy/basic/09_exercises.tex @@ -0,0 +1,476 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%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{lena.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('lena.png') + +In []: print(x.shape) +(512, 512, 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} |