Если все матрицы будут одинакового размера (то есть 500x800), тогда вы можете просто создать трехмерный массив:
nUnknown; % The number of unknown arrays
myArray = zeros(500,800,nUnknown);
Чтобы получить доступ к одному массиву, вы должны использовать следующий синтаксис:
subMatrix = myArray(:,:,3); % Gets the third matrix
Вы можете добавить больше матриц в myArray несколькими способами:
myArray = cat(3,myArray,zeros(500,800));
% OR
myArray(:,:,nUnknown+1) = zeros(500,800);
Если каждая матрица не будет иметь одинаковый размер, вам нужно будет использовать массивы клеток, как предложил Хосам.
РЕДАКТИРОВАТЬ: я пропустил часть о нехватке памяти. Я предполагаю, что ваш nUnknown довольно большой. Возможно, вам придется переключить тип данных матриц (одиночный или даже тип uintXX, если вы используете целые числа). Вы можете сделать это при обращении к нулям:
myArray = zeros(500,800,nUnknown,'single');