summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPuneeth Chaganti2009-10-14 16:34:30 +0530
committerPuneeth Chaganti2009-10-14 16:34:30 +0530
commitbcb60db639cc54d41944a066b178ffdd39646343 (patch)
treec87d77f2efc3303650fd519387203f82afbb17c1
parent181833b5c2006a82e91f8a4745848fd6fab79914 (diff)
downloadworkshops-more-scipy-bcb60db639cc54d41944a066b178ffdd39646343.tar.gz
workshops-more-scipy-bcb60db639cc54d41944a066b178ffdd39646343.tar.bz2
workshops-more-scipy-bcb60db639cc54d41944a066b178ffdd39646343.zip
Added Least Square Fitting to Session3.
-rw-r--r--day1/session3.tex102
1 files changed, 101 insertions, 1 deletions
diff --git a/day1/session3.tex b/day1/session3.tex
index 308b40a..2f23a5a 100644
--- a/day1/session3.tex
+++ b/day1/session3.tex
@@ -28,6 +28,7 @@
\usepackage{ae,aecompl}
\usepackage{mathpazo,courier,euler}
\usepackage[scaled=.95]{helvet}
+\usepackage{amsmath}
\definecolor{darkgreen}{rgb}{0,0.5,0}
@@ -147,8 +148,107 @@ Machinery Required -
\end{itemize}
\end{frame}
-\begin{frame}
+\begin{frame}[fragile]
+\frametitle{Reading pendulum.txt}
+\begin{itemize}
+ \item The file has two columns
+ \item Column1 - L; Column2 - T
+\end{itemize}
+\begin{lstlisting}
+In []: L = []
+In []: T = []
+In []: for line in open('pendulum.txt'):
+ .... len, t = line.split()
+ .... L.append(float(len))
+ .... T.append(float(t))
+\end{lstlisting}
+We now have two lists L and T
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Calculating T^2}
+\begin{itemize}
+\item Each element of the list T must be squared
+\item Iterating over each element of the list works
+\item But very slow \ldots
+\item Instead, we use arrays
+\end{itemize}
+\begin{lstlisting}
+In []: array(L)
+In []: T = array(T)
+In []: Tsq = T*T
+In []: plot(L, Tsq, 'o')
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
\frametitle{Arrays}
+\begin{itemize}
+\item T is now a \typ{numpy array}
+\item \typ{numpy} arrays are very efficient and powerful
+\item Very easy to perform element-wise operations
+\item \typ{+, -, *, /, \%}
+\item More about arrays later
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Least Square Polynomial}
+\begin{enumerate}
+\item $T^2 = \frac{4\pi^2}{g}L$
+\item $T^2$ and $L$ have a linear relationship
+\item We find an approximate solution to $Ax = y$, where A is the Van der Monde matrix to get coefficients of the least squares fit line.
+\end{enumerate}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Van der Monde Matrix}
+Van der Monde matrix of order M
+\begin{equation*}
+ \begin{bmatrix}
+ l_1^{M-1} & \ldots & l_1 & 1 \\
+ l_2^{M-1} & \ldots &l_2 & 1 \\
+ \vdots & \ldots & \vdots & \vdots\\
+ l_N^{M-1} & \ldots & l_N & 1 \\
+ \end{bmatrix}
+\end{equation*}
+\begin{lstlisting}
+In []: A=vander(L,2)
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Least Square Fit Line}
+\begin{itemize}
+\item We use the \typ{lstsq} function of pylab
+\item It returns the
+\begin{enumerate}
+\item Least squares solution
+\item Sum of residues
+\item Rank of matrix A
+\item Singular values of A
+\end{enumerate}
+\end{itemize}
+\begin{lstlisting}
+coeffs, res, rank, sing = lstsq(A,Tsq)
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Least Square Fit Line \ldots}
+\begin{itemize}
+\item Use the poly1d function of pylab, to create a function for the line equation using the coefficients obtained
+\begin{lstlisting}
+p=poly1d(coeffs)
+\end{lstlisting}
+\item Get new T^2 values using the function \typ{p} obtained
+\begin{lstlisting}
+Tline = p(L)
+\end{lstlisting}
+\item Now plot Tline vs. L, to get the Least squares fit line.
+\begin{lstlisting}
+plot(L, Tline)
+\end{lstlisting}
\end{frame}
\end{document}