Array notation instead of iterative loop for difference equation
Mostrar comentarios más antiguos
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 comentarios
Dyuman Joshi
el 13 de Nov. de 2023
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.
Torsten
el 13 de Nov. de 2023
The answer given here still holds:
Julian
el 14 de Nov. de 2023
Editada: Dyuman Joshi
el 14 de Nov. de 2023
Dyuman Joshi
el 14 de Nov. de 2023
I don't see a problem with this approach.
Stephen23
el 14 de Nov. de 2023
"Is it possible to perform this calculation without a for loop?"
Why?
Respuestas (0)
Categorías
Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!