fsolve within fsolve -> update initial guess

11 visualizaciones (últimos 30 días)
Tintin Milou
Tintin Milou el 15 de Mayo de 2022
Comentada: Matt J el 15 de Mayo de 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 comentario
Matt J
Matt J el 15 de Mayo de 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.

Iniciar sesión para comentar.

Respuesta aceptada

Matt J
Matt J el 15 de Mayo de 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

Más respuestas (1)

Walter Roberson
Walter Roberson el 15 de Mayo de 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()

Categorías

Más información sobre Surrogate Optimization en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by