У меня есть массив (M) матриц.Я выполняю операцию над матрицей в i-й позиции, и она добавляет еще три матрицы в мой массив в (3i-1), (3i) и (3i + 1) -й позиции.Я хочу продолжать этот процесс, пока не достигну j-й позиции в массиве, где j таков, что все матрицы в (j + 1) -й позиции и далее уже находятся где-то между позициями 1 и j (включительно).
РЕДАКТИРОВАТЬ: меня попросили уточнить, что я имею в виду.Я не могу написать код, который заставляет мой алгоритм завершать работу, когда я этого хочу, как описано выше.Если бы я знал правильный способ поиска по массиву матриц, чтобы проверить, содержится ли данная матрица, то я мог бы это сделать.Я попробовал следующее:
done = 0;
ii = 1
while done ~= 1
%operation on matrix in ith position omitted, but this is where it goes
for jj = ii+1:numel(M)
for kk = 1:ii
if M{jj} == M{kk};
done = done + 1/(numel(M) - ii);
break
end
end
end
if done ~= 1
done = 0;
end
ii = ii + 1
end
Проблема, с которой я столкнулся (как я уверен, вы можете видеть), состоит в том, что если процесс продолжается слишком долго, ошибки округления перестают когда-либо допускать done = 1,и алгоритм не заканчивается.Я попытался обойти это, введя пороги, что-то вроде
while abs(done - 1) > thresh
и
if abs(done - 1) > thresh
done = 0;
end
Это заставляет алгоритм работать чаще, но у меня нет одного размера, подходящего для всех«порог, который я мог бы использовать (процесс мог продолжаться в течение сколь угодно большого количества шагов), поэтому он все равно заканчивает работу.
Что я могу сделать, чтобы это исправить?
Спасибо