lsei {limSolve}R Documentation

Least Squares with Equalities and Inequalities

Description

Solves an lsei inverse problem (Least Squares with Equality and Inequality constraints)

min(||Ax-b||^2)

subject to

Ex=f

Gx>=h

uses either subroutine lsei (FORTRAN) from the LINPACK package, or solve.QP from R-package quadprog
In case the equality constraints Ex=f cannot be satisfied, a generalized inverse solution residual vector length is obtained for f-Ex.
This is the minimal length possible for ||f-Ex||^2.

Usage

lsei(A=NULL, B=NULL, E=NULL, F=NULL, G=NULL, H=NULL, 
Wx=NULL, Wa=NULL, type=1, tol=sqrt(.Machine$double.eps),
tolrank=NULL, fulloutput=FALSE, verbose=TRUE)

Arguments

A numeric matrix containing the coefficients of the quadratic function to be minimised, ||Ax-B||^2; if the columns of A have a names attribute, they will be used to label the output
B numeric vector containing the right-hand side of the quadratic function to be minimised
E numeric matrix containing the coefficients of the equality constraints, Ex=F; if the columns of E have a names attribute, and the columns of A do not, they will be used to label the output
F numeric vector containing the right-hand side of the equality constraints
G numeric matrix containing the coefficients of the inequality constraints, Gx>=H; if the columns of G have a names attribute, and the columns of A and E do not, they will be used to label the output
H numeric vector containing the right-hand side of the inequality constraints
Wx numeric vector with weighting coefficients of unknowns (length = number of unknowns)
Wa numeric vector with weighting coefficients of the quadratic function (Ax-B) to be minimised (length = number of number of rows of A)
type integer code determining algorithm to use 1=lsei , 2=solve.QP from R-package quadprog (see note)
tol tolerance (for singular value decomposition, equality and inequality constraints)
tolrank Only if type = 1; if not NULL then tolrank should be a two-valued vector containing the rank determination tolerance for the equality constraint equations from (1st value) and for the reduced least squares equations (2nd value)
fulloutput if TRUE, also returns the covariance matrix of the solution and the rank of the equality constraints - only if type = 1
verbose logical to print error messages

Value

a list containing:

X vector containing the solution of the least squares problem.
residualNorm scalar, the sum of absolute values of residuals of equalities and violated inequalities
solutionNorm scalar, the value of the minimised quadratic function at the solution, i.e. the value of ||Ax-b||^2
IsError logical, TRUE if an error occurred
type the string "lsei", such that how the solution was obtained can be traced
covar covariance matrix of the solution; only returned if fulloutput = TRUE
RankEq rank of the equality constraint matrix.; only returned if fulloutput = TRUE
RankApp rank of the reduced least squares problem (approximate equations); only returned if fulloutput = TRUE

Note

See comments in the original code for more details; these comments are included in the ‘docs’ subroutine of the package

Author(s)

Karline Soetaert <k.soetaert@nioo.knaw.nl>

References

K. H. Haskell and R. J. Hanson, An algorithm for linear least squares problems with equality and nonnegativity constraints, Report SAND77-0552, Sandia Laboratories, June 1978.
K. H. Haskell and R. J. Hanson, Selected algorithms for the linearly constrained least squares problem - a users guide, Report SAND78-1290, Sandia Laboratories,August 1979.
K. H. Haskell and R. J. Hanson, An algorithm for linear least squares problems with equality and nonnegativity constraints, Mathematical Programming 21 (1981), pp. 98-118.
R. J. Hanson and K. H. Haskell, Two algorithms for the linearly constrained least squares problem, ACM Transactions on Mathematical Software, September 1982.
Berwin A. Turlach R and Andreas Weingessel (2007). quadprog: Functions to solve Quadratic Programming Problems.. R package version 1.4-11. S original by Berwin A. Turlach R port by Andreas Weingessel

See Also

ldei, linp,
solve.QR the original function from package quadprog

Examples

x <- 1:5
y <- c(9,8,6,7,5)
plot(x,y,main="Polynomial fitting, using lsei",cex=1.5,pch=16,
     ylim=c(4,10))
A <- cbind(rep(1,5),x)
B <- y
cf <- lsei(A,B)$X
abline(coef=cf)
A <- cbind(A,x^2)
cf <- lsei(A,B)$X
curve(cf[1]+cf[2]*x+cf[3]*x^2,add=TRUE,lty=2)
A <- cbind(A,x^3)
cf <- lsei(A,B)$X
curve(cf[1]+cf[2]*x+cf[3]*x^2+cf[4]*x^3,add=TRUE,lty=3)
A <- cbind(A,x^4)
cf <- lsei(A,B)$X
curve(cf[1]+cf[2]*x+cf[3]*x^2+cf[4]*x^3+cf[5]*x^4,add=TRUE,lty=4)
legend("bottomleft",c("1st-order","2nd-order","3rd-order","4th-order"),
       lty=1:4)

# example 2: equalities, approximate equalities and inequalities
A <- matrix(nrow=4,ncol=3,
            data=c(3,1,2,0,2,0,0,1,1,0,2,0))
B <- c(2,1,8,3)
E <- c(0,1,0)
F <- 3
G <- matrix(nrow=2, ncol=3, byrow=TRUE,
            data=c(-1,2,0,1,0,-1))
H <- c(-3,2)

lsei(E=E,F=F,A=A,B=B,G=G,H=H)
       

[Package limSolve version 1.3 Index]