Determine System Stiffness
Determining the numerical stiffness of your model helps you to decide between using an implicit or an explicit fixed-step solver for real-time simulation. To determine numerical stiffness, first use the real-time model preparation workflow to optimize the speed and accuracy of your model. Then, simulate your model using both explicit and implicit fixed-step solvers. Compare the simulation results to see how the solvers behave. If your model is numerically stiff, an explicit solver typically exhibits small oscillations around the desired solution.
Implicit solvers are more robust than explicit solvers, however, explicit solvers are faster. For robust results when performing real-time simulation with numerically stiff model, use an implicit fixed-step solver. If your model is not stiff, use an explicit solver to maximize simulation speed.
In this example, you obtain reference results by simulating a pneumatic model with a variable-step solver. You also configure and simulate the model using an implicit and then an explicit fixed-step global Simulink® solver. Then you compare the results from all three simulations to determine if the pneumatic model is numerically stiff.
Obtain Reference Results
To open the model, at the MATLAB® command prompt, enter:
ssc_pneumatic_rts_reference
Save the model as
stiffness_model
to a writable folder on the MATLAB path.Simulate the model.
Assign the simulation results to new variables.
yRef = yout; tRef = tout;
Plot the results of the variable-step simulation.
h1 = figure; plot(tRef,yRef) h1Leg = legend({'Reference'}); title('Speed') xlabel('Time (s)') ylabel('Speed (rpm)')
Simulate with an Implicit Fixed-Step Solver
Configure the model for fixed-step simulation with implicit solver ode14x. In the configuration parameters Solver pane, set:
Type to
Fixed-step
Solver to
ode14x (extrapolation)
Under Additional options, Fixed-step size (fundamental sample time) to
1e-3
Number of Newton's iterations to
1
.
Click Apply.
Simulate the model.
Assign the simulation results to new variables.
yOde14x = yout; tOde14x = tout;
Use the
stairs
function to plot the results of the implicit fixed-step simulation so you can see how the solver behaves when it executes each step in the simulation.h1 hold on stairs(tOde14x,yOde14x,'g--') h1Leg = legend({'Reference','Implicit Solver'});
The results appear the same.
Simulate with an Explicit Fixed-Step Solver
Configure the model for fixed-step simulation with explicit fixed-step solver ode5. In the configuration parameters Solver pane, set:
Type to
Fixed-step
Solver to
ode5 (Dormand-Prince)
Click OK.
Filter the input signal to provide the required input derivative for the explicit solver. In the Simulink-PS Converter block dialog box, set Filtering and derivatives to
Filter input, derivatives calculated
. Click OK.Simulate the model.
Assign the simulation results to new variables.
yOde5 = yout; tOde5 = tout;
Use the
stairs
function to plot the results of the explicit fixed-step simulation.h1 hold on stairs(tOde5,yOde5,'r-') h1Leg = legend({'Reference','Implicit Solver','Explicit Solver'});
The results differ at the inflection points.
Analyze the Results
To see the results more closely, zoom to the inflection point just after time t = ~ 1 second.
The implicit solver follows a path that is similar to the path that the variable-step solver takes when generating the reference results. The oscillations that the explicit solver exhibits indicate that the model is numerically stiff. The oscillations also indicate that the explicit solver is more computationally costly than the implicit solver for simulating the stiff model. Use a global or local implicit fixed-step solver for real-time simulation with numerically stiff models to avoid unnecessary computational cost.