Это мое текущее решение, которым я не слишком доволен:
% merge current result fields into results
resFields = fieldnames(result);
for jf = 1:numel(resFields)
rf = resFields{jf};
resf = result.(rf);
nd = ndims(resf);
rt = r.(rf);
if nd==2 && min(size(result.(rf)))==1 % scalar or vector
rt = [ rt; result.(rf) ];
elseif nd == 2 % true matrix, so append to 3rd rank tensor
rt(:,:,end+1) = result.(rf);
elseif ndims(result.(rf)) == 3 % 3rd rank tensor, append to 4th rank tensor
rt(:,:,:,end+1) = result.(rf);
else
warning(['Too many dimensions for result field ' rf ': ' num2str(ndims(result.(rf)))]);
rt(end+1) = result.(rf);
end;
results.(rf) = rt;
end;
end;
Конечно, я мог бы вручную расширить его до любого ранга тензора до разумной степени, но это очень избыточно инекрасиво, поэтому я действительно ценю лучшее решение, которое работает и в общем случае.