summaryrefslogtreecommitdiff
path: root/latex/examples/glimpse-at-scipy.tex
diff options
context:
space:
mode:
Diffstat (limited to 'latex/examples/glimpse-at-scipy.tex')
-rw-r--r--latex/examples/glimpse-at-scipy.tex426
1 files changed, 0 insertions, 426 deletions
diff --git a/latex/examples/glimpse-at-scipy.tex b/latex/examples/glimpse-at-scipy.tex
deleted file mode 100644
index 8227c34..0000000
--- a/latex/examples/glimpse-at-scipy.tex
+++ /dev/null
@@ -1,426 +0,0 @@
-\documentclass{article}
-
-\usepackage{amsmath}
-\usepackage{graphicx}
-\usepackage{color}
-\usepackage{listings}
-\usepackage{url}
-%\definecolor{darkgreen}{rgb}{0,0.5,0}
-
-\lstset{language=Python,
- basicstyle=\ttfamily\bfseries,
- commentstyle=\color{red}\itshape,
- stringstyle=\color{green},
- showstringspaces=false,
- keywordstyle=\color{blue}\bfseries}
-
-\title{A Glimpse at Scipy}
-\author{FOSSEE}
-\date{June 2010}
-
-\begin{document}
-\maketitle
-
-\begin{abstract}
-This document shows a glimpse of the features of Scipy that will be
-explored during this course.
-\end{abstract}
-
-\section{Introduction}
-
-SciPy is open-source software for mathematics, science, and
-engineering.
-
-SciPy (pronounced ``Sigh Pie'') is a collection of mathematical
-algorithms and convenience functions built on the Numpy extension for
-Python. It adds significant power to the interactive Python session by
-exposing the user to high-level commands and classes for the
-manipulation and visualization of data. With SciPy, an interactive
-Python session becomes a data-processing and system-prototyping
-environment rivaling sytems such as \emph{Matlab, IDL, Octave, R-Lab,
- and Scilab}. \cite{scipy}
-
-%% \begin{quote}
-%% In 1998, ... I came across Python and its numerical extension
-%% (Numeric) while I was looking for ways to analyze large data sets
-%% ... using a high-level language. I quickly fell in love with
-%% Python programming which is a remarkable statement to make about a
-%% programming language. If I had not seen others with the same view,
-%% I might have seriously doubted my sanity. -- Travis Oliphant, Creator of Numpy
-%% \end{quote}
-
-\subsection{Sub-packages of Scipy}
-
-SciPy is organized into subpackages covering different scientific
-computing domains. These are summarized in the \underline{table
- \ref{subpkg}}.
-
-\begin{table}
- \caption{Sub-packages available in Scipy}
- \label{subpkg}
-\begin{tabular}{|l|l|}
-\hline
-
-\textbf{Subpackage} & \textbf{Description}\\
-
-\hline
-
-\texttt{cluster} & Clustering algorithms\\
-
-\hline
-
-\texttt{constants} & Physical and mathematical constants\\
-
-\hline
-
-\texttt{fftpack} & Fast Fourier Transform routines\\
-
-\hline
-
-\texttt{integrate} & Integration and ordinary differential equation
-solvers\\
-
-\hline
-
-\texttt{interpolate} & Interpolation and smoothing splines\\
-
-\hline
-
-\texttt{io} & Input and Output\\
-
-\hline
-
-\texttt{linalg} & Linear algebra\\
-
-\hline
-
-\texttt{maxentropy} & Maximum entropy methods\\
-
-\hline
-
-\texttt{ndimage} & N-dimensional image processing\\
-
-\hline
-
-\texttt{odr} & Orthogonal distance regression\\
-
-\hline
-
-\texttt{optimize} & Optimization and root-finding routines\\
-
-\hline
-
-\texttt{signal} & Signal processing\\
-
-\hline
-
-\texttt{sparse} & Sparse matrices and associated routines\\
-
-\hline
-
-\texttt{spatial} & Spatial data structures and algorithms\\
-
-\hline
-
-\texttt{special} & Special functions\\
-
-\hline
-
-\texttt{stats} & Statistical distributions and functions\\
-
-\hline
-
-\texttt{weave} & C/C++ integration\\
-
-\hline
-\end{tabular}
-\end{table}
-
-\subsection{Use of Scipy in this course}
-Following is a partial list of tasks we shall perform using Scipy, in
-this course.
-
-\begin{enumerate}
- \item Plotting \footnote{using \texttt{pylab} - see Appendix
- \ref{mpl}}
- \item Matrix Operations
- \begin{itemize}
- \item Inverse
- \item Determinant
- \end{itemize}
- \item Solving Equations
- \begin{itemize}
- \item System of Linear equations
- \item Polynomials
- \item Non-linear equations
- \end{itemize}
- \item Integration
- \begin{itemize}
- \item Quadrature
- \item ODEs
- \end{itemize}
-\end{enumerate}
-\section{A Glimpse of Scipy functions}
-
-This section gives a brief overview of the tasks that are going to be
-performed using Scipy, in future classes of this course.
-
-\subsection{Matrix Operations}
-
-Let $\mathbf{A}$ be the matrix
-\(
-\begin{bmatrix}
-1 &3 &5\\
-2 &5 &1\\
-2 &3 &8
-\end{bmatrix}
-\)
-
-To input $\mathbf{A}$ matrix into python, we do the following in
-\texttt{ipython}\footnote{\texttt{ipython} must be started with
- \texttt{-pylab} flag}\\
-
-\begin{lstlisting}
- In []: A = array([[1,3,5],[2,5,1],[2,3,8]])
-\end{lstlisting}
-
-\subsubsection{Inverse}
-
-The inverse of a matrix $\mathbf{A}$ is the matrix $\mathbf{B}$ such
-that $\mathbf{A}\mathbf{B} = \mathbf{I}$ where $\mathbf{I}$ is the
-identity matrix consisting of ones down the main diagonal. Usually
-$\mathbf{B}$ is denoted $\mathbf{B} = \mathbf{A}^{-1}$ . In SciPy, the
-matrix inverse of matrix $\mathbf{A}$ is obtained using
-
-\lstinline+inv(A)+.
-\begin{lstlisting}
- In []: inv(A)
- Out[]:
- array([[-1.48, 0.36, 0.88],
- [ 0.56, 0.08, -0.36],
- [ 0.16, -0.12, 0.04]])
-\end{lstlisting}
-
-\subsubsection{Determinant}
-
-The determinant of a square matrix $\mathbf{A}$ is denoted
-$\left|\mathbf{A}\right|$. Suppose $a_{ij}$ are the elements of the
-matrix $\mathbf{A}$ and let
-$\mathbf{M}_{ij}=\left|\mathbf{A}_{ij}\right|$ be the determinant of
-the matrix left by removing the $i^{th}$ row and $j^{th}$ column from
-$\mathbf{A}$. Then for any row $i$
-
- \[ \left|\mathbf{A}\right|=\sum_{j}\left(-1\right)^{i+j}a_{ij}\mathbf{M}_{ij} \]
-
-This is a recursive way to define the determinant where the base case
-is defined by accepting that the determinant of a $1\times1$ matrix is
-the only matrix element. In SciPy the determinant can be calculated
-with $det$ . For example, the determinant of
-
- \[ \mathbf{A}=\begin{bmatrix} 1 & 3 & 5\\ 2 & 5 & 1\\ 2 & 3 & 8\end{bmatrix}\]
-
-is
-
- \begin{eqnarray*}
- |\mathbf{A}| & = & 1\begin{vmatrix} 5 & 1\\ 3 & 8\end{vmatrix}
- -3\begin{vmatrix} 2 & 1\\ 2 & 8\end{vmatrix}
- +5\begin{vmatrix}2 & 5\\ 2 & 3\end{vmatrix}\\
- & = & 1(5\cdot8-3\cdot1)-3(2\cdot8-2\cdot1)+5(2\cdot3-2\cdot5)=-25
- \end{eqnarray*}
-
-In SciPy, this is computed as shown below
-
-\begin{lstlisting}
- In []: A = array([[1, 3, 5], [2, 5, 1], [2, 3, 8]])
- In []: det(A)
- Out[]: -25.0
-\end{lstlisting}
-
-\subsection{Solving Equations}
-
-\subsubsection{Linear Equations}
-
-Solving linear systems of equations is straightforward using the scipy
-command \lstinline+solve+. This command expects an input matrix and a
-right-hand-side vector. The solution vector is then computed. An
-option for entering a symmetrix matrix is offered which can speed up
-the processing when applicable. As an example, suppose it is desired
-to solve the following simultaneous equations:
-
- \begin{eqnarray} x+3y+5z & = & 10\\ 2x+5y+z & = & 8\\ 2x+3y+8z & = & 3\end{eqnarray}
-
-We could find the solution vector using a matrix inverse:
-
- \[ \left[\begin{array}{c} x\\ y\\ z\end{array}\right]=\left[\begin{array}{ccc} 1 & 3 & 5\\ 2 & 5 & 1\\ 2 & 3 & 8\end{array}\right]^{-1}\left[\begin{array}{c} 10\\ 8\\ 3\end{array}\right]=\frac{1}{25}\left[\begin{array}{c} -232\\ 129\\ 19\end{array}\right]=\left[\begin{array}{c} -9.28\\ 5.16\\ 0.76\end{array}\right] \]
-
-However, it is better to use the solve command which can be faster and
-more numerically stable. In this case it however gives the same
-answer.
-
-\begin{lstlisting}
- In []: A = array([[1, 3, 5], [2, 5, 1], [2, 3, 8]])
- In []: b = array([[10], [8], [3]])
- In []: dot(inv(A), b)
- Out[]:
- array([[-9.28],
- [ 5.16],
- [ 0.76]])
-
- In []: solve(A,b)
- Out[]:
- array([[-9.28],
- [ 5.16],
- [ 0.76]])
-\end{lstlisting}
-
-\subsubsection{Polynomials}
-
-Solving a polynomial is straightforward in scipy using the
-\lstinline+roots+ command. It expects the coefficients of the
-polynomial in their decreasing order. For example, let's find the
-roots of $x^3 - 2x^2 - \frac{1}{2}x + 1$ are $2$, $\sqrt{2}$ and
-$-\sqrt{2}$. This is easy to see.
-
-\begin{align*}
-x^3 - 2x^2 - \frac{1}{2}x + 1 = 0\\
-x^2(x-2) - \frac{1}{2}(x-2) = 0\\
-(x-2)(x^2 - \frac{1}{2}) = 0\\
-(x-2)(x - \frac{1}{\sqrt{2}})(x + \frac{1}{\sqrt{2}}) = 0
-\end{align*}
-
-We do it in scipy as shown below:
-\begin{lstlisting}
- In []: coeff = array([1, -2, -2, 4])
- In []: roots(coeff)
-\end{lstlisting}
-
-\subsubsection{Non-linear Equations}
-
-To find a root of a set of non-linear equations, the command
-\lstinline+fsolve+ is needed. For example, the following example finds
-the roots of the single-variable transcendental equation
-
- \[ x+2\cos\left(x\right)=0,\]
-
-and the set of non-linear equations
-
- \begin{align}
- x_{0}\cos\left(x_{1}\right) &= 4,\\
- x_{0}x_{1}-x_{1} &= 5
- \end{align}
-
-The results are $x=-1.0299$ and $x_{0}=6.5041,\, x_{1}=0.9084$ .
-
-\begin{lstlisting}
-In []: def func(x):
- ...: return x + 2*cos(x)
-
-In []: def func2(x):
- ...: out = [x[0]*cos(x[1]) - 4]
- ...: out.append(x[1]*x[0] - x[1] - 5)
- ...: return out
-
-In []: from scipy.optimize import fsolve
-In []: x0 = fsolve(func, 0.3)
-In []: print x0
--1.02986652932
-
-In []: x02 = fsolve(func2, [1, 1])
-In []: print x02
-[ 6.50409711 0.90841421]
-\end{lstlisting}
-
-\subsection{Integration}
-% To be done in the lab.
-\subsubsection{Quadrature}
-
-The function \texttt{quad} is provided to integrate a function of one
-variable between two points. The points can be $\pm\infty$ ($\pm$
-\texttt{inf}) to indicate infinite limits. For example, suppose you
-wish to integrate the expression $e^{\sin(x)}$ in the interval
-$[0,2\pi]$, i.e. $\int_0^{2\pi}e^{\sin(x)}dx$, it could be computed
-using
-
-\begin{lstlisting}
-In []: def func(x):
- ...: return exp(sin(x))
-
-In []: from scipy.integrate import quad
-In []: result = quad(func, 0, 2*pi)
-In []: print result
-(7.9549265210128457, 4.0521874164521979e-10)
-\end{lstlisting}
-
-\subsubsection{ODE}
-
-We wish to solve an (a system of) Ordinary Differential Equation. For
-this purpose, we shall use \lstinline{odeint}. As an illustration, let
-us solve the ODE
-
-\begin{align}
- \frac{dy}{dt} = ky(L-y)\\
- L = 25000,\,k = 0.00003,\,y(0) = 250 \nonumber
-\end{align}
-
-We solve it in scipy as shown below.
-
-\begin{lstlisting}
-In []: from scipy.integrate import odeint
-In []: def f(y, t):
- ...: k, L = 0.00003, 25000
- ...: return k*y*(L-y)
- ...:
-In []: t = linspace(0, 12, 60)
-In []: y0 = 250
-In []: y = odeint(f, y0, t)
-\end{lstlisting}
-
-Note: To solve a system of ODEs, we need to change the function to
-return the right hand side of all the equations and the system and the
-pass the required number of initial conditions to the
-\lstinline{odeint} function.
-
-\appendix
-
-\section{Plotting using Pylab}\label{mpl}
-
-The following piece of code, produces the plot in Figure \ref{fig:sin}
-using \texttt{pylab}\cite{pylab} in \texttt{ipython}\footnote{start
- \texttt{ipython} with \texttt{-pylab} flag}\cite{ipy}
-
-\begin{lstlisting}
-In []: x = linspace(0, 2*pi, 50)
-In []: plot(x, sin(x))
-In []: title('Sine Curve between 0 and $\pi$')
-In []: legend(['sin(x)'])
-\end{lstlisting}
-
-\begin{figure}[h!]
- \begin{center}
- \includegraphics[scale=0.4]{sine}
- \end{center}
- \caption{Sine curve}
- \label{fig:sin}
-\end{figure}
-
-
-
-\begin{thebibliography}{9}
- \bibitem{scipy}
- Eric Jones and Travis Oliphant and Pearu Peterson and others,
- \emph{SciPy: Open source scientific tools for Python}, 2001 -- ,
- \url{http://www.scipy.org/}
-
- \bibitem{pylab}
- John D. Hunter, ``Matplotlib: A 2D Graphics Environment,''
- \emph{Computing in Science and Engineering}, vol. 9, no. 3,
- pp. 90-95, May/June 2007, doi:10.1109/MCSE.2007.55
-
- \bibitem{ipy}
- Fernando Perez, Brian E. Granger, ``IPython: A System for
- Interactive Scientific Computing,'' \emph{Computing in Science and
- Engineering}, vol.~9, no.~3, pp.~21-29, May/June 2007,
- doi:10.1109/MCSE.2007.53.
-
-\end{thebibliography}
-\end{document}