%// Data:
grid_min = 0;
grid_max = 5;
w = [.1 .2 .3];
%// Let go:
n = numel(w);
gg = cell(1,n);
[gg{:}] = ndgrid(grid_min:grid_max);
gg = cat(n+1, gg{:});
result = sum(bsxfun(@times, gg, shiftdim(w(:), -n)), n+1);
:
( gg) ndgrid, n, . n - (gg{1}, gg{2} ..) n+1 - ( cat), gg n+1 - . w n+1 - (shiftdim), gg, bsxfun, n+1 - .
Edit:
@Divakar,
sz_gg = size(gg);
result = zeros(sz_gg(1:end-1));
result(:) = reshape(gg,[],numel(w))*w(:);
, Matlab , bsxfun (., , ).