On Mon Aug 24 Wang, Xue, Ph.D. Wang.Xue at mayo.edu wrote > I am looking for a R version of Matlab function lsqlin. I came across > R pracma package which has a lsqlin function. Compared with Matlab lsqlin, > the R version does not allow inequality constraints. > I am wondering if this functionality will be available in future. And also > like to get your opinion on which R package/function is the best for solving > least square minimization problem with linear inequality constraints. > Thanks very much for your time and attention!
Solving (linear) least-squares problems with linear inequality constraints is more difficult then one would expect. Inspecting the MATLAB code reveals that it employs advanced methods such as active-set (linear inequality constraints) and interior-point (for bounds constraints). Function nlsLM() in package *minpack.lm* supports bound constraints if that is sufficient for you. The same is true for *nlmrt*. Convex optimization might be a promising approach for linear inequality constraints, but there is no easy-to-handle convex solver in R at this moment. So the most straightforward way would be to use constrOptim(), that is optim with linear constraints. It requires a reasonable starting point, and keeping your fingers crossed that you are able to find such a point in the interior of the feasible region. I someone wants to try: Here is the example from the MATLAB "lsqlin" page: C <- matrix(c( 0.9501, 0.7620, 0.6153, 0.4057, 0.2311, 0.4564, 0.7919, 0.9354, 0.6068, 0.0185, 0.9218, 0.9169, 0.4859, 0.8214, 0.7382, 0.4102, 0.8912, 0.4447, 0.1762, 0.8936), 5, 4, byrow=TRUE) d <- c(0.0578, 0.3528, 0.8131, 0.0098, 0.1388) A <- matrix(c( 0.2027, 0.2721, 0.7467, 0.4659, 0.1987, 0.1988, 0.4450, 0.4186, 0.6037, 0.0152, 0.9318, 0.8462), 3, 4, byrow=TRUE) b <- c(0.5251, 0.2026, 0.6721) The least-square function to be minimized is ||C x - d||_2 , and the constraints are A x <= b : f <- function(x) sum((C %*% x - d)^2) The solution x0 returned by MATLAB has a minimum of f(x0) = 0.01759204 . This point does not lie in the interior and cannot be used for a start. [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.