## Modeling Techniques That Improve Performance

### Accelerate the Initialization Phase

Speed up a simulation by accelerating the initialization phase, using these techniques.

#### Simplify Graphics Using Mask Editor

Complex graphics and large images take a long time to load and render. Masked blocks that contain such images can make your model less responsive. Where possible, remove complex drawings and images from masked blocks.

If you want to keep the image, replace it with a smaller, low-resolution
version. Use mask editor and edit the icon drawing commands to keep the image
that is loaded by the call to `image()`

.

For more information on mask editor, see Mask Editor Overview.

#### Consolidate Function Calls

When you open or update a model, Simulink^{®} runs the mask initialization code. If your model contains
complicated mask initialization commands that contain many calls to
`set_param`

, consolidate consecutive calls into a single
call with multiple argument pairs. Consolidating the calls can reduce the
overhead associated with these function calls.

To learn more, see Mask Callback Code.

#### Load Data Using MAT file

If you use MATLAB^{®} scripts to load and initialize data, you can improve performance
by loading MAT files instead. The data in a MAT file is in binary and can be
more difficult to work with than a script. However, the load operation typically
initializes data more quickly than the equivalent MATLAB script.

For more information, see MAT-Files for Signal Data.

### Reduce Model Interactivity

In general, the more interactive a model is, the longer it takes to simulate. Use these techniques to reduce the interactivity of your model.

#### Disable Diagnostics

Some diagnostic features can slow simulations considerably. Consider disabling
diagnostic behavior parameters in the **Diagnostics**
pane of the Configuration Parameters dialog box.

**Note**

Using the **Array bounds exceeded** and
**Solver data inconsistency** diagnostic
parameters can slow down simulation. For more information, see **Array bounds exceeded**
and **Solver data
inconsistency**.

#### Disable MATLAB Debugging

After verifying that MATLAB code, such as the code for a MATLAB Function block, works correctly, disable these diagnostic parameters in the Configuration Parameters dialog box:

In the

**Diagnostics**>**Data Validity**pane, clear**Wrap on overflow**.In the

**Simulation Target**pane, under**Advanced Parameters**, clear**Echo expressions without semicolons**.

#### Use BLAS Library Support

If your simulation involves low-level MATLAB matrix operations, use the Basic Linear Algebra Subprograms (BLAS) libraries to make use of highly optimized external linear algebra routines.

#### Disable Stateflow Animations

By default, Stateflow^{®} charts highlight the current active states in a model and animate
the state transitions that take place as the model simulates. This feature is
useful for debugging, but it slows the simulation.

To accelerate simulations, either close all Stateflow charts or disable the animation. Similarly, consider disabling animation or reducing scene fidelity when you use:

Simulink 3D Animation™

Simscape™ Multibody™ visualization

FlightGear

Any other 3D animation package

To learn more, see Speed Up Simulation (Stateflow).

#### Adjust Scope Viewer Properties

If your model contains a scope viewer that displays a high rate of logging and you cannot remove the scope, adjust the viewer properties to trade off fidelity for rendering speed.

However, when you use decimation to reduce the number of plotted data points, you can miss short transients and other phenomena that you can see with more data points. To have more precise control over enabling visualizations, place viewers in enabled subsystems.

For more information, see Scope Viewer.

### Reduce Model Complexity

Use these techniques to improve simulation performance by simplifying a model without sacrificing fidelity.

#### Replace Subsystems with Lower-Fidelity Alternatives

Replace a complex subsystem with one of these alternatives:

A linear or nonlinear dynamic model that was created from measured input-output data using the System Identification Toolbox™.

A high-fidelity, nonlinear statistical model that was created using the Model-Based Calibration Toolbox™.

A linear model that was created using Simulink Control Design™.

A lookup table. For more information, see A lookup table.

You can maintain both representations of the subsystem in a library and use variant subsystems to manage them. Depending on the model, you can make this replacement without affecting the overall result. For more information, see Optimize Generated Code for Lookup Table Blocks.

#### Reduce Number of Blocks

When you reduce the number of blocks in your model, fewer blocks require computations during simulation, making simulations faster. Vectorization is one way to reduce the number of blocks in a model. For example, if your model contains several signals that undergo a similar set of computations, try to combine them into a vector using a Vector Concatenate block. The simulation performs a single computation for the vector instead of performing a separate computation for each element in the vector.

#### Use Frame-Based Processing

In frame-based processing, Simulink processes samples in batches instead of one at a time. If a model includes an analog-to-digital converter, for example, you can collect output samples in a buffer. Process the buffer in a single operation, such as a fast Fourier transform. Processing data in chunks this way reduces the number of times that the simulation needs to invoke blocks in your model.

In general, the scheduling overhead decreases as frame size increases. However, larger frames consume more memory, and memory limitations can adversely affect the performance of complex models. Experiment with different frame sizes to find one that maximizes the performance benefit of frame-based processing without causing memory issues.

### Choose and Configure a Solver

Simulink provides a comprehensive library of solvers, including fixed-step and variable-step solvers, to handle stiff and nonstiff systems. Each solver determines the time of the next simulation step. A solver applies a numerical method to solve ordinary differential equations that represent the model.

The solver you choose and the solver options you select can affect simulation speed. Select and configure a solver that helps boost the performance of your model using these criteria. For more information, see Choose a Solver.

#### Stiffness of System

A stiff system has continuous dynamics that vary slowly and quickly. Implicit solvers are particularly useful for stiff problems. Explicit solvers are better suited for nonstiff systems. Using an explicit solver to solve a stiff system can lead to incorrect results. If a nonstiff solver uses a very small step size to solve a model, this is a sign that your system is stiff.

#### Model Step Size and Dynamics

When you are deciding between using a variable-step or fixed-step solver, keep in mind the step size and dynamics of your model. Select a solver that uses time steps to capture only the dynamics that are important to you. Choose a solver that performs only the calculations needed to work out the next time step.

You use fixed-step solvers when the step size is less than or equal to the fundamental sample time of the model. With a variable-step solver, the step size can vary because variable-step solvers dynamically adjust the step size. As a result, the step size for some time steps is larger than the fundamental sample time, reducing the number of steps required to complete the simulation. In general, simulations with variable-step solvers run faster than those that run with fixed-step solvers.

Choose a fixed-step solver when the fundamental sample time of your model is equal to one of the sample rates. Choose a variable-step solver when the fundamental sample time of your model is less than the fastest sample rate. You can also use variable-step solvers to capture continuous dynamics.

#### Decrease Solver Order

When you decrease the solver order, you reduce the number of calculations that Simulink performs to determine state outputs, which improves simulation speed. However, the results become less accurate as the solver order decreases. Choose the lowest solver order that produces results with acceptable accuracy.

#### Increase Solver Step Size or Error Tolerance

Increasing the solver step size or error tolerance usually increases simulation speed at the expense of accuracy. Make these changes with care because they can cause Simulink to miss potentially important dynamics during simulations.

#### Disable Zero-Crossing Detection

Variable-step solvers dynamically adjust the step size, increasing it when a variable changes slowly and decreasing it when a variable changes rapidly. This behavior causes the solver to take many small steps near a discontinuity because this is when a variable changes rapidly. Accuracy improves, but often at the expense of long simulation times.

To avoid the small time steps and long simulations associated with these situations, Simulink uses zero-crossing detection to locate such discontinuities accurately. For systems that exhibit frequent fluctuations between modes of operation—a phenomenon known as chattering—this zero-crossing detection can have the opposite effect and thus slow down simulations. In these situations, you can disable zero-crossing detection to improve performance.

You can enable or disable zero-crossing detection for specific blocks in a model. To improve performance, consider disabling zero-crossing detection for blocks that do not affect the accuracy of the simulation.

For more information, see Zero-Crossing Detection.

### Save the Model Operating Point

Often, you run several simulations of the same model for different inputs, boundary conditions, and operating conditions. In some situations, these simulations share a common startup phase in which the model transitions from the initial state to another state. For example, you can bring an electric motor up to speed before you test various control sequences.

You can save the model operating point when the system transitions from the startup phase and use this operating point as the initial state for future simulations. This technique does not improve simulation speed, but it can reduce total simulation time for consecutive runs because the startup phase needs to be simulated only once. For more information, see Use Model Operating Point for Faster Simulation Workflow