Additional output with fsolve
조회 수: 16 (최근 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
Andrew Newell
2011년 5월 14일
I do appreciate your obvious effort to distill the essence of this problem.
추가 답변 (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
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!