fsolve within fsolve -> update initial guess

7 Ansichten (letzte 30 Tage)
Tintin Milou
Tintin Milou am 15 Mai 2022
Kommentiert: Matt J am 15 Mai 2022
Hello,
I am using fsolve within fsolve. That is, for each iteration of the outer fsolve loop, matlab solves the inner fsolve problem.
Is there a possibility to use the previous guess for the inner fsolve problem. I tried the following
function F = solvep(p,x0,par)
% some calculations
x = fsolve(@(x) solvex(x,par2),x0);
x0 = x;
% some more calculations
F = p*x - 1;
end
But for some reason, matlab does not update x0. That is, x0 is always set to x0 as given in the first line. I hope to speed up the procedure a bit by using the previous guess because most of the time, the changes in p that matlab considers are quite minor.
Thanks!
  1 Kommentar
Matt J
Matt J am 15 Mai 2022
In your code, the sub-problem and its solution x does not appear to depend on p. Therefore, you should probably just pre-compute it.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Matt J
Matt J am 15 Mai 2022
function F = solvep(p,x0,par)
persistent X0
if isempty(X0), X0=x0; end
% some calculations
x = fsolve(@(x) solvex(x,par),X0);
X0 = x;
% some more calculations
F = p*x - 1;
end

Weitere Antworten (1)

Walter Roberson
Walter Roberson am 15 Mai 2022
Have solvep() return x0 as well, and update the appropriate variable in the calling function.
Or you could back-calculate what x would have to be in order to produce the given F.
Both possibilities imply using a real function for the outer layer instead of an anonymous function. Values bound into an anonymous function cannot be changed by using techniques such as assignin()

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by