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

1 view (last 30 days)
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?

Accepted Answer

Matt J
Matt J on 31 Aug 2017
Edited: Matt J 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};
  3 Comments
Matt J
Matt J on 31 Aug 2017
Edited: Matt J 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);

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!