MATLAB: Sum of many inputs

sum

Hi guys,
I want to implement a function that I find the sum of as many input arguments I give.
For example in one case it can be (a+b). In another (a+b+c+d…) or (a+b+c).
I try to use varargin but don't know how.. Any suggestions?
thanx d.

Best Answer

function S = sumthemall(varargin)
% Takes as many scalars as you want, returns the sum.
S = sum([varargin{:}]);
.
.
.
EDIT O.k., since Walter wants to generalize it, I will generalize it further ;).
function S = sumthemall(varargin)
% Takes as many numeric arrays as you want, returns the sum.
S = 0;
for ii = 1:nargin
S = S+sum(varargin{ii}(:));
end
.
.
.
Now from the command line:
sumthemall(1,2,3,[4,5,6,7,8,9],magic(3),round(rand(3,4,5,6)*8))
ans =
1532
.
.
.
.
EDIT2
Here is a better (maybe?) generalization.
function S = sumthemall(varargin)
% Takes as many numeric arrays as you can dish and performs a sum.
% If all inputs are the same size (except for possible scalars), then the
% output will be that same size. If not, the result is a scalar sum of all
% elements of all arguments.
S = 0;
Sz = cellfun(@size,varargin,'Un',0);
sclrs = cellfun(@(x) isequal(x,[1 1]),Sz);
Nscl = Sz(~sclrs);
if all(cellfun(@(x) isequal(x,Nscl{1}),Nscl))
for ii = 1:nargin
S = S + varargin{ii};
end
else
for ii = 1:nargin
S = S + sum(varargin{ii}(:));
end
end
.
.
Now from the command line:
>> sumthemall(1,2,3,7,magic(3),round(rand(3)*80))
ans =
38 87 76
79 63 42
27 24 88
>> sumthemall(1,2,3,7,magic(3),round(rand(3)*80),[5 6])
ans =
430