Main Content

Choose a Fixed-Step Solver

This example shows an algorithmic method of selecting an appropriate fixed-step solver for your model. For simulation workflows in Simulink®, the default setting for the Solver parameter in the Model Configuration Parameters is auto. The heuristics used by Simulink to select a variable-step solver is shown in the figure below.

When to Use a Fixed-Step Solver

One common case to use a fixed-step solver is for workflows where you plan to generate code from your model and run the code on a real-time system.

With a variable-step solver, the step size can vary from step to step, depending on the model dynamics. In particular, a variable-step solver increases or reduces the step size to meet the error tolerances that you specify and as such, the variable step sizes cannot be mapped to the real-time clock of a target system.

Any of the fixed-step continuous solvers in the Simulink product can simulate a model to any desired level of accuracy, given a small enough step size. Unfortunately, it is not possible or practical to decide without trial, the combination of solver and step size that will yield acceptable results for the continuous states in the shortest time. Determining the best solver for a particular model generally requires experimentation.

The example model represents the flight control algorithm for the longitudinal flight of an aircraft.

Establish Baseline Results Using a Variable-Step Solver

Before you begin simulation, determine acceptable error tolerances for your variable-step solver. The model is currently set up with the default values of absolute and relative tolerances of 1e-6 and 1e-4 respectively.

If these values are acceptable, continue with the example. Otherwise, you can change them to your specification using the Model Configuration Parameters.

Select a variable-step solver from the list of solvers in the Solver dropdown in the Solver pane of the Model Configuration Parameters to simulate the model. The default setting in Simulink for the Solver parameter is VariableStepAuto. Simulink selects a solver and the maximum step size of the simulation based on the contents and dynamics of the model.

Simulate the model using the auto solver, or pick another solver. Additionally, enable the Save states, Save time, and Save outputs parameters in the Data Import/Export pane of the Model Configuration Parameters. Set the logging format for your model to Dataset to allow the Simulation Data Inspector to log the signals.

The simulation results from this run will be designated the baseline results for this task. The model contains 13 signals, but this example focuses on only a few signals plotted below.

Profile the model using the Solver Profiler to find an appropriate step size for the candidate fixed-step simulations of the model. See Solver Profiler for information on how to launch and use the tool. For command-line usage, see solverprofiler.profileModel.

Note the maximum and average step sizes returned by the Solver Profiler.

             solver: 'ode45'
             tStart: 0
              tStop: 60
             absTol: 1.0000e-06
             relTol: 1.0000e-04
               hMax: 0.1000
           hAverage: 0.0447
              steps: 1342
        profileTime: 0.0665
           zcNumber: 0
        resetNumber: 600
     jacobianNumber: 0
    exceptionNumber: 193

Run Fixed-Step Simulations of the Model

Once you obtain the results of the variable-step simulation of the model, simulate it using one or more of the fixed-step solvers. In this example, the model is simulated using all the non-stiff fixed-step solvers: ode1, ode2, ode3, ode4, ode5, and ode8. You can also select a specific solver from the Solver dropdown in the Model Configuration Parameters to run against the variable-step baseline.

Considerations for Selecting a Fixed Step Size

The optimal step size for a fixed-step simulation of your model strikes a balance between speed and accuracy, given constraints such as code-generation objectives, physics or dynamics of the model, and modeling patterns used. For example, code generation would dictate the step size must be greater than or equal to the clock speed of the processor (the reciprocal of the CPU frequency). For pure simulation objectives, the step size must be less than the discrete sample times specified by individual blocks in the model. For models with periodic signals, the step size must be such that the signal is sampled at twice its highest frequency; this is known as the Nyquist frequency.

For this specific example, set the fixed-step size of the solver to 0.1 (the maximum step size detected by the Solver Profiler). This takes into account the discrete sample time 0.1 of the Dryden Wind-Gust block, as well as the periodic nature of the stick movements and the aircraft response.

Make sure that the model states, outputs, and simulation time are enabled for logging and that the logging format is set to Dataset in the Model Configuration Parameters.

Simulate the model by selecting any one or all the non-stiff fixed-step solvers from the Solver dropdown of the Model Configuration Parameters when the solver Type is set to Fixed-step.

A Simulink.sdi.Run object is created for the fixed-step solver simulation(s) and stored in the fsRuns struct in the base workspace.

Compare Fixed-Step Simulations with the Variable-Step Baseline

Use the Simulation Data Inspector to visualize and inspect logged signals in your model. You can also compare signals across simulations, or runs, using the Compare feature. For more information on using the Simulation Data Inspector, see Simulation Data Inspector. For more information on how to compare simulations using the Simulation Data Inspector, see Compare Simulation Data.

To compare signals, switch to the Compare tab in the Simulation Data Inspector. Set the Baseline run to the variable-step simulation and select a fixed-step simulation from the Compare to dropdown. Set the Global Abs Tolerance, Global Rel Tolerance, and Global Time Tolerance based on your requirements.

For this example, Global Abs Tolerance is set to 0.065, Global Rel Tolerance is set to 0.005, and Global Time Tolerance is set to 0.1.

The comparison plots display the results for the lowest order fixed-step solver simulation where all signals fell within tolerance, when compared to the baseline variable-step simulation. For the selected solver, comparison results of a few of the signals are plotted below.

The lowest order with all signals within tolerance is determined to be ode4. Consider the results for the ode1 fixed-step solver, where the comparison results showed 11 signals out of tolerance. Observe that there are 11 signals out of tolerance when the signal comparison parameters are set as:

  • Signal Abs Tolerance: 0.065

  • Signal Rel Tolerance: 0.065

  • Signal Time Tolerance: 0.1