Я хочу, чтобы итератировать все элементы независимо (одинаковое условие для всех элементов). Я хочу остановить итерацию, когда значение перестает меняться. Я отправлю часть своего кода. Согласно некоторым исследованиям, я подумал, что это также можно сделать с помощью цикла parfor, но я не знаю, как его реализовать. Может кто-нибудь исправить мой код? Заранее спасибо.Параллельная независимая итерация элементов в массиве
probability = (ones(1,2048) .* 1/2048);
Tij = sum(StateTransitionfwd); %gives us an array of 2048 elements.
probability = ((probability * StateTransitionbwd) - (Tij .* probability));
threshold = (ones(1,2048) .* 0.05);
old = zeros(1,2048);
new = zeros(1,2048);
while(1)
probability = ((probability * StateTransitionbwd) - (Tij .* probability));
new = probability;
if old-new <= threshold
break
end
old = probability;
end
Поэтому в основном я хочу, устойчивое состояние вероятности (где она не меняющаяся больше)
@visser Большое спасибо за то, что нашли время. Вы правы, что не работает. Могу ли я спросить предложение, что делать, поскольку у меня нет подсказки. Я просто хочу повторить все элементы (вероятности) в массиве, независимом друг от друга. Я хочу, чтобы они остановились, когда достигнута конвергенция, которая достигнет в разное время для всех элементов. Ану предложение будет действительно очень полезно. –
Вы не можете самостоятельно вычислять вещи, которые останавливаются при достижении конвергенции, что нарушает условие «каждая итерация должна быть независимой». Не параллелизуйте этот код, просто придерживайтесь цикла while, поскольку он, вероятно, быстрее. Параллельная версия, представленная мной, все еще вычисляет все, а затем должна искать условие, в отличие от исходного цикла while, который выполняет расчет, а затем проверяет правильность инструкции break. Петли Parfor не выполняются последовательно, например. он может сделать ii = 1 5 3 4 2 как итерации вместо ii = 1 2 3 4 5, которые вы хотите. – Adriaan
Да, это имеет смысл, но проблема в том, что он не останавливается.Я даже оставил его на два дня, но все же Matlab показывает занят. Так что я думаю, возможно, это возможно, что мое состояние не встречается. Как вы думаете, мой оригинальный код делает то, что я действительно хочу? –