Minor edits.
authorSantosh G. Vattam <vattam.santosh@gmail.com>
Sat, 17 Apr 2010 15:51:43 +0530
changeset 81 2eff0ebac2dc
parent 79 3893bac8e424
child 82 c7abfeddc958
Minor edits.
least-squares.org
solving-equations.org
--- a/least-squares.org	Sat Apr 17 12:50:42 2010 +0530
+++ b/least-squares.org	Sat Apr 17 15:51:43 2010 +0530
@@ -21,26 +21,34 @@
     In this tutorial we shall look at obtaining the least squares fit
     of a given data-set. For this purpose, we shall use the same
     pendulum data that we used in the tutorial on plotting from files.
-    Hope you have the file with you. 
 
     To be able to follow this tutorial comfortably, you should have a
     working knowledge of arrays, plotting and file reading. 
 
     A least squares fit curve is the curve for which the sum of the
     squares of it's distance from the given set of points is
-    minimum. We shall use the lstsq function to obtain the least
-    squares fit curve. 
+    minimum. 
+
+    Previously, when we plotted the data from pendulum.txt we got a 
+    scatter plot of points as shown. 
 
     In our example, we know that the length of the pendulum is
-    proportional to the square of the time-period. Therefore, we
-    expect the least squares fit curve to be a straight line. 
+    proportional to the square of the time-period. But when we plot
+    the data using lines we get a distorted line as shown. What
+    we expect ideally, is something like the redline in this graph. 
+    From the problem we know that L is directly proportional to T^2.
+    But experimental data invariably contains errors and hence does
+    not produce an ideal plot. The best fit curve for this data has 
+    to be a linear curve and this can be obtained by performing least
+    square fit on the data set. We shall use the lstsq function to
+    obtain the least squares fit curve. 
 
     The equation of the line is of the form T^2 = mL+c. We have a set
     of values for L and the corresponding T^2 values. Using this, we
     wish to obtain the equation of the straight line. 
 
     In matrix form the equation is represented as shown, 
-    Tsq = A.p where Tsq is an NX1 matrix, and A is an NX2 as shown.
+    Tsq = A.p where Tsq is an NX1 matrix, and A is an NX2 matrix as shown.
     And p is a 2X1 matrix of the slope and Y-intercept. In order to 
     obtain the least square fit curve we need to find the matrix p
 
@@ -65,9 +73,14 @@
     A = array([l, ones_like(l)])
 
     As we have seen in a previous tutorial, ones_like() gives an array similar
-    in shape to the given array, in this case l, with all the elements as 1.
+    in shape to the given array, in this case l, with all the elements as 1. 
+    Please note, this is how we create an array from an existing array.
 
-    A = A.T to get the transpose of the given array.
+    Let's now look at the shape of A. 
+    A.shape
+    This is an 2X90 matrix. But we need a 90X2 matrix, so we shall transpose it.
+
+    A = A.T
     
     Type A, to confirm that we have obtained the desired array. 
     A
@@ -88,14 +101,15 @@
     line, we have noted before. T^2 = mL + c. 
 
     Tline = coef[0]*l + coef[1]
-    plot(l, Tline)
+    plot(l, Tline, 'r')
 
     Also, it would be nice to have a plot of the points. So, 
     plot(l, tsq, 'o')
 
     This brings us to the end of this tutorial. In this tutorial,
     you've learnt how to obtain a least squares fit curve for a given
-    set of points. 
+    set of points using lstsq. There are other curve fitting functions
+    available in Pylab such as polyfit.
 
     Hope you enjoyed it. Thanks. 
 
--- a/solving-equations.org	Sat Apr 17 12:50:42 2010 +0530
+++ b/solving-equations.org	Sat Apr 17 15:51:43 2010 +0530
@@ -9,12 +9,12 @@
 *** Script
     Welcome. 
     
-    In this tutorial we shall look at solving linear equations, roots
-    of polynomials and other non-linear equations. In the process, we
-    shall look at defining functions. 
+    In this tutorial we shall look at solving linear equations, obtaining
+    roots of polynomial and other non-linear equations. In the process, we
+    shall look at defining functions as well. 
 
     We would be using concepts related to arrays which we have covered
-    in previous session
+    in a previous tutorial.
 
     Let's begin with solving linear equations. 
     {show a slide of the equations}
@@ -23,7 +23,7 @@
     be in the form of matrices to solve the system of linear equations. 
 
     Lets start ipython -pylab interpreter.    
-    Then we begin by entering the coefficients and the constants as
+    We begin by entering the coefficients and the constants as
     matrices. 
 
     In []: A = array([[3,2,-1],
@@ -45,9 +45,9 @@
     In []: Ax = dot(A, x)
     In []: Ax
 
-    The result Ax, doesn't look exactly like b, but if you carefully
-    observe, you will see that it is the same as b. To save yourself
-    this trouble, you can use the allclose function. 
+    The result Ax, doesn't look exactly like b, but if we carefully
+    observe, we will see that it is the same as b. To save ourself
+    all this trouble, we can use the allclose function. 
 
     allclose checks if two matrices are close enough to each other
     (with-in the specified tolerance level). Here we shall use the
@@ -58,30 +58,32 @@
     x, and b are close enough. This validates our solution x. 
 
     Let's move to finding the roots of polynomials. We shall use the
-    roots function to calculate the roots of the polynomial x^2-5x+6. 
+    roots function to calculate the roots of a polynomial. 
 
     The function requires an array of the coefficients of the
     polynomial in the descending order of powers. 
+    Consider the polynomial x^2-5x+6
     
     In []: coeffs = [1, -5, 6]
     In []: roots(coeffs)
-    As you can see, roots returns the result in an array. 
-    # It even works for polynomials with imaginary solutions.
-    # roots([1, 1, 1])
+    As we can see, roots returns the result in an array. 
+    It even works for polynomials with imaginary roots.
+    roots([1, 1, 1])
 
-    To find the roots of non linear equations, we use the fsolve
-    function. We shall use the function sin(x)+cos^2(x) as our
-    function, in this tutorial. This function is not part of pylab
-    package which we import during starting, so we will have to 
-    import it. It is part of scipy package.
+    What if I want the solution of non linear equations?
+    For that we use the fsolve function. We shall use the function
+    sin(x)+cos^2(x) as our function, in this tutorial. This function 
+    is not part of pylab package which we import at the beginning,
+    so we will have to import it. It is part of scipy package. Let's
+    import it using.
 
     In []: from scipy.optimize import fsolve
 
-    Now, let's look at the documentation of fsolve using fsolve?    
+    Now, let's look at the documentation of fsolve by typing fsolve?    
     
     In []: fsolve?
 
-    As mentioned in docs the first argument, func, is a python 
+    As mentioned in documentation the first argument, func, is a python 
     function that takes atleast one argument. So, we should now 
     define a python function for the given mathematical expression
     sin(x)+cos^2(x). 
@@ -98,17 +100,17 @@
     ...        return sin(x)+cos(x)*cos(x)
     ...
     ...
-    hit return thrice for coming out of function definition. 
+    hit the enter key thrice for coming out of function definition. 
    
     def, is a key word in python that tells the interpreter that a
     function definition is beginning. f, here, is the name of the
     function and x is the lone argument of the function. The whole
     definition of the function is done with in an indented block same
-    as for loops and conditional statements we have used in our 
-    earlier sessions. Our function f has just one line in it's 
+    as the loops and conditional statements we have used in our 
+    earlier tutorials. Our function f has just one line in it's 
     definition. 
 
-    You can test your function, by calling it with an argument for
+    We can test our function, by calling it with an argument for
     which the output value is known, say x = 0. We can see that
     sin(x) + cos^2(x) has a value of 1, when x = 0. 
 
@@ -126,8 +128,7 @@
     fsolve has returned a root of sin(x)+cos^2(x) that is close to 0. 
 
     That brings us to the end of this tutorial. We have covered solution
-    of linear equations, finding roots of polynomials and other 
-    non-linear
+    of linear equations, finding roots of polynomials and non-linear
     equations. We have also learnt how to define functions and call
     them.