clear close all load('lin_regression.mat') ms = -1:0.5:5; ns = -10:1:10; position = [-2. 10.]; gradient = []; error = []; eps = 0.01; % claculate error surface error_surf = zeros(length(ms), length(ns)); for i = 1:length(ms) for j = 1:length(ns) error_surf(i,j) = lsqError([ms(i), ns(j)], x, y); end end figure() hold on [N, M] = meshgrid(ns, ms); surface(M,N, error_surf, 'FaceAlpha', 0.5); view(3) xlabel('slope') ylabel('intersection') zlabel('error') % do the descent while isempty(gradient) || norm(gradient) > 0.1 gradient = lsqGradient(position, x,y); error = lsqError(position, x, y); plot3(position(1), position(2), error, '.', 'color', 'red', 'markersize', 20) position = position - eps .* gradient; pause(0.05) end grid on set(gcf, 'paperunits', 'centimeters', 'papersize', [15, 15], ... 'paperposition', [0., 0., 15, 15]) saveas(gcf, 'gradient_descent', 'pdf')