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 个评论
Dyuman Joshi
2023-11-13
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
2023-11-13
The answer given here still holds:
Julian
2023-11-14
编辑:Dyuman Joshi
2023-11-14
Dyuman Joshi
2023-11-14
I don't see a problem with this approach.
Stephen23
2023-11-14
"Is it possible to perform this calculation without a for loop?"
Why?
回答(0 个)
类别
在 帮助中心 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!