fzero function, additional output needed

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.

 Akzeptierte Antwort

José-Luis
José-Luis am 2 Mai 2013

0 Stimmen

Is there anything preventing you from modifying find_pw() to return p1 as well?
function [F,p1]=find_pw(p,pw)
Globals are evil.

1 Kommentar

Habib
Habib am 2 Mai 2013
No, nothing prevented me from this simple modification, except I was too tired, I guess. Thanks Jose, solved.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Matt J
Matt J am 2 Mai 2013
Bearbeitet: Matt J am 2 Mai 2013

1 Stimme

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.

7 Kommentare

Habib
Habib am 2 Mai 2013
Thanks Matt. That works.
Matt J
Matt J am 2 Mai 2013
You're welcome, but Flags are not meant for marking a solution you're happy with. Do that by clicking "Accept".
Habib
Habib am 2 Mai 2013
sorry, It is my first question here :)
your reply raised another question for me. what does ~ mean as an input or output argument? I have seen it in example gui's and I dont know what it is. and when i ran the gui, Matlab gave error on ~. This is a part of that code:
% --- Executes just before casio is made visible.
function casio_OpeningFcn(hObject, ~ , handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to casio (see VARARGIN)
% Choose default command line output for casio
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes casio wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = casio_OutputFcn(~, ~, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(~, ~, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
Matt J
Matt J am 2 Mai 2013
Habib
Habib am 2 Mai 2013
Thanks. It is introduced since 2009b, and I have 2009a.
Matt J
Matt J am 2 Mai 2013
You're due for an upgrade!

Melden Sie sich an, um zu kommentieren.

Alan Weiss
Alan Weiss am 2 Mai 2013

0 Stimmen

Make p1 global for the script, too, and it will be available everywhere you need it.
Alan Weiss
MATLAB mathematical toolbox documentation

1 Kommentar

Habib
Habib am 2 Mai 2013
I did that, but sometimes you forget to consider this globalization in you next steps of you project. That can cause future headache for debugging.
I was wondering if there is another solution.

Melden Sie sich an, um zu kommentieren.

Produkte

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by