Subfunction with output varargout returns only first element of cell array. Why?

This is my script:
a=9;
b=2;
[varargout] = myfunc(a,b)
c=varargout
function [varargout] = myfunc(a,b)
sum=a+b;
dif=a-b;
prod=a*b;
varargout={sum,dif,prod}
end
After execution, the value of c is 11. I want it to be an array, with values 11, 7, 18. {sum, dif,prod}. What is wrong with my script, and how can I get the desired array?

 Réponse acceptée

Matt J
Matt J le 31 Août 2017
Modifié(e) : Matt J le 31 Août 2017
I you only want all the computations bundled into one output argument, then varargout is not the right thing:
function c = myfunc(a,b)
sum=a+b;
dif=a-b;
prod=a*b;
c={sum,dif,prod};

3 commentaires

Thanks Matt. What happens if I want to change the number of outputs? Lets say, when I first call the function, I need sum only, then sum and dif, then sum,dif,prod? How can I do that using the same function?
In that case, your original code is correct, but you need to call myfunc with more output arguments
sum=myfunc(dif)
or
[sum,dif] = myfunc(a,b)
or
[sum,dif,prod] = myfunc(a,b)
If you want a single output array but containing variable amounts of data, you have to control that through the input arguments,
function out = myfunc(a,b, howmany)
sum=a+b;
dif=a-b;
prod=a*b;
c={sum,diff,prod};
out=c(1:howmany);
Now it works. Thank you!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Debugging and Improving Code dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by