%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%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 4}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\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{Integration}\subsection{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}\small{\typ{In []: from scipy.integrate import quad}}\begin{itemize}\item Inputs - function to integrate, limits\end{itemize}\begin{lstlisting}In []: x = 0In []: quad(sin(x)+x**2, 0, 1)\end{lstlisting}\alert{\typ{error:}}\typ{First argument must be a callable function.}\end{frame}\begin{frame}[fragile]\frametitle{Functions - Definition}\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}\subsection{ODEs}\begin{frame}[fragile]\frametitle{ODE Integration}We shall use the simple ODE of a simple pendulum. \begin{equation*}\ddot{\theta} = -\frac{g}{L}sin(\theta)\end{equation*}\begin{itemize}\item This equation can be written as a system of two first order ODEs\end{itemize}\begin{align}\dot{\theta} &= \omega \\\dot{\omega} &= -\frac{g}{L}sin(\theta) \\ \text{At}\ t &= 0 : \nonumber \\ \theta = \theta_0\quad & \&\quad \omega = 0 \nonumber\end{align}\end{frame}\begin{frame}[fragile]\frametitle{Solving ODEs using SciPy}\begin{itemize}\item We use the \typ{odeint} function from scipy to do the integration\item Define a function as below\end{itemize}\begin{lstlisting}In []: def pend_int(unknown, t, p): .... theta, omega = unknown .... g, L = p .... f=[omega, -(g/L)*sin(theta)] .... return f ....\end{lstlisting}\end{frame}\begin{frame}[fragile]\frametitle{Solving ODEs using SciPy \ldots}\begin{itemize}\item \typ{t} is the time variable \\ \item \typ{p} has the constants \\\item \typ{initial} has the initial values\end{itemize}\begin{lstlisting}In []: t = linspace(0, 10, 101)In []: p=(-9.81, 0.2)In []: initial = [10*2*pi/360, 0]\end{lstlisting}\end{frame}\begin{frame}[fragile]\frametitle{Solving ODEs using SciPy \ldots}\small{\typ{In []: from scipy.integrate import odeint}}\begin{lstlisting}In []: pend_sol = odeint(pend_int, initial,t, args=(p,))\end{lstlisting}\end{frame}\begin{frame} \frametitle{Things we have learned} \begin{itemize} \item Functions \begin{itemize} \item Definition \item Calling \item Default Arguments \item Keyword Arguments \end{itemize} \item Quadrature \end{itemize}\end{frame}\end{document}