Array notation instead of iterative loop for difference equation

Hi, I have somehow a difference equation and wanted to improve the speed of my code and calculate it directly through arrays instead of an iterative loop.
I have a container that is continuously filled. It is emptied at certain times.
I would like to have the mass at each time step of the container.
With an iterative loop I calculated it:
% Dummy values for the incomming mass
m_new = randi(50,288,1);
% Time slots to empty the container
m_empty = false(size(m_new));
m_empty([60,60+96, 60+2*96]) = true;
% Use the mass of the previous time step unless the container has been emptied
contents_remaining = xor(true, m_empty);
% Initializing my array for the loop
mm = zeros(size(m_new));
% Initialize my array with a start value
mm(1) = 300;
% For each time step, calculate the content from the previous time step and the newly added mass.
for i = 1:size(m_new,1)-1
mm(i+1) = mm(i) * contents_remaining(i) + m_new(i);
end
Is it possible to perform this calculation without a for loop?
Unfortunately, I have not come up with a satisfactory result and hope you can help me to avoid the for loop.

6 commentaires

m_new = randi(50,size(m_new));
Something is not right here.
Also, given the operations performed in the code above, it seems mm should be prellocated as a vector, instead of a square matrix.
Julian
Julian le 14 Nov 2023
Modifié(e) : Dyuman Joshi le 14 Nov 2023
@Dyuman Joshi I have mixed up the line of m_new and m_empty
@Torsten Ok, that means I wasn't on the wrong track, but there is no better solution to the problem.
I don't see a problem with this approach.
"Is it possible to perform this calculation without a for loop?"
Why?
Torsten
Torsten le 14 Nov 2023
Modifié(e) : Torsten le 14 Nov 2023
Ok, that means I wasn't on the wrong track, but there is no better solution to the problem.
Yes, recursions are hard (or even impossible ?) to vectorize.

Connectez-vous pour commenter.

Réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange

Produits

Version

R2023a

Question posée :

le 13 Nov 2023

Modifié(e) :

le 14 Nov 2023

Community Treasure Hunt

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

Start Hunting!

Translated by