Curve fitting example 1

Contents

find speed: fit data with linear function y = c1*1 + c2*t

We assume a car is driving with constant speed. In order to find the speed we measure the position y at four t-values.

                         % given data:
t = [0;1;2;3];           %   t-values
y = [1;1;2;4];           %   y-values

data = [t,y]             % table of given t and y values
plot(t,y,'o')            % plot given data points
xlabel('t');ylabel('y')
grid on; axis equal; title('given data points')

A = [t.^0,t]             % matrix A
data =
     0     1
     1     1
     2     2
     3     4
A =
     1     0
     1     1
     1     2
     1     3

Solve normal equations

The normal equations are a 2 by 2 linear system.

Result: The best least squares fit is y = 0.5 + 1*t, so the estimated speed is 1.

M = A'*A
g = A'*y
c = M\g

tp = (-0.4:.1:3.4)';     % t-values for plotting curve
yp = [tp.^0,tp]*c;       % y-values for fitted curve

plot(t,y,'o',tp,yp)      % plot data points together with fitted curve
xlabel('t');ylabel('y')
grid on; axis equal; title('given data points with fitted curve')
M =
     4     6
     6    14
g =
     8
    17
c =
    0.5000
    1.0000

Check residual vector

Find the norm of the residual vector r. Check that r is really orthogonal on the columns of the matrix A.

r = A*c - y              % residual vector
norm_r = norm(r)         % norm
A'*r                     % dot product of columns of A with r
r =
   -0.5000
    0.5000
    0.5000
   -0.5000
norm_r =
     1
ans =
     0
     0