fsolve within fsolve -> update initial guess
8 次查看(过去 30 天)
显示 更早的评论
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 个评论
Matt J
2022-5-15
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.
采纳的回答
Matt J
2022-5-15
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
0 个评论
更多回答(1 个)
Walter Roberson
2022-5-15
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()
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Systems of Nonlinear Equations 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!