Additional output with fsolve
4 次查看(过去 30 天)
显示 更早的评论
I'm asking what seems to be an identical question to this one. Specifically, I simply want to output additional variables after fsolve completes its task. Suppose that I am using fsolve with this function:
function [F G] = myfunc(x)
F = x^2;
G = 2;
I will be using fsolve with
xsol = fsolve(@(x)myfunc(x), guess);
This will give me the solution. However, if I want the value of G, I need to call myfunc again
[F, G] = myfunc(xsol)
I'd like to NOT evaluate myfunc again. How do I get fsolve to also output additional variables? I'd like to do so without global variables or outputting to files...
0 个评论
采纳的回答
Andrew Newell
2011-5-14
Is the G you're really calculating costly to evaluate? If so, I'd suggest a different approach. Define your function as
function [F G] = myfunc(x)
F = x^2;
if nargout > 1
G = 2;
end
so it doesn't evaluate G during the solving (which would involve, generally, several calls to myfunc ). Note that you can use a more compact notation:
xsol = fsolve(@myfunc,guess);
Then go ahead and calculate G once:
[F G] = myfunc(x)
You'll probably save a lot more computation with this approach.
2 个评论
更多回答(1 个)
Andrew Newell
2011-5-14
Based on your comments, here is another approach. Define a function
function G = myGfunc(x)
persistent G
if nargin > 0
% calculate G
end
This saves the value of G you calculate. Then define
function [F G] = myfunc(x)
G = myGfunc(x);
F = GtoF(G); % Your method of calculating F using G
After your run, you can enter
G = myGfunc;
and it will simply return the saved value of G.
Caveat: it would be wise to enter
clear functions
before each run to make sure that G isn't saved from a previous run.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Calculus 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!