% lsqfitx.m by: Edward T Peltzer, MBARI % revised: 2007 Apr 28. % % M-file to calculate a "MODEL-1" least squares fit. % % The line is fit by MINIMIZING the residuals in X only. % % The equation of the line is: Y = mx * X + bx. % % Equations are modified from those in Bevington & Robinson (1992) % Data Reduction and Error Analysis for the Physical Sciences, 2nd Ed." % pp: 104, 108-109, 199. % % Data are input and output as follows: % % [mx,bx,rx,smx,sbx] = lsqfitx(X,Y) % % X = x data (vector) % Y = y data (vector) % % mx = slope % bx = y-intercept % rx = correlation coefficient % smx = standard deviation of the slope % sbx = standard deviation of the y-intercept function [mx,bx,rx,smx,sbx]=lsqfitx(X,Y) % Determine the size of the vector n = length(X); % Calculate the sums Sx = sum(X); Sy = sum(Y); Sx2 = sum(X.^2); Sxy = sum(X.*Y); Sy2 = sum(Y.^2); % Calculate re-used expressions num = n * Sxy - Sy * Sx; den = n * Sy2 - Sy^2; % Calculate m, a, rx, s2, sm, and sb mxi = num / den; a = (Sy2 * Sx - Sy * Sxy) / den; rx = num / (sqrt(den) * sqrt(n * Sx2 - Sx^2)); diff = X - a - mxi .* Y; s2 = sum(diff .* diff) / (n-2); sm = sqrt(n * s2 / den); sa = sqrt(Sy2 * s2 / den); % Transpose coefficients mx = 1 / mxi; bx = -a / mxi; smx = mx * sm / mxi; sbx = abs(sa / mxi);