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

### Pal Szabo (view profile)

on 31 Aug 2017
Latest activity Edited by Matt J

on 31 Aug 2017

### Matt J (view profile)

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?

on 31 Aug 2017
Edited by Matt J

### Matt J (view profile)

on 31 Aug 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};

Pal Szabo

### Pal Szabo (view profile)

on 31 Aug 2017
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?
Matt J

### Matt J (view profile)

on 31 Aug 2017
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);
Pal Szabo

### Pal Szabo (view profile)

on 31 Aug 2017
Now it works. Thank you!