fzero function, additional output needed
2 次查看(过去 30 天)
显示 更早的评论
Hi, I use fzero to find the zero of my function. fezero returns [x, fval]. however, inside the function another parameter is being calculated. I need to return that parameter back to the script that fzero comes from. how can I do that? apparently fzero doesnet return anything but x and fval!
objective function:
function [F]=find_pw(p,pw)
global qglim gamma pdew p1
if pw>= pdew
p1=pdew;
else
F=find_p11(p,pdew,pw);
if F>0
p1=pdew;
else
objectivefunction=@(p1)find_p11(p,p1,pw);
% options = optimset('Tolx',pwlim);
p1=fzero(objectivefunction,[pw,min(p,pdew)]);%,options);
end
end
mpt=mp2(p,pw,p1);
qg=gamma*mpt;
F=qg-qglim;
end
scpirt:
% ....
objectivefunctionpw=@(pw)find_pw(p,pw);
pw=fzero(objectivefunctionpw,[pwlim,pw]);%,options);
% I Need "p1" here
%...
I need the function "find_pw", to return "p1" too. thanks.
0 个评论
采纳的回答
José-Luis
2013-5-2
Is there anything preventing you from modifying find_pw() to return p1 as well?
function [F,p1]=find_pw(p,pw)
Globals are evil.
更多回答(2 个)
Matt J
2013-5-2
编辑:Matt J
2013-5-2
You can define find_pw to return a 2nd argument
[F,p1]=find_pw(p,pw)
This will not conflict with FZERO. FZERO only uses the first output argument. After FZERO is finished, call the function an additional time to get the extra parameter
pw=fzero(objectivefunctionpw,[pwlim,pw]);%,options);
[~,p1] = objectivefunctionpw(pw);
There is no point trying to avoid one additional evalulation of the objective function. It's negligible overhead compared to the multiple times it gets evaluated by FZERO.
Alan Weiss
2013-5-2
Make p1 global for the script, too, and it will be available everywhere you need it.
Alan Weiss
MATLAB mathematical toolbox documentation
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Function Handles 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!