# wcnorm

Worst-case norm of uncertain matrix

## Syntax

```maxnorm = wcnorm(m)
[maxnorm,wcu] = wcnorm(m)
[maxnorm,wcu] = wcnorm(m,opts)
[maxnorm,wcu,info] = wcnorm(m)
[maxnorm,wcu,info] = wcnorm(m,opts)
```

## Description

The norm of an uncertain matrix generally depends on the values of its uncertain elements. Determining the maximum norm over all allowable values of the uncertain elements is referred to as a worst-case norm analysis. The maximum norm is called the worst-case norm.

As with other uncertain-system analysis tools, only bounds on the worst-case norm are computed. The exact value of the worst-case norm is guaranteed to lie between these upper and lower bounds.

### Basic syntax

Suppose `mat` is a `umat` or a `uss` with M uncertain elements. The results of

```[maxnorm,maxnormunc] = wcnorm(mat) ```

`maxnorm` is a structure with the following fields.

Field

Description

`LowerBound`

Lower bound on worst-case norm, positive scalar.

`UpperBound`

Upper bound on worst-case norm, positive scalar.

`maxnormunc` is a structure that includes values of uncertain elements and maximizes the matrix norm. There are M field names, which are the names of uncertain elements of `mat`. The value of each field is the corresponding value of the uncertain element, such that when jointly combined, lead to the norm value in `maxnorm.LowerBound`. The following command shows the norm:

``` norm(usubs(mat,maxnormunc)) ```

### Basic syntax with third output argument

A third output argument provides information about sensitivities of the worst-case norm to the uncertain elements ranges.

```[maxnorm,maxnormunc,info] = wcnorm(mat) ```

The third output argument `info` is a structure with the following fields:

Field

Description

`Model`

Index of model with largest gain (when `mat` is an array of uncertain matrices)

`WorstPerturbation`

Structure of worst-case uncertainty values. The fields of `info.WorstPerturbation` are the names of the uncertain elements in `mat`, and each field contains the worst-case value of the corresponding element.

`Sensitivity`

A `struct` with M fields. Fieldnames are names of uncertain elements of `sys`. Field values are positive numbers, each entry indicating the local sensitivity of the worst-case norm in `maxnorm.LowerBound` to all of the individual uncertain elements’ uncertainty ranges. For instance, a value of 25 indicates that if the uncertainty range is increased by 8%, then the worst-case norm should increase by about 2%. If the `Sensitivity` property of the `wcOptions` object is `'off'`, the values are `NaN`.

`BadUncertainValues`

Same as `WorstPerturbation`. Included for compatibility with R2016a and earlier.
`ArrayIndex`Same as `Model`. Included for compatibility with R2016a and earlier.

## Examples

collapse all

Construct an uncertain matrix and compute the worst-case norm of the matrix and of its inverse. These computations let you accurately estimate the worst-case, or the largest, value of the condition number of the matrix.

```a = ureal('a',5,'Range',[4 6]); b = ureal('b',3,'Range',[2 10]); c = ureal('c',9,'Range',[8 11]); d = ureal('d',1,'Range',[0 2]); M = [a b;c d]; Mi = inv(M); maxnormM = wcnorm(M)```
```maxnormM = struct with fields: LowerBound: 14.7199 UpperBound: 14.7227 ```
`maxnormMi = wcnorm(Mi)`
```maxnormMi = struct with fields: LowerBound: 2.5963 UpperBound: 2.5968 ```

The condition number of `M` must be less than the product of the two upper bounds for all values of the uncertain elements of `M`. Conversely, the condition number of the largest value of `M` must be at least equal to the condition number of the nominal value of `M`. Compute these bounds on the worst-case value of the condition number.

```condUpperBound = maxnormM.UpperBound*maxnormMi.UpperBound; condLowerBound = cond(M.NominalValue); [condLowerBound condUpperBound]```
```ans = 1×2 5.0757 38.2312 ```

The range between these lower and upper bounds is fairly large. You can get a more accurate estimate. Recall that the condition number of an n-by-m matrix `M` can be expressed as an optimization, where a free norm-bounded matrix $\Delta$ tries to align the gains of `M` and `inv(M)`:

`$\begin{array}{c}\kappa \left(M\right)=\underset{\Delta \in {C}^{m×m}}{\mathrm{max}}\left({\sigma }_{\mathrm{max}}\left(M\Delta {M}^{-1}\right)\right)\\ {\sigma }_{\mathrm{max}}\left(\Delta \right)\le 1\end{array}$`

If `M` is uncertain, then the worst-case condition number involves further maximization over the possible values of `M`. Therefore, you can compute the worst-case condition number of an uncertain matrix by using a `ucomplexm` uncertain element and using `wcnorm` to carry out the maximization.

Create a 2-by-2 `ucomplexm` element with nominal value 0.

`Delta = ucomplexm('Delta',zeros(2,2));`

The range of values represented by `Delta` includes 2-by-2 matrices with the maximum singular value less than or equal to 1.

Create the expression involving `M`, `Delta`, and `inv(M)`.

`H = M*Delta*Mi;`
```opt = wcOptions('MussvOptions','m5'); [maxKappa,wcu,info] = wcnorm(H,opt); maxKappa```
```maxKappa = struct with fields: LowerBound: 26.8406 UpperBound: 38.2349 ```

Verify that the values in `wcu` make the condition number as large as `maxKappa.LowerBound`.

`cond(usubs(M,wcu))`
```ans = 26.9629 ```

## Algorithms

See `wcgain`.