# Reduce Model Order

Reduce complexity of linear time-invariant (LTI) models in the Live Editor

*Since R2019b*

## Description

The **Reduce Model Order** task lets you
interactively compute reduced-order approximations of high-order models while preserving model
characteristics that are important to your application. The task automatically generates
MATLAB^{®} code for your live script. For more information about Live Editor tasks
generally, see Add Interactive Tasks to a Live Script.

Working with lower order models can simplify analysis and control design. Simpler models are also easier to understand and manipulate. You can reduce a plant model to focus on relevant dynamics before designing a controller for the plant. You can also use model reduction to simplify a full-order controller. For more information about model reduction and when it is useful, see Model Reduction Basics.

To get started, select a model to reduce and a model-reduction method. For each method, the task gives you controls and plots that help you ensure that your reduced model preserves dynamics that are important for your application.

`Balanced Truncation`

— Compute a lower order approximation of your model by removing states with relatively small energy contributions.`Mode Selection`

— Select modes by specifying a frequency range of interest.`Pole-Zero Simplification`

— Eliminate canceling or near-canceling pole-zero pairs.

## Open the Task

To add the **Reduce Model Order** task to a live script in
the MATLAB Editor:

On the

**Live Editor**tab, select**Task**>**Reduce Model Order**.In a code block in your script, type a relevant keyword, such as

`reduce`

,`balred`

, or`minreal`

. Select`Reduce Model Order`

from the suggested command completions.

## Parameters

`Model`

— Model to reduce

numeric LTI model

Choose the model to reduce. The list of available models includes proper
`tf`

, `ss`

, or `zpk`

models
in the MATLAB workspace. The model can be SISO or MIMO, and continuous or discrete.

Continuous-time models cannot have time delays. To reduce a continuous-time model with time delays, first use

`pade`

to approximate the time delays as model dynamics.Discrete-time models can have time delays. For the

`Balanced Truncation`

reduction method, the task uses`absorbDelay`

to convert the delay into poles at*z*= 0 before reducing the model.

**Note**

**Reduce Model Order** assumes that the model time
unit (specified in the `TimeUnit`

property of the model) is seconds.
For the `Balanced Truncation`

and ```
Mode
Selection
```

methods, if your model does not have ```
TimeUnit =
'seconds'
```

, use `chgTimeUnit`

to convert the model to
seconds.

`Method`

— Model reduction method

`Balanced Truncation`

(default) | `Mode Selection`

| `Pole-Zero Simplification`

For each method, the **Reduce Model Order** task gives
you controls and plots that help you ensure that your reduced model preserves dynamics
that are important for your application.

`Balanced Truncation`

— Compute a lower order approximation of your model by removing states with relatively small energy contributions. To use this method, specify the number of states (order) in the reduced model. The Hankel singular-value plot visualizes the relative energy contribution of each state in the original model. The task discards states with lower energy than the state you select in this plot. This method generates code that uses the`balred`

command.For discrete-time model that has time delays,

**Reduce Model Order**uses`absorbDelay`

to convert the delay into poles at*z*= 0 before reducing the model by balanced truncation. The additional states are reflected in the response plot and Hankel singular-value plot.`Mode Selection`

— Select modes by specifying a frequency range of interest. The task discards dynamics that fall outside the region you specify on the frequency-response plot. This method generates code that uses the`freqsep`

command.`Pole-Zero Simplification`

— Eliminate canceling or near-canceling pole-zero pairs. The task discards pole-zero pairs that cancel with the threshold specified by the**Tolerance**parameter. Increase the tolerance to discard more states. This method generates code that uses the`minreal`

command.

**Balanced Truncation Parameters**

`Reduced Order`

— Number of states in reduced model

positive integer

Specify the number of states in the reduced-order model. You can use any value that falls between the number of unstable states in the model and the number of states in the original model. For more information, see Balanced Truncation Model Reduction.

`Preserve DC Gain`

— Match DC gain of reduced model to that of original model

on (default) | off

Match the DC gain of the reduced model to that of the original model. Select
**Preserve DC Gain** when the DC behavior of the model is important
in your application. Clear the parameter to get better matching of higher frequency
behavior. For more information, see Balanced Truncation Model Reduction.

`Frequency Range`

— Limit analysis to specified frequencies

off (default) | on

By default, **Reduce Model Order** analyzes Hankel
singular values across all frequencies. Restricting this analysis to a particular
frequency range is useful when you know the model has modes outside the region of
interest to your particular application. When you apply a frequency limit,
**Reduce Model Order** determines which states are the
low-energy states to truncate based on their energy contribution within the specified
frequency range only.

To limit the analysis of state contributions to a particular frequency range, check
**Frequency range**. Then, drag the vertical cursors on the response
plot to specify the frequency range of interest. Alternatively, enter the minimum and
maximum frequencies in the text boxes. The unit is `rad/s`

. If your
model does not have `TimeUnit = 'seconds'`

, use `chgTimeUnit`

to convert the model to seconds.

`Comparison Plot`

— How to compare original and reduced models

`Model response`

(default) | `Absolute error`

| `Relative error`

**Reduce Model Order** shows you a comparison of the
frequency responses between the original and reduced models. You can use this plot to
monitor the match between the original and reduced-order models while you experiment
with model-reduction parameter values. Available comparison plots are:

`Model response`

— Frequency response of the original and reduced models, shown as a Bode plot for SISO models and a singular-value plot for MIMO models.`Absolute error plot`

— Singular values of`G-Gr`

, where`G`

is the original model and`Gr`

is the current reduced model. (For SISO models, the singular-value plot is the magnitude of the frequency response.)`Relative error plot`

— Singular values of`(G-Gr)/G`

. This plot is useful when the model has very high or very low gain in the region that is important to your application. In such regions, absolute error can be misleading.

**Mode Selection Parameters**

`Cutoff Frequency`

— Frequency range in which to preserve dynamics

positive scalar values

Specify the lower and upper bounds of the frequency range in which to preserve
dynamics. You can also use the vertical cursors on the response plot to specify the
range. **Reduce Model Order** discards dynamics outside the
specified range.

For more information about this method, see Mode-Selection Model Reduction.

`Comparison Plot`

— How to compare original and reduced models

`Model response`

(default) | `Absolute error`

| `Relative error`

**Reduce Model Order** shows you a comparison of the
frequency responses between the original and reduced models. You can use this plot to
monitor the match between the original and reduced-order models while you experiment
with model-reduction parameter values. Available comparison plots are:

`Model response`

— Frequency response of the original and reduced models, shown as a Bode plot for SISO models and a singular-value plot for MIMO models.`Absolute error plot`

— Singular values of`G-Gr`

, where`G`

is the original model and`Gr`

is the current reduced model. (For SISO models, the singular-value plot is the magnitude of the frequency response.)`Relative error plot`

— Singular values of`(G-Gr)/G`

. This plot is useful when the model has very high or very low gain in the region that is important to your application. In such regions, absolute error can be misleading.

**Pole-Zero Simplification Parameters**

`Tolerance`

— Margin for pole-zero cancellation

positive scalar

Specify the margin for pole-zero cancellation. Pole-zero pairs that cancel within this tolerance are removed from the reduced model. You can use the slider to change the tolerance and observe the results in a response plot.

**Results Parameters**

`Output Plot`

— Type of response plot to generate

`None`

(default) | `Step`

| `Impulse`

| `Bode`

| ...

**Reduce Model Order** generates code that shows the
response of the original and reduced systems on the plot type you specify. Available
plots include:

Step response

Impulse response

Bode plot

Singular value (sigma) plot

Pole-zero plot

## Version History

**Introduced in R2019b**

### R2023b: Generates code using new model order reduction workflow

The **Reduce Model Order** task now generates code using
the new model order reduction workflows. For example, this table describes the change in the
model order reduction workflow in the generated code.

Method | Generated Code before R2023b | Generated Code in R2023b |
---|---|---|

Balanced Truncation |
%% Reduce LTI model order using balanced truncation System = G; % Define System to reduce Order = 14; % Create option set for balred command Options = balredOptions(); % Offset for the stable/unstable boundary Options.Offset = 1e-05; % Compute reduced order approximation ReducedSystem = balred(System,Order,Options); % Create comparison plot bode(System,ReducedSystem); |
%% Reduce LTI model order using balanced truncation System = G; % Define System to reduce % Compute reduced order approximation R = reducespec(System,'balanced'); % Set options for Balanced Truncation specification % Offset for the stable/unstable boundary R.Options.Offset = 1e-05; % Compute MOR data once R = process(R); % Get reduced-order model ReducedSystem = getrom(R,Order=14); % Create comparison plot bode(System,ReducedSystem); |

Mode Selection |
%% Reduce LTI model order using mode selection System = G; % Define System to reduce UpperCutoffFrequency = 100; LowerCutoffFrequency = 10; % Create option set for freqsep command Options = freqsepOptions(); % Accuracy loss factor for stable/unstable decomposition Options.SepTol = 100; % Select modes between lower and upper cutoff frequencies ReducedSystem = freqsep(System,... [LowerCutoffFrequency UpperCutoffFrequency],Options); % Create comparison plot bode(System,ReducedSystem); |
%% Reduce LTI model order using mode selection System = G; % Define System to reduce % Select modes between lower and upper cutoff frequencies R = reducespec(System,'modal'); % Set options for Modal Truncation specification % Accuracy loss factor for stable/unstable decomposition R.Options.SepTol = 1e-11; % Compute MOR data once R = process(R); % Get reduced-order model ReducedSystem = getrom(R,Frequency=[10 100],Method='truncate'); % Create comparison plot bode(System,ReducedSystem); |

For more information about the new workflow, see `reducespec`

and
Task-Based Model Order Reduction Workflow.

## MATLAB Command

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list:

## How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

### Americas

- América Latina (Español)
- Canada (English)
- United States (English)

### Europe

- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)

- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)