lstsq.rst
author amit
Wed, 13 Oct 2010 17:32:23 +0530
changeset 323 e675f9208b91
parent 221 7cd975ff5f0d
permissions -rw-r--r--
Removing old redundant files.

.. Author              : Nishanth
   Internal Reviewer 1 : Puneeth
   Internal Reviewer 2 : 
   External Reviewer   :

Hello friends and welcome to the tutorial on Least Square Fit

{{{ Show the slide containing title }}}

{{{ Show the slide containing the outline slide }}}

In this tutorial, we shall look at generating the least square fit line for a
given set of points.

First let us have a look at the problem.

{{{ Show the slide containing problem statement. }}}

We have an input file generated from a simple pendulum experiment.

It contains two columns of data. The first column is the length of the
pendulum and the second is the corresponding time period of the pendulum.

As we know, the square of time period of a pendulum is directly proportional to
its length, we shall plot l vs t^2 and verify this. 

#[Puneeth:] removed the explanation about loadtxt and unpack
 option. It's been done in another LO already. simple dependency 
 should work?

To read the input file and parse the data, we are going to use the
loadtxt function.  Type 
::

    l, t = loadtxt("/home/fossee/pendulum.txt", unpack=True)
    l
    t

We can see that l and t are two sequences containing length and time values
correspondingly.

Let us first plot l vs t^2. Type
::

    tsq = t * t
    plot(l, tsq, 'bo')

{{{ switch to the plot window }}}

#[Puneeth:] Moved explanation of least square fit here. seems more
apt. 

We can see that there is a visible linear trend, but we do not get a
straight line connecting them. We shall, therefore, generate a least
square fit line.

{{{ show the slide containing explanation on least square fit }}}

As shown in the slide, we are first going to generate the two matrices
tsq and A. Then we are going to use the ``lstsq`` function to find the
values of m and c.

let us now generate the A matrix with l values.
We shall first generate a 2 x 90 matrix with the first row as l values and the
second row as ones. Then take the transpose of it. Type
::

    inter_mat = array((l, ones_like(l)))
    inter_mat

We see that we have intermediate matrix. Now we need the transpose. Type
::

    A = inter_mat.T
    A

Now we have both the matrices A and tsq. We only need to use the ``lstsq``
Type
::

    result = lstsq(A, tsq)

The result is a sequence of values. The first item in this sequence,
is the matrix p i.e., the values of m and c. Hence, 
::

    m, c = result[0]
    m
    c

Now that we have m and c, we need to generate the fitted values of t^2. Type
::

    tsq_fit = m * l + c
    plot(l, tsq, 'bo')
    plot(l, tsq_fit, 'r')

We get the least square fit of l vs t^2

{{{ Pause here and try out the following exercises }}}

%% 2 %% change the label on y-axis to "y" and save the lines of code
        accordingly

{{{ continue from paused state }}}

{{{ Show summary slide }}}

This brings us to the end of the tutorial.
we have learnt

 * how to generate a least square fit

{{{ Show the "sponsored by FOSSEE" slide }}}

#[Nishanth]: Will add this line after all of us fix on one.
This tutorial was created as a part of FOSSEE project, NME ICT, MHRD India

Hope you have enjoyed and found it useful.
Thank you

Questions
=========

 1. What does ones_like([1, 2, 3]) produce

   a. array([1, 1, 1])
   #. [1, 1, 1]
   #. [1.0, 1.0, 1.0]
   #. Error
   
 2. What does ones_like([1.2, 3, 4, 5]) produce

   a. [1.2, 3, 4, 5]
   #. array([1.0, 1.0, 1.0, 1.0])
   #. array([1, 1, 1, 1])
   #. array([1.2, 3, 4, 5])

 3. What is the shape of the