# How to call a multi output function without repeating the run

조회 수: 17(최근 30일)
joshua Abam 10 Dec 2019
Edited: Stephen Cobeldick 4 Jan 2020 9:13
Dear all,
I am having a challenge, which I think, should be possible to overcome, but how to go about it has been challenging for me, I have a function with multiple output in this case 3 output, and I am calling all three output for further use. The issue now is how do I call the three output without repeating the entire calculation in the process. As I have observed that for the 3 times I called it, it runs afresh all 3 times. In the first place calling it once is time consuming how more calling it 3 times, whic makes the process computational expensive to achieve.
Thanks
Kind regards
%The function were all the three output from the multi-output function are to be %inserted for further use.
function [c, ceq] = nonconst(x)
c = total_value(x)-u*v;... ` `%first output from the multi-output %function
u*energy_value(x);... %2nd output from the multi-output %function
v*Delta_value(x); %Third output from the multi-output %function
ceq = [];
end
%The function to call the first output from the digital function
function D_total = total_value(x)
D_total = digital(x) % ca
end
%The function to call the 2nd output from the digital function
function D_value = Delta_value(x)
[~, D_value, ~] = digital(x)
end
%The function to call the third output from the digital function
function D_energy = energy_value(x)
[~, ~, D_energy] = digital(x)
end
%This is a multi-output function comprises of 3 output which are D_total,
% D_value and D_energy
function [D_total, D_value, D_energy] = digital(x)
;;;;;;;;;;;; %The conetent of the function has been cleared
;;;;;;;;;;;
;;;;;;;;;;
end

#### 댓글 수: 1

Steven Lord 13 Dec 2019
This looks to be very similar or the same as the question you were asking here where you received some explanation and advice. Why did you start another question? Clarifying questions and suggestions made in one of the discussions won't be visible to participants in the other.

로그인 to comment.

### 채택된 답변

Fabio Freschi 10 Dec 2019
function [c, ceq] = nonconst(x)
[total_value, Delta_value, energy_value] = digital(x);
c = total_value-u*v;... ` `%first nonlinear constrain
u*energy_value;... %2nd Nonlinear constrain
v*Delta_value;
ceq = [];
end

#### 댓글 수: 6

표시 이전 댓글 수: 3
Fabio Freschi 4 Jan 2020 1:23
you can declare the outputs of your digital function as global. See
doc global
joshua Abam 4 Jan 2020 7:09
Hi Fabio
I taught about that but was a bit uncertain.
Thanks for the suggestion .
kind regards
Joshua
Stephen Cobeldick 4 Jan 2020 9:08
For such trivial code as this you should not get into the bad habit of using global variables.
Passing data as input/output arguments is neater and much more efficient. Passing data as input/output arguments is what the MATLAB documentation (and all experienced MATLAB users) recommend:
Another very efficient option is to use nested functions:

로그인 to comment.