take mean of consecutive 5 values.

3 ビュー (過去 30 日間)
RUCHI CHOUDHARY
RUCHI CHOUDHARY 2019 年 9 月 25 日
回答済み: BhaTTa 2025 年 6 月 10 日
i want to fix the size of vector that is 5 ,then for every iteration calculate the value and perform mean of these 1to 5 values ,when 5 values is full,in the 6 iteration the mean of values from 2 to 6 and so on,if the mean is less than 0.1 then the iteration is stop.
U and V are the matrix having random values.
alpha=0.001;
for i=1:no_of_iteration % no_of_iteration is some input value
U=U-alpha*0.1; % U is matrix ,randomly assign value
V=V-alpha*0.1; % V is matrix ,randomly assign value
cost=sum(sum(U*V));
end
want to take the mean of 5 consecutive cost value ,and compare the value if less then 0.1 then stop iteration

回答 (1 件)

BhaTTa
BhaTTa 2025 年 6 月 10 日
Hey @RUCHI CHOUDHARY, To implement the moving average of cost values and stop the iteration when the mean drops below 0.1, you'll need to store the last 5 cost values in a vector and update it in a rolling fashion.
Please refer to the below code for reference:
alpha = 0.001;
no_of_iteration = 1000; % Or whatever your desired max iterations are
% Initialize U and V matrices (example: 3x3 matrices with random values)
U = rand(3);
V = rand(3);
cost_history = zeros(1, 5); % Initialize a vector to store the last 5 cost values
current_cost_index = 0; % To keep track of where to put the new cost
disp('Starting iterations...');
for i = 1:no_of_iteration
U = U - alpha * 0.1;
V = V - alpha * 0.1;
cost = sum(sum(U * V));
% Store the current cost in the history vector
current_cost_index = mod(i - 1, 5) + 1; % This makes it a circular buffer (1, 2, 3, 4, 5, 1, 2, ...)
cost_history(current_cost_index) = cost;
% Only calculate and check the mean if we have at least 5 cost values
if i >= 5
current_mean_cost = mean(cost_history);
fprintf('Iteration %d: Current Cost = %.4f, Moving Mean (last 5) = %.4f\n', i, cost, current_mean_cost);
if current_mean_cost < 0.1
disp('Moving mean of cost is less than 0.1. Stopping iterations.');
break; % Exit the loop
end
else
fprintf('Iteration %d: Current Cost = %.4f (Collecting 5 values for mean)\n', i, cost);
end
end
disp('Loop finished.');
% You can check the final U, V, and cost_history here if needed

カテゴリ

Help Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by