linear least square problems.
X=lsq(A,B [,tol])
:A Real or complex (m x n) matrix : :B real or complex (m x p) matrix : :tol positive scalar, used to determine the effective rank of A
(defined as the order of the largest leading triangular submatrix R11 in the QR factorization with pivoting of A, whose estimated condition number <= 1/tol. The tol default value is set to sqrt(%eps).
: :X real or complex (n x p) matrix :
X=lsq(A,B) computes the minimum norm least square solution of the equation A*X=B, while X=A B compute a least square solution with at at most rank(A) nonzero components per column.
lsq function is based on the LApack functions DGELSY for real matrices and ZGELSY for complex matrices.
//Build the data
x=(1:10)';
y1=3*x+4.5+3*`rand`_(x,'normal');
y2=1.8*x+0.5+2*`rand`_(x,'normal');
`plot2d`_(x,[y1,y2],[-2,-3])
//Find the linear regression
A=[x,`ones`_(x)];B=[y1,y2];
X=lsq(A,B);
y1e=X(1,1)*x+X(2,1);
y2e=X(1,2)*x+X(2,2);
`plot2d`_(x,[y1e,y2e],[2,3])
//Difference between lsq(A,b) and A\b
A=`rand`_(4,2)*`rand`_(2,3);//a rank 2 matrix
b=`rand`_(4,1);
X1=lsq(A,b)
X2=A\b
[A*X1-b, A*X2-b] //the residuals are the same