Нет необходимости предварительно выделять X
и A
, если вы все равно выполняете полное назначение.Затем вы заменяете T
скаляром внутри цикла, что приводит к проблемам в следующей итерации.То, что я предполагаю, что вы хотите, может выглядеть примерно так:
function T = tempsim(rows, cols, topNsideTemp, bottomTemp, tol)
T = zeros(rows,cols);
T(1,:) = topNsideTemp;
T(:,1) = topNsideTemp;
T(:,rows) = topNsideTemp;
T(rows,:) = bottomTemp;
S = [0 1 0; 1 1 1; 0 1 0];
for ii = 1:(cols-2);
for jj = 1:(rows-2);
X = T(ii:ii+2, jj:jj+2);
A = X.*S;
T(ii,jj) = (sum(sum(A)))/5;
end
end
Хотя я не уверен, действительно ли вы хотите это сделать - вы работаете над T
, изменяя его.Как дикое предположение, я подозреваю, что вы могли бы искать что-то вроде
conv2(T, S/5, 'same')
вместо этого, возможно, после того, как ваши фиксированные временные границы были в два раза толще и перенастроили их после вызова (посколькузаполнение нулями на внешних границах).