Constraining equilibrium solver to positive values (fsolve, lsqnonlin)

11 views (last 30 days)
From my understanding, it's impossible to constrain fsolve to only find positive zeros but that it is possible using lsqnonlin (see this thread: http://www.mathworks.com/matlabcentral/newsreader/view_thread/280353). I see how I can use bound constraints with lsqnonlin to only return positive values, but how do I "minimize the residuals to 0"? Thank you!

Accepted Answer

Andrew Newell
Andrew Newell on 17 May 2011
Suppose you started with a function myfun(x) that inputs a vector x and outputs a vector, for example:
myfun = @(x) x.^2-1;
x0 = [-1.5 1.5];
x1 = fsolve(myfun,x0)
x1 =
-1.0000 1.0000
To incorporate your constraints, you could do this:
lb = zeros(size(x0)); %lower bound of zero
ub = Inf*ones(size(x0));
x2 = lsqnonlin(myfun,x0,lb,ub)
x2 =
1.0000 1.0000
As John D'Errico implies, the minimization may give you an answer that is not a root, so you then need to check your answer:
myfun(x2)
ans =
1.0e-08 *
0.3056 0.0030
(Note: answer rewritten completely.)

More Answers (1)

John D'Errico
John D'Errico on 17 May 2011
There is NO assurance that you can minimize the residuals to zero. What is the root of y=x^2+1, with x restricted to real values?
Just wanting to solve a problem does not mean there will be a solution.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!