%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Tutorial slides on Python.%% Author: FOSSEE % Copyright (c) 2009, FOSSEE, IIT Bombay%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\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}\usepackage{amsmath}% 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[Basic Python]{Interpolation, Differentiation and Integration}\author[FOSSEE] {FOSSEE}\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay}\date[] {31, October 2009\\Day 1, Session 5}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\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}%%}% 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} \frametitle{Outline} \tableofcontents% \pausesections\end{frame}\section{Interpolation}\begin{frame}[fragile]\frametitle{Interpolation}\begin{itemize}\item Let us begin with interpolation\item Let's use the L and T arrays and interpolate this data to obtain data at new points\end{itemize}\begin{lstlisting}In []: L = []In []: T = []In []: for line in open('pendulum.txt'): l, t = line.split() L.append(float(l)) T.append(float(t))In []: L = array(L)In []: T = array(T)In []: Tsq = T*T\end{lstlisting}\end{frame}%% \begin{frame}[fragile]%% \frametitle{Interpolation \ldots}%% \begin{small}%% \typ{In []: from scipy.interpolate import interp1d}%% \end{small}%% \begin{itemize}%% \item The \typ{interp1d} function returns a function%% \begin{lstlisting}%% In []: f = interp1d(L, T)%% \end{lstlisting}%% \item Functions can be assigned to variables %% \item This function interpolates between known data values to obtain unknown%% \end{itemize}%% \end{frame}%% \begin{frame}[fragile]%% \frametitle{Interpolation \ldots}%% \begin{lstlisting}%% In []: Ln = arange(0.1,0.99,0.005)%% # Interpolating! %% # The new values in range of old data%% In []: plot(L, T, 'o', Ln, f(Ln), '-')%% In []: f = interp1d(L, T, kind='cubic')%% # When kind not specified, it's linear%% # Others are ...%% # 'nearest', 'zero', %% # 'slinear', 'quadratic'%% \end{lstlisting}%% \end{frame}\begin{frame}[fragile]\frametitle{Spline Interpolation}\begin{small}\begin{lstlisting}In []: from scipy.interpolate import splrepIn []: from scipy.interpolate import splev\end{lstlisting}\end{small}\begin{itemize}\item Involves two steps \begin{enumerate} \item Find out the spline curve, coefficients \item Evaluate the spline at new points \end{enumerate}\end{itemize}\end{frame}\begin{frame}[fragile]\frametitle{\typ{splrep}}To find the B-spline representation\begin{lstlisting}In []: tck = splrep(L, T)\end{lstlisting}Returns a tuple containing \begin{enumerate}\item the vector of knots, \item the B-spline coefficients \item the degree of the spline (default=3)\end{enumerate}\end{frame}\begin{frame}[fragile]\frametitle{\typ{splev}}To Evaluate a B-spline and it's derivatives\begin{lstlisting}In []: Lnew = arange(0.1,1,0.005)In []: Tnew = splev(Lnew, tck)#To obtain derivatives of the spline#use der=1, 2,.. for 1st, 2nd,.. orderIn []: Tnew = splev(Lnew, tck, der=1)\end{lstlisting}\end{frame}\begin{frame}[fragile]\frametitle{}\end{frame}\section{Differentiation}\begin{frame}[fragile]\frametitle{Numerical Differentiation}\begin{itemize}\item Given function $f(x)$ or data points $y=f(x)$\item We wish to calculate $f^{'}(x)$ at points $x$\item Taylor series - finite difference approximations\end{itemize}\begin{center}\begin{tabular}{l l}$f(x+h)=f(x)+h.f^{'}(x)$ &Forward \\$f(x-h)=f(x)-h.f^{'}(x)$ &Backward\end{tabular}\end{center}\end{frame}\begin{frame}[fragile]\frametitle{Forward Difference}\begin{lstlisting}In []: x = linspace(0, 2*pi, 100)In []: y = sin(x)In []: deltax = x[1] - x[0]\end{lstlisting}Obtain the finite forward difference of y\end{frame}\begin{frame}[fragile]\frametitle{Forward Difference \ldots}\begin{lstlisting}In []: fD = (y[1:] - y[:-1]) / deltaxIn []: plot(x, y, x[:-1], fD)\end{lstlisting}\begin{center} \includegraphics[height=2in, interpolate=true]{data/fwdDiff}\end{center}\end{frame}\begin{frame}[fragile]\frametitle{}\end{frame}\section{Quadrature}\begin{frame}[fragile]\frametitle{Quadrature}\begin{itemize}\item We wish to find area under a curve\item Area under $(sin(x) + x^2)$ in $(0,1)$\item scipy has functions to do that\end{itemize}\begin{small} \typ{In []: from scipy.integrate import quad}\end{small}\begin{itemize}\item Inputs - function to integrate, limits\end{itemize}\begin{lstlisting}In []: x = 0In []: quad(sin(x)+x**2, 0, 1)\end{lstlisting}\begin{small}\alert{\typ{error:}}\typ{First argument must be a callable function.}\end{small}\end{frame}\begin{frame}[fragile]\frametitle{Functions - Definition}We have been using them all along. Now let's see how to define them.\begin{lstlisting}In []: def f(x): return sin(x)+x**2In []: quad(f, 0, 1)\end{lstlisting}\begin{itemize}\item \typ{def}\item arguments\item \typ{return}\end{itemize}\end{frame}\begin{frame}[fragile]\frametitle{Functions - Calling them}\begin{lstlisting}In [15]: f()---------------------------------------\end{lstlisting}\alert{\typ{TypeError:}}\typ{f() takes exactly 1 argument}\typ{(0 given)}\begin{lstlisting}In []: f(0)Out[]: 0.0In []: f(1)Out[]: 1.8414709848078965\end{lstlisting}\end{frame}\begin{frame}[fragile]\frametitle{Functions - Default Arguments}\begin{lstlisting}In []: def f(x=1): return sin(x)+x**2In []: f(10)Out[]: 99.455978889110625In []: f(1)Out[]: 1.8414709848078965In []: f()Out[]: 1.8414709848078965\end{lstlisting}\end{frame}\begin{frame}[fragile]\frametitle{Functions - Keyword Arguments}\begin{lstlisting}In []: def f(x=1, y=pi): return sin(y)+x**2In []: f()Out[]: 1.0000000000000002In []: f(2)Out[]: 4.0In []: f(y=2)Out[]: 1.9092974268256817In []: f(y=pi/2,x=0)Out[]: 1.0\end{lstlisting}\end{frame}\begin{frame}[fragile] \frametitle{More on functions} \begin{itemize} \item Scope of variables in the function is local \item Mutable items are \alert{passed by reference} \item First line after definition may be a documentation string (\alert{recommended!}) \item Function definition and execution defines a name bound to the function \item You \emph{can} assign a variable to a function! \end{itemize}\end{frame}\begin{frame}[fragile]\frametitle{Quadrature \ldots}\begin{lstlisting}In []: quad(f, 0, 1)\end{lstlisting}Returns the integral and an estimate of the absolute error in the result.\begin{itemize}\item Use \typ{dblquad} for Double integrals\item Use \typ{tplquad} for Triple integrals\end{itemize}\end{frame}\begin{frame} \frametitle{Things we have learned} \begin{itemize} \item Interpolation \item Differentiation \item Functions \begin{itemize} \item Definition \item Calling \item Default Arguments \item Keyword Arguments \end{itemize} \item Quadrature \end{itemize}\end{frame}\end{document}