MATLAB Answers

0

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

Asked by Pal Szabo on 31 Aug 2017
Latest activity Edited by Matt J
on 31 Aug 2017
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?

  0 Comments

Sign in to comment.

1 Answer

Answer by Matt J
on 31 Aug 2017
Edited by Matt J
on 31 Aug 2017
 Accepted Answer

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

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);

Sign in to comment.