next up previous contents
Next: 6. Real programming Up: 5. Data analysis Previous: 5.2 Linear regression   Contents

5.3 Fitting with MATLAB

MATLAB has built in routines for fitting functions to data. The easiest to use is polyfit. Go to the index in the help menu and look up polyfit and see how it works. Then try the following.
% Simulate position vs. time data for a rolling ball
close all; clear all;
randn('state',0); % Reset the random number generator
x = 1:9;  % define the intervals for taking measurments
vox = 0.5;    % initial velocity in the x direction
t = x/vox;    % compute t for ideal case
t = t+.5*randn([size(x) 1]); % add some noise
plot(x,t,'o') % plot the data and add labels
ylabel('time (sec)')
xlabel('position (m)')
title('Time vs. position for a rolling ball')
axis([0 9 0 20])
hold on  % keep the first graph up while we plot the fitted line

% Fit a line thru the data and plot the result over the data plot
temp = polyfit(x,t,1); % least squares fitting to a line
a1 = temp(2) % y-intercept of the fitted line
a2 = temp(1) % slope of fitted lines
fit = a1+a2*x;
plot(x,fit)
axis([0 9 0 20])
hold on
Rerun this script several times after commenting out the third line where the random generator is reinitialized. Count how many data points lie above the line and how many lie below each time. What do you find? Do you suppose we can come up with a function that fits even better than this straight line? What about a quadratic? Or an eighth order polynomial? Since these functions are more flexible (have more parameters), they should be able to fit the data with a smaller $\chi^2$. Run the previous script again if the figure window isn't still open and then try an eighth order polynomial fit.
% Try a higher order fit
a = polyfit(x,t,8);
new_x = 0:.1:10;
new_t = polyval(a,new_x);
plot(new_x,new_t)
axis([0 9 0 20])
As you can see this new function passes exactly through each data point and therefore $\chi^2=0$. Which of the curves do you think best represents the physics of the situation the best? Why? This is a simple example of how the scientist needs to bring a little common sense and intuition to problems of fitting and statistical analysis.
next up previous contents
Next: 6. Real programming Up: 5. Data analysis Previous: 5.2 Linear regression   Contents
Gus Hart 2005-01-28