Я выполняю симуляцию уравнения диффузионной реакции в MATLAB и заранее выделяю память для всех моих векторов, однако, во время цикла, в котором я решаю систему уравнений, используя BICG, объем памяти, который использует MATLAB, увеличивается.
Например:
concentration = zeros(N, iterations);
for t = 1:iterations
concentration(:,t+1) = bicg(matrix, concentration(:,t));
end
По мере выполнения программы объем памяти, который использует MATLAB, увеличивается, что, по-видимому, говорит о том, что матрица, концентрация, увеличивается в размере по мере продолжения программы, даже если я предварительно выделил пространство. Это потому, что элементы в матрице становятся двойными вместо нулей? Есть ли лучший способ предварительно выделить память для этой матрицы, чтобы вся память, необходимая программе, была предварительно выделена в начале? Мне было бы легче так, потому что тогда я бы с самого начала знал, сколько памяти потребуется программе, и будет ли симуляция сбивать компьютер или нет.
Спасибо за вашу помощь, ребята. Я немного искал и не нашел ответа, поэтому надеюсь, что не повторю вопрос.
EDIT:
Спасибо Amro и Stardt за вашу помощь, ребята. Я попытался запустить «память» в MATLAB, но интерпретатор сказал, что команда не поддерживается для моего типа системы. Я перезапустил симуляцию, хотя с «концентрацией чей» отображался каждые 10 итераций, а размер распределения матрицы не менялся со временем. Однако я заметил, что размер матрицы составляет около 1,5 ГБ. Даже при том, что это имело место, системный монитор только показывал MATLAB как использующий 300 МБ (но он постепенно увеличивался и достигал чуть более 1 ГБ к концу моделирования). Итак, я предполагаю, что MATLAB заранее распределяет память просто отлично и нет утечек памяти, но системный монитор не считает память как используемую, пока MATLAB не начнет записывать значения в нее в цикле. Я не знаю, почему это так, потому что я представляю, что запись нулей приводит к тому, что системный монитор видит эту память как «используемую», но я полагаю, что это не так.
В любом случае, я ценю вашу помощь с этим. Я бы проголосовал за оба ваших ответа, так как нашел их полезными, но у меня недостаточно репутационных баллов, чтобы сделать это. Спасибо, ребята!