Minimize Redundant Operations in Loops - MATLAB & Simulink (original) (raw)
Main Content
This example shows how to minimize redundant operations in loops. When a loop operation does not depend on the loop index, performing it inside a loop is redundant. This redundancy often goes unnoticed when you are performing multiple operations in a single MATLABĀ® statement inside a loop. For example, in the following code, the inverse of the matrix B
is being calculated 100 times inside the loop although it does not depend on the loop index:
for i=1:100 C=C + inv(B)A^iB; end
Performing such redundant loop operations can lead to unnecessary processing. To avoid unnecessary processing, move operations outside loops as long as they do not depend on the loop index.
- Define a function,
SeriesFunc(A,B,n)
, that calculates the sum ofn
terms in the following power series expansion:
function C=SeriesFunc(A,B,n)
% Initialize C with a matrix having same dimensions as A
C=zeros(size(A));
% Perform the series sum
for i=1:n
C=C+inv(B)A^iB;
end - Generate code for
SeriesFunc
with 4-by-4 matrices passed as input arguments forA
andB
:
X = coder.typeof(zeros(4));
codegen -config:lib -launchreport SeriesFunc -args {X,X,10}
In the generated code, the inversion ofB
is performedn
times inside the loop. It is more economical to perform the inversion operation once outside the loop because it does not depend on the loop index. - Modify
SeriesFunc
as follows:
function C=SeriesFunc(A,B,n)
% Initialize C with a matrix having same dimensions as A
C=zeros(size(A));
% Perform the inversion outside the loop
inv_B=inv(B);
% Perform the series sum
for i=1:n
C=C+inv_BA^iB;
end
This procedure performs the inversion ofB
only once, leading to faster execution of the generated code.