## Improve Results of Mu Synthesis

You can sometimes improve the results of robust controller synthesis with
`musyn`

. Even if the default options yield good results, by changing
certain options, you might be able to:

Find a controller that yields better robust performance.

Find a lower order controller that yields similar robust performance.

Consider trying several of the techniques described here to see whether the results you
obtain from `musyn`

can be improved.

### Mixed-*μ* Synthesis for Real Uncertainty

By default, `musyn`

treats all uncertainties as complex
uncertainties, even those represented by real parameters. For `ureal`

blocks,
`musyn`

assumes that each real parameter has an imaginary part that can
vary by the same amount as the real part. This assumption simplifies the computation, but
yields a more conservative estimate of the robust performance of the system.

When you have real uncertainty, you can instead use
*mixed- μ synthesis*, which explicitly takes into
account the fact that some uncertain parameters are limited to real values. Try using
mixed-

*μ*synthesis to see if it improves the performance relative to the controller you obtain without it.

To use mixed-*μ* synthesis, set the `'MixedMU'`

option
of `musynOptions`

to
`'on'`

. For an example that illustrates the benefit of
mixed-*μ* synthesis, see Control of a Spring-Mass-Damper System Using Mixed-Mu Synthesis.

Mixed-*μ* synthesis complicates the computation and can result in
higher order controllers. The techniques in Reduce Controller Order can help simplify the
resulting controller.

### Reduce Controller Order

For unstructured controller design, `musyn`

can return relatively
high-order controllers. `musyn`

uses frequency-dependent scaling matrices
that are fit by rational functions. (See D-K Iteration Process.) The order required to
fit the scalings and the number of uncertain blocks in your system contribute to the order
of the final optimized controller. Therefore, after using `musyn`

for an
initial robust controller design, it can be useful to search for a lower order controller
that achieves similar robust performance. Among approaches to obtaining a lower order
controller, you can:

#### Reduce Order of Returned Controller

One technique is to use model-reduction commands to reduce the controller that
`musyn`

returns, and find the lowest order approximation that
achieves similar performance. For an example illustrating this approach, see the `musynperf`

reference page.

Even if the initial controller you obtain with `musyn`

is not
reducible in a way that preserves robust performance, a lower order controller that
achieves the same performance might exist. Consider trying the other techniques to see if
varying parameters of the `musyn`

computation can help you find such a
controller.

#### Lower Order Fixed-Structure Controller

This approach takes advantage of the ability of `musyn`

to tune
fixed-structure controllers. Suppose that you use `musyn`

to design a
full-order, centralized controller `K`

for an uncertain plant
`P`

with `nmeas`

measurement signals and
`ncont`

control signals. You can create a fixed-order, tunable
state-space model of a lower order than `K`

, and use
`musyn`

again to tune the free parameters of that model. If the new
controller achieves robust performance close to that of the unstructured controller, try
again with an even lower order tunable state-space model. For instance, suppose
`K`

is a 10th-order controller returned by `musyn`

for the plant `P`

. The following commands create and tune a fifth-order
state-space controller by forming the closed-loop uncertain system with the tunable
controller and passing it to `musyn`

.

```
C0 = tunableSS('C0',5,nmeas,ncont);
CL0 = lft(P,C0);
[CL,CLperf,info] = musyn(CL0);
```

For a simple example, see Robust Tuning of Fixed-Structure Controller on the
`musyn`

reference page.

#### Reduce Maximum Scaling Order

For each iteration, `musyn`

fits each entry in the
*D* and *G* scaling matrices by a rational function of
automatically selected order. The higher the order of these functions, the higher the
order of the resulting controller. By default, the maximum order is 5 for
*D* scaling, and 2 for the *G* scaling matrices. If
these defaults yield a controller with good robust performance, try lowering the maximum
order to see if `musyn`

returns a lower-order controller with similar
performance. To change the maximum order, use the `'FitOrder'`

option of
`musynOptions`

.

#### Diagonal Scalings for Repeated Blocks

If your system has repeated uncertain parameters, you can restrict the
*D* and *G* scalings so they are diagonal, which can
result in a lower order unstructured controller. For more information, see Repeated Parameter Blocks.

### Repeated Parameter Blocks

An uncertain parameter can occur multiple times in a given model. For example, the
following code creates an uncertain state-space model that has two occurrences each of the
uncertain parameters `p1`

and `p2`

.

p1 = ureal('p1',10); p2 = ureal('p2',3); A = [-p1 p2;0 -p1]; B = [-p2; p2]; C = [1 0;1 1]; D = [0;0]; sys = ss(A,B,C,D)

sys = Uncertain continuous-time state-space model with 2 outputs, 1 inputs, 2 states. The model uncertainty consists of the following blocks: p1: Uncertain real, nominal = 10, variability = [-1,1], 2 occurrences p2: Uncertain real, nominal = 3, variability = [-1,1], 2 occurrences Type "sys.NominalValue" to see the nominal value, "get(sys)" to see all properties, and "sys.Uncertainty" to interact with the uncertain elements.

Multiple occurrences of uncertain parameters can increase the order of the rational fit
functions for the *D* and *G* scalings. Therefore, they
can increase the number of states in the controller returned by `musyn`

.
You can mitigate this effect of repeated parameters in several ways:

#### Use Diagonal Scalings

By default, `musyn`

by default uses full matrices for the
*D* and *G* scalings of repeated blocks. Full scaling
matrices can have frequency-dependent entries both on and off the diagonal. Fitting all of
these entries can result in high controller order. If `musyn`

instead
uses diagonal scaling, then fewer independent fit functions are needed, which can reduce
the controller order.

Diagonal scaling, is equivalent to treating each repeated block as an independent
instance of the uncertain parameter. Therefore, full scaling is less conservative and can
yield better robust performance. However, to reduce the controller order, you can try
diagonal scaling and see whether `musyn`

can still find an adequate
controller using the more conservative estimation of the *μ* upper
bound.

To specify diagonal scaling for repeated blocks, use the `'FullDG'`

option of `musynOptions`

.

#### Reduce Repetitions in the Plant

Use `simplify`

to reduce the number of repeated
parameters in the plant before calling `musyn`

. The
`simplify`

command tries to remove redundant instances of uncertain
blocks.

#### Use `systune`

If you have more than about five repeated instances of an uncertain parameter and have
no dynamic uncertainty (no `ultidyn`

blocks), consider using
`systune`

instead of `musyn`

. The
`systune`

command tunes fixed-structure controller elements. It can
perform robust controller tuning without degradation caused by large numbers of repeated
blocks. For more information on ways to perform robust tuning with
`systune`

, see Robust Tuning Approaches.