Code covered by the BSD License  

Highlights from
Analytical solution for Orthogonal Linear Least Squares in two dimensions

3.0
3.0 | 1 rating Rate this file 26 Downloads (last 30 days) File Size: 77.6 KB File ID: #22027
image thumbnail

Analytical solution for Orthogonal Linear Least Squares in two dimensions

by

Liber Eleutherios

 

08 Nov 2008 (Updated )

The function returns the Orthogonal Linear Least Squares estimate for parameters of line ax+by+c=0

| Watch this File

File Information
Description

ORTHLLS2D returns the Orthogonal Linear Least Squares estimate for parameters of line a x + b y + c = 0
function f = OrthLLS2D(x, y)

Inputs x and y must be real vectors of equal size.
Output f is the real vector [a b c] where a, b and c are the estimated parameters of the linear equation.

Since a more general function called LINORTFITN has already been submitted to File Exchange (ID number: 16800) in October 2007 by Mr. F. Carr, my file is supposed to be used as a brief introduction to the analytical problem in an extremely simple case.

Orthogonal Least Squares Estimate on a plane, in the simple case of a linear equation, is in fact a problem that can be easily solved analytically with no approximation (see pdf file for detailed explanation). Notice that in the general multidimensional case, an analytical solution may not exist (although Mr. Carr's function is an efficient approximation of the solution).

% ====================================================
% EXAMPLE: HOW TO USE THE FUNCTION
% ====================================================
Build two series, given the linear relation y = mx + q + error
T = 1000; % number of points
m = -1; % slope
q = 1; % intercept
x = randn(T, 1); % random x values
u = randn(T, 1); % random error
y = m * x + q + u; % y = mx + q + error
f = OrthLLS2D(x, y); % estimate [a, b, c] for equation ax + by + c = 0
plot(x, y, '.') % scatter plot for empirical points
hold on
plot(x, [ones(T,1) x] * [-f(3); -f(1)], '*r');% plot orthogonal linear least squares
b1 = regress(y, [ones(T,1) x]); % parameters of the ordinary least squares (y as a function of x)
b2 = regress(x, [ones(T,1) y]); % parameters of the ordinary least squares (x as a function of y)
plot(x, [ones(T,1) x] * b1, '.g'); % plot ordinary least squares (y as a function of x)
plot([ones(T,1) y] * b2, y, '.c'); % plot ordinary least squares (x as a function of y)

% ====================================================

See also LINORTFIT2, LINORTFITN.

Acknowledgements

Orthogonal Linear Regression inspired this file.

This file inspired Weighted Orthogonal Least Squares.

MATLAB release MATLAB 7 (R14)
MATLAB Search Path
/
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (3)
12 Jan 2015 Liber Eleutherios

Liber Eleutherios

Hi Royi, your remark is certainly correct. See LINORTFITN (FE16800 by F. Carr) for the general case.

My function is only meant to find the analytic solution to the 2D problem.

Comment only
12 Jan 2015 Royi Avital

Royi Avital

Hi,
I think it could be done much faster and easier using the SVD.

Comment only
30 Nov 2012 ln

ln

 
Updates
12 Jan 2015

minor edits

Contact us