% x, y, slopes, and intercepts from exercise 8.3 slopes = -5:0.25:5; intercepts = -30:1:30; error_surface = zeros(length(slopes), length(intercepts)); for i = 1:length(slopes) for j = 1:length(intercepts) error_surf(i,j) = meanSquaredError([slopes(i), intercepts(j)], x, y); end end error_surface = zeros(length(slopes), length(intercepts)); gradient_m = zeros(size(error_surface)); gradient_b = zeros(size(error_surface)); for i = 1:length(slopes) for j = 1:length(intercepts) error_surface(i,j) = meanSquaredError([slopes(i), intercepts(j)], x, y); grad = meanSquaredGradient([slopes(i), intercepts(j)], x, y); gradient_m(i,j) = grad(1); gradient_b(i,j) = grad(2); end end figure() hold on [N, M] = meshgrid(intercepts, slopes); %surface(M, N, error_surface, 'FaceAlpha', 0.5); contour(M, N, error_surface, 50); quiver(M, N, gradient_m, gradient_b) 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')