Constraining equilibrium solver to positive values (fsolve, lsqnonlin)
10 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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!
0 commentaires
Réponse acceptée
Andrew Newell
le 17 Mai 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.)
Plus de réponses (1)
John D'Errico
le 17 Mai 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.
0 commentaires
Voir également
Catégories
En savoir plus sur Solver Outputs and Iterative Display dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!