% data:
load('lin_regression.mat')

% compute mean squared error for a range of slopes and intercepts:
slopes = -5:0.25:5;
intercepts = -30:1:30;
errors = zeros(length(slopes), length(intercepts));
for i = 1:length(slopes)
    for j = 1:length(intercepts)
	      errors(i,j) = lsqError([slopes(i), intercepts(j)], x, y);
    end
end

% minimum of error surface:
[me, mi] = min(errors(:));
[ia, ib] = ind2sub(size(errors), mi);
eparams = [errors(ia), errors(ib)];

% gradient descent:
pstart = [-2. 10.];
[params, errors] = descent(x, y, pstart);

% comparison:
fprintf('descent: %6.3f  %6.3f\n', params(1), params(2));
fprintf('errors:  %6.3f  %6.3f\n', eparams(1), eparams(2));