Я пытаюсь оптимизировать скрипт Matlab (ниже), который находит ограничивающие рамки для функциональных значений всех нижних левых треугольников в 2D-пространстве. Код проходит через все треугольники, а затем сортирует узлы в порядке возрастания на основе функциональных значений. Это кажется неэффективным.
Есть ли способ, которым я мог бы отсортировать функциональные значения перед циклами, но все же сохранить узлы в группах треугольников? Или какой-то другой умный способ ускорить процесс?
clear;
x = (1:600)';
y = (1:500);
z = 2 * x.^2 + y;
zGrid = linspace(min(z, [], 'all') - 1, max(z, [], 'all') + 1, 200);
for iX = 1:length(x) - 1
for iY = 1:length(y) - 1
% Node indices
xIndices = [iX, iX, iX + 1];
yIndices = [iY, iY + 1, iY];
% Node values
xTmp = x(xIndices);
yTmp = y(yIndices);
zTmp = z(sub2ind(size(z), xIndices, yIndices));
% Node sorted according to z
[zSorted, indicesSorted] = sort(zTmp);
xSorted = xTmp(indicesSorted);
ySorted = yTmp(indicesSorted);
% Get bounding box on zGrid
iMin = find(zGrid <= zSorted(1), 1, 'last');
iMax = find(zGrid(iMin:end) >= zSorted(end), 1, 'first') + (iMin - 1);
end
end