How to call a multi output function without repeating the run

2 visualizaciones (últimos 30 días)
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 comentario
Steven Lord
Steven Lord el 13 de Dic. de 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.

Iniciar sesión para comentar.

Respuesta aceptada

Fabio Freschi
Fabio Freschi el 10 de Dic. de 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 comentarios
joshua Abam
joshua Abam el 4 de En. de 2020
Hi Fabio
I taught about that but was a bit uncertain.
Thanks for the suggestion .
kind regards
Joshua
Stephen23
Stephen23 el 4 de En. de 2020
Editada: Stephen23 el 4 de En. de 2020
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:

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Problem-Based Optimization Setup en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by