Programming |
Coding Loops in a MEX-File
If there are instances where you cannot vectorize and must use a for
or while
loop, consider coding the loop in a MEX-file. In this way, the loop executes much more quickly since the instructions in the loop do not have to be interpreted each time they execute.
See Introducing MEX-Files in the External Interfaces documentation.
Assigning to Variables
For best performance, keep the following suggestions in mind when assigning values to variables.
Changing a Variable's Data Type or Dimension
Changing the data type or array shape of an existing variable slows MATLAB down as it must take extra time to process this. When you need to store data of a different type, it is advisable to create a new variable.
This code changes the type for X
from double
to char
, which has a negative impact on performance:
Assigning Real and Complex Numbers
Assigning a complex number to a variable that already holds a real number impacts the performance of your program. Similarly, you should not assign a real value to a variable that already holds a complex value.
Operating on Real Data
When operating on real (i.e., noncomplex) numbers, it is more efficient to use MATLAB functions that have been designed specifically for real numbers. The following functions return numeric values that are real.
Function |
Description |
reallog |
Find natural logarithm for nonnegative real arrays |
realpow |
Find array power for real-only output |
realsqrt |
Find square root for nonnegative real arrays |
Using Appropriate Logical Operators
When performing a logical AND or OR operation, you have a choice of two operators of each type.
Operator |
Description |
&, | |
Perform logical AND and OR on arrays element by element |
&&, || |
Perform logical AND and OR on scalar values with short-circuiting |
In if
and while
statements, it is more efficient to use the short-circuiting operators, &&
for logical AND and ||
for logical OR. This is because these operators often don't have to evaluate the entire logical expression. For example, MATLAB evaluates only the first part of this expression whenever the number of input arguments is less than three:
See Short-Circuit Operators in the MATLAB documentation for a discussion on short-circuiting with &&
and ||
.
Overloading Built-In Functions
Overloading MATLAB built-in functions on any of the standard MATLAB data types can negatively affect performance. For example, if you overload the plus
function to handle any of the integer data types differently, you may hinder certain optimizations in the MATLAB built-in function code for plus
, and thus may slow down any programs that make use of this overload.
Functions Are Generally Faster Than Scripts
Your code executes more quickly if it is implemented in a function rather than a script.
Load and Save Are Faster Than File I/O Functions
If you have a choice of whether to use load
and save
instead of the low-level MATLAB file I/O routines such as fread
and fwrite
, choose the former. load
and save
have been optimized to run faster and reduce memory fragmentation.
Avoid Large Background Processes
Avoid running large processes in the background at the same time you are executing your program in MATLAB. This frees more CPU time for your MATLAB session.
Preallocating Arrays | Using Memory Efficiently |
© 1994-2005 The MathWorks, Inc.