Я пытаюсь просто суммировать все числа «LengthofRoute» для итераций от 1 до 1000, чтобы затем рассчитать среднюю длину пути по 1000 итерациям. Как я могу это сделать? Перерыл весь интернет и не могу найти правильную процедуру. Dijsktra1 выполняет и возвращает целое число, обычно меньше 4.
J=0;
f = 0;
nf = 0;
while J<1000
LengthofRoute = [];
B = RandomMatrix(0,1,10,10);
J=J+1;
[LengthofRoute, RouteTaken] =Dijkstra1(B, 10, 1);
if LengthofRoute > 0
f = f + 1;
% number of feasible occurrences
else
nf = nf + 1;
% number of nonfeasible occurrences
end
LengthofRoute = LengthofRoute + LengthofRoute
end
Вы должны просто использовать отдельный аккумулятор для суммирования LengthofRoute
:
Предположим, что LengthofRouteSum
накапливает сумму.
LengthofRouteSum
перед циклом: LengthofRouteSum = 0;
LengthofRoute
в нижней части петли: LengthofRouteSum = LengthofRouteSum + LengthofRoute;
Следующий код должен выполнить эту работу:
J=0;
f = 0;
nf = 0;
LengthofRouteSum = 0;
while J<1000
B = RandomMatrix(0,1,10,10);
J=J+1;
[LengthofRoute, RouteTaken] =Dijkstra1(B, 10, 1);
if LengthofRoute > 0
f = f + 1;
% number of feasible occurrences
else
nf = nf + 1;
% number of nonfeasible occurrences
end
LengthofRouteSum = LengthofRouteSum + LengthofRoute;
end
сработало в первый раз, а теперь почему-то продолжает суммироваться до бесконечности. Есть идеи, почему?
Я понял. Мне пришлось изменить оператор if, чтобы он был if LengthofRoute == Inf, тогда это невозможно!
Теперь вы вычисляете
LengthofRoute
каждый раз заново, используяDijkstra1()
и сохраняете удвоенное значение вLengthofRoute
в конце каждой итерации. В начале следующей итерации вы снова очищаете его. Чтобы придерживаться текущей реализации, вы можете использовать текущую сумму, которую вы инициализируете вне цикла (например,LORrunning = 0
), и добавлятьLengthofRoute
к ней в конце каждого цикла:LORrunning = LORrunning + LengthofRoute
.