%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %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 { \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]{Matrices, Solution of equations 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} \frametitle{Outline} \tableofcontents[currentsection,currentsubsection] \end{frame} } %%\AtBeginSection[] %%{ %%\begin{frame} %% \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{Solving linear equations} \begin{frame}[fragile] \frametitle{Solution of equations} Consider, \begin{align*} 3x + 2y - z & = 1 \\ 2x - 2y + 4z & = -2 \\ -x + \frac{1}{2}y -z & = 0 \end{align*} Solution: \begin{align*} x & = 1 \\ y & = -2 \\ z & = -2 \end{align*} \end{frame} \begin{frame}[fragile] \frametitle{Solving using Matrices} Let us now look at how to solve this using \kwrd{matrices} \begin{lstlisting} In []: A = matrix([[3,2,-1],[2,-2,4],[-1, 0.5, -1]]) In []: b = matrix([[1], [-2], [0]]) In []: x = linalg.solve(A, b) In []: Ax = dot(A, x) In []: allclose(Ax, b) Out[]: True \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Solution:} \begin{lstlisting} In []: x Out[]: array([[ 1.], [-2.], [-2.]]) In []: Ax Out[]: matrix([[ 1.00000000e+00], [ -2.00000000e+00], [ 2.22044605e-16]]) \end{lstlisting} \end{frame} \section{Matrices} \subsection{Initializing} \begin{frame}[fragile] \frametitle{Matrices: Initializing} \begin{lstlisting} In []: a = matrix([[1,2,3], [4,5,6], [7,8,9]]) In []: a Out[]: matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) \end{lstlisting} \end{frame} \subsection{Basic Operations} \begin{frame}[fragile] \frametitle{Inverse of a Matrix} \begin{small} \begin{lstlisting} In []: linalg.inv(A) Out[]: matrix([[ 0.07734807, 0.01657459, 0.32044199], [ 0.09944751, -0.12154696, -0.01657459], [-0.02762431, -0.07734807, 0.17127072]]) \end{lstlisting} \end{small} \end{frame} \begin{frame}[fragile] \frametitle{Determinant} \begin{lstlisting} In []: linalg.det(a) Out[]: -9.5171266700777579e-16 \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Computing Norms} \begin{lstlisting} In []: linalg.norm(a) Out[]: 16.881943016134134 \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Eigen Values and Eigen Matrix} \begin{small} \begin{lstlisting} In []: linalg.eigvals(a) Out[]: array([1.61168440e+01, -1.11684397e+00, -1.22196337e-15]) In []: linalg.eig(a) Out[]: (array([ 1.61168440e+01, -1.11684397e+00, -1.22196337e-15]), matrix([[-0.23197069, -0.78583024, 0.40824829], [-0.52532209, -0.08675134, -0.81649658], [-0.8186735 , 0.61232756, 0.40824829]])) \end{lstlisting} \end{small} \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 = 0 In []: integrate.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**2 In []: integrate.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.0 In []: 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**2 In []: f(10) Out[]: 99.455978889110625 In []: f(1) Out[]: 1.8414709848078965 In []: 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**2 In []: f() Out[]: 1.0000000000000002 In []: f(2) Out[]: 4.0 In []: f(y=2) Out[]: 1.9092974268256817 In []: 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 []: integrate.quad(f, 0, 1) \end{lstlisting} Returns the integral and an estimate of the absolute error in the result. \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} \end{document}