%----------------------------------------------------- % % Conversion of a script into a function, from the % Matlab script that uses linear least squares to % find hill heights from multiple observations. % % % From ground level, % A is measured 1236 meters high % B is measured 1941 meters high % C is measured 2417 meters high % % From A, B is 711 meters higher % From A, C is 1177 meters higher % From B, C is 475 meters higher % % % Created : Wed 11 Jan 2009 % Modified: 11 Feb 2009 % %----------------------------------------------------- function [h, Y, I] = experiment_least_squares(A, b) [number_of_observations, number_of_parameters] = size(A); h = A\b; s = sprintf('Best least squares fit for data is A = %g, B = %g , C = %g', ... h(1), h(2), h(3)); disp(s); residual = b - A*h; % Debugging statements for horzcat error: % temp1 = num2str(residual) % temp2 = 'Residual vector is ' display(['Residual vector is ', num2str(residual')]); plot(1:number_of_observations, residual, 'r-',... 1:number_of_observations, residual, 'b*'); title('Residual Vector'); xlabel('Residual Vector Component'); ylabel('Residual Vector Values'); figure; plot(1:number_of_observations, abs(residual), 'r-',... 1:number_of_observations, abs(residual), 'b*'); title('Absolute Values of Residual Vector'); xlabel('Residual Vector Component'); ylabel('Residual Vector Values'); [Y, I] = max(abs(residual)); s = sprintf('Worst outlier is observation %s', num2str(I)); disp(s); return