% x, y, slopes, intercepts, ii, ss, and error_surface from exercise 8.3

qslopes = 1.0:0.5:4.0;
qintercepts = -150:50:150;
gradient_m = zeros(length(qintercepts), length(qslopes));
gradient_b = zeros(length(qintercepts), length(qslopes));
for i = 1:length(qintercepts)
    for j = 1:length(qslopes)
        grad = meanSquaredGradient(x, y, [qslopes(j), qintercepts(i)]);
        gradient_m(i,j) = grad(1);
        gradient_b(i,j) = grad(2);
    end
end

figure()
hold on
contour(ss, ii, error_surface, 70);
[qss, qii] = meshgrid(qslopes, qintercepts);
quiver(qss, qii, gradient_m, gradient_b, 0.01)
xlabel('Slope m')
ylabel('Intercept b')
zlabel('Mean squared error')
%set(gcf, 'paperunits', 'centimeters', 'papersize', [15, 10.5], ... 
%    'paperposition', [0., 0., 15, 10.5])
%saveas(gcf, 'error_gradient', 'pdf')