summaryrefslogtreecommitdiff
path: root/least-squares.org
diff options
context:
space:
mode:
Diffstat (limited to 'least-squares.org')
-rw-r--r--least-squares.org34
1 files changed, 24 insertions, 10 deletions
diff --git a/least-squares.org b/least-squares.org
index 9cb0f1e..e4e9402 100644
--- a/least-squares.org
+++ b/least-squares.org
@@ -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.
+
+ 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 to get the transpose of the given array.
+ 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.