diff options
author | Prabhu Ramachandran | 2018-05-15 21:25:25 +0530 |
---|---|---|
committer | Prabhu Ramachandran | 2018-05-15 21:25:25 +0530 |
commit | e805f9daa6c91a88fe7c0106db32369b457eda63 (patch) | |
tree | e73e31d9778747f07567ecd52c01e956ed8c440c /scipy/basic/basic_scipy.tex | |
parent | 2c5145f262e82996c9c2424159e5eb5dde47fae7 (diff) | |
download | python-workshops-e805f9daa6c91a88fe7c0106db32369b457eda63.tar.gz python-workshops-e805f9daa6c91a88fe7c0106db32369b457eda63.tar.bz2 python-workshops-e805f9daa6c91a88fe7c0106db32369b457eda63.zip |
Add ordering to the basic material.
Diffstat (limited to 'scipy/basic/basic_scipy.tex')
-rw-r--r-- | scipy/basic/basic_scipy.tex | 509 |
1 files changed, 0 insertions, 509 deletions
diff --git a/scipy/basic/basic_scipy.tex b/scipy/basic/basic_scipy.tex deleted file mode 100644 index dca675d..0000000 --- a/scipy/basic/basic_scipy.tex +++ /dev/null @@ -1,509 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%Tutorial slides on Python. -% -% Author: FOSSEE -% Copyright (c) 2009-2016, 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{infolines} - \setbeamercovered{transparent} -} - -\usepackage[english]{babel} -\usepackage[latin1]{inputenc} -%\usepackage{times} -\usepackage[T1]{fontenc} -\usepackage{pgf} - -% Taken from Fernando's slides. -\usepackage{ae,aecompl} -\usepackage{mathpazo,courier,euler} -\usepackage[scaled=.95]{helvet} -\usepackage{amsmath} - -\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} -} - -\newcommand{\myemph}[1]{\structure{\emph{#1}}} -\newcommand{\PythonCode}[1]{\lstinline{#1}} - -\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 SciPy]{Introductory Scientific Computing with -Python} -\subtitle{Basic SciPy} - -\author[Prabhu] {FOSSEE} - -\institute[FOSSEE -- IITB] {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} -} - -\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} - \maketitle -\end{frame} - - -\section{Solving linear systems} - -\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 = array([[3,2,-1], - [2,-2,4], - [-1, 0.5, -1]]) -In []: b = array([1, -2, 0]) -In []: x = solve(A, b) - \end{lstlisting} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Solution:} -\begin{lstlisting} -In []: x -Out[]: array([ 1., -2., -2.]) -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Let's check!} -\begin{small} -\begin{lstlisting} -In []: Ax = dot(A, x) -In []: Ax -Out[]: array([ 1.00000000e+00, -2.00000000e+00, -1.11022302e-16]) -\end{lstlisting} -\end{small} -\begin{block}{} -The last term in the matrix is actually \alert{0}!\\ -We can use \kwrd{allclose()} to check. -\end{block} -\begin{lstlisting} -In []: allclose(Ax, b) -Out[]: True -\end{lstlisting} -\inctime{10} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Problem} -Solve the set of equations: -\begin{align*} - x + y + 2z -w & = 3\\ - 2x + 5y - z - 9w & = -3\\ - 2x + y -z + 3w & = -11 \\ - x - 3y + 2z + 7w & = -5\\ -\end{align*} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Solution} -Use \kwrd{solve()} -\begin{align*} - x & = -5\\ - y & = 2\\ - z & = 3\\ - w & = 0\\ -\end{align*} -\inctime{5} -\end{frame} - -\section{Finding Roots} - -\begin{frame}[fragile] -\frametitle{SciPy: \typ{roots}} -\begin{itemize} -\item Calculates the roots of polynomials -\item To calculate the roots of $x^2-5x+6$ -\end{itemize} -\begin{lstlisting} - In []: coeffs = [1, -5, 6] - In []: roots(coeffs) - Out[]: array([3., 2.]) -\end{lstlisting} -\vspace*{-.2in} -\begin{center} -\includegraphics[height=1.6in, interpolate=true]{data/roots} -\end{center} -\end{frame} - -\begin{frame}[fragile] -\frametitle{SciPy: \typ{fsolve}} -Find the root of $sin(z)+cos^2(z)$ nearest to $0$ -\vspace{-0.1in} -\begin{center} -\includegraphics[height=2.8in, interpolate=true]{data/fsolve} -\end{center} -\end{frame} - -\begin{frame}[fragile] -\frametitle{\typ{fsolve}} -\begin{small} -\begin{lstlisting} - In []: from scipy.optimize import fsolve -\end{lstlisting} -\end{small} -\begin{itemize} -\item Finds the roots of a system of non-linear equations -\item Input arguments - \alert{Function} and initial estimate -\item Returns the solution -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{\typ{fsolve} \ldots} -\begin{lstlisting} -In []: def g(z): - ....: return sin(z)+cos(z)*cos(z) -In []: fsolve(g, 0) -Out[]: -0.66623943249251527 -\end{lstlisting} -\begin{center} -\includegraphics[height=2in, interpolate=true]{data/fsolve} -\end{center} -\inctime{10} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Exercise Problem} - Find the root of the equation $x^2 - sin(x) + cos^2(x) = tan(x)$ nearest to $0$ -\end{frame} - -\begin{frame}[fragile] - \frametitle{Solution} - \begin{small} - \begin{lstlisting} -def g(x): - return x**2 - sin(x) + cos(x)*cos(x) - tan(x) -fsolve(g, 0) - \end{lstlisting} - \end{small} - \vspace*{-0.2in} - \begin{center} -\includegraphics[height=2.5in, interpolate=true]{data/fsolve_tanx} -\end{center} -\vspace*{-0.5in} - \inctime{5} -\end{frame} - -%% \begin{frame}[fragile] -%% \frametitle{Scipy Methods \dots} -%% \begin{small} -%% \begin{lstlisting} -%% In []: from scipy.optimize import fixed_point - -%% In []: from scipy.optimize import bisect - -%% In []: from scipy.optimize import newton -%% \end{lstlisting} -%% \end{small} -%% \end{frame} - -\section{ODEs} - -\begin{frame} -\frametitle{Solving ODEs using SciPy} -\begin{itemize} -\item Consider the spread of an epidemic in a population - \vspace*{0.1in} -\item $\frac{dy}{dt} = ky(L-y)$ gives the spread of the disease - \vspace*{0.1in} -\item $L$ is the total population. -\item Use $L = 2.5E5, k = 3E-5, y(0) = 250$ -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Solving ODEs using SciPy} -Define a function as below -\small -\begin{lstlisting} -In []: from scipy.integrate import odeint -In []: def epid(y, t): - ...: k = 3.0e-5 - ...: L = 2.5e5 - ...: return k*y*(L-y) - ...: -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Solving ODEs using SciPy \ldots} -\begin{lstlisting} -In []: t = linspace(0, 12, 61) - -In []: y = odeint(epid, 250, t) - -In []: plot(t, y) -\end{lstlisting} -%Insert Plot -\end{frame} - -\begin{frame}[fragile] -\frametitle{Result} -\begin{center} -\includegraphics[height=3in, interpolate=true]{data/image} -\end{center} -\vspace*{-0.5in} -\inctime{5} -\end{frame} - - -\begin{frame}[fragile] -\frametitle{ODEs - Simple Pendulum} -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(10^o)\quad & \&\quad \omega = 0\ (Initial\ values)\nonumber -\end{align} -\end{frame} - -\begin{frame}[fragile] -\frametitle{ODEs - Simple Pendulum \ldots} -\begin{itemize} -\item Use \typ{odeint} to do the integration -\end{itemize} -\begin{lstlisting} -In []: def pend_rhs(state, t): - .... theta = state[0] - .... omega = state[1] - .... g = 9.81 - .... L = 0.2 - .... F=[omega, -(g/L)*sin(theta)] - .... return F - .... -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile] -\frametitle{ODEs - Simple Pendulum \ldots} -\begin{itemize} -\item \typ{t} is the time variable \\ -\item \typ{initial} has the initial values -\end{itemize} -\begin{lstlisting} -In []: t = linspace(0, 20, 101) -In []: initial = [10*2*pi/360, 0] -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile] -\frametitle{ODEs - Simple Pendulum \ldots} -%%\begin{small} -\typ{In []: from scipy.integrate import odeint} -%%\end{small} -\begin{lstlisting} -In []: pend_sol = odeint(pend_rhs, - initial,t) -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Result} -\begin{center} -\includegraphics[height=2in, interpolate=true]{data/ode} -\end{center} - \inctime{10} -\end{frame} - -\section{FFTs} - -\begin{frame}[fragile] -\frametitle{The FFT} -\begin{itemize} - \item We have a simple signal $y(t)$ - \item Find the FFT and plot it -\end{itemize} -\begin{lstlisting} -In []: t = linspace(0, 2*pi, 500) -In []: y = sin(4*pi*t) - -In []: f = fft.fft(y) -In []: freq = fft.fftfreq(500, - ...: t[1] - t[0]) - -In []: plot(freq[:250], abs(f)[:250]) -In []: grid() -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile] -\frametitle{FFTs cont\dots} -\begin{lstlisting} -In []: y1 = fft.ifft(f) # inverse FFT -In []: allclose(y, y1) -Out[]: True -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile] -\frametitle{FFTs cont\dots} -Let us add some noise to the signal -\begin{lstlisting} -In []: yr = y + - ...: random.random(size=500)*0.2 -In []: yn = y + - ...: random.normal(size=500)*0.2 - -In []: plot(t, yr) -In []: figure() -In []: plot(freq[:250], - ...: abs(fft.fft(yr))[:250]) -\end{lstlisting} -\begin{itemize} - \item \typ{random}: produces uniform deviates in $[0, 1)$ - \item \typ{normal}: draws random samples from a Gaussian - distribution - \item Useful to create a random matrix of any shape -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{FFTs cont\dots} -Filter the noisy signal: -\begin{lstlisting} -In []: from scipy import signal -In []: yc = signal.wiener(yn, 5) -In []: clf() -In []: plot(t, yc) -In []: figure() -In []: plot(freq[:250], - ...: abs(fft.fft(yc))[:250]) -\end{lstlisting} -Only scratched the surface here \dots - -\inctime{10} -\end{frame} - - -\begin{frame} - \frametitle{Things we have learned} - \begin{itemize} - \item Solving Linear Equations - \item Defining Functions - \item Finding Roots - \item Solving ODEs - \item FFTs and basic signal processing - \end{itemize} -\end{frame} - - -\begin{frame} - \frametitle{Further reading} - \begin{itemize} - \item \url{ipython.readthedocs.io} - \item \url{matplotlib.org/contents.html} - \item \url{docs.scipy.org/doc/numpy/user/quickstart.html} - \item \url{docs.scipy.org/doc/scipy/reference/tutorial} - \end{itemize} -\end{frame} - -\end{document} |