# wcnorm

Worst-case norm of uncertain matrix

## Syntax

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

## Description

The norm of an uncertain matrix generally depends on the values of its uncertain elements. The maximum norm possible over all allowable values of the uncertain elements is called the worst-case norm.

example

````maxnorm = wcnorm(mat)` computes lower and upper bounds on the worst-case norm of an uncertain matrix and returns them in a structure with fields `LowerBound` and `UpperBound`.```

example

````[maxnorm,maxnormunc] = wcnorm(mat)` also returns a structure that contains the values of the uncertain elements of `mat` that result in the worst-case norm.```

example

````[maxnorm,maxnormunc,info] = wcnorm(mat)` also returns a structure that contains information about the sensitivities of the worst-case norm to the ranges of the uncertain elements. ```

example

````[___] = wcnorm(mat,opt)` specifies options for the worst-case computation, where `opt` is created using `wcOptions`. ```

## 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 ```

## Input Arguments

collapse all

Uncertain matrix, specified as a `uss` model, `umat` matrix, `genss` model with uncertain elements, or `genmat` matrix with uncertain elements, or an array of such models or matrices.

Options for the worst-case computation, specified as an options set created using `wcOptions`.

## Output Arguments

collapse all

Bounds on worst-case norm, returned as a structure with the following fields.

• `LowerBound` — Lower bound on worst-case norm, returned as a positive scalar.

• `UpperBound` — Upper bound on worst-case norm, returned as a positive scalar.

Values of uncertain elements resulting in the worst-case norm, returned as a structure whose field names are the names of the uncertain elements of `mat` and whose field values are is the corresponding value of that element, such that ```maxnorm.LowerBound = norm(usubs(mat,maxnormunc))```.

Information about the sensitivity of the worst-case norm to the uncertain elements, returned as a structure with the following fields.

• `Model` — Index of model with largest norm, when `mat` is an array of uncertain matrices

• `WorstPerturbation` — Structure of worst-case uncertainty values. `info.WorstPerturbation` is the same as `maxnormunc`.

• `Sensitivity` — Sensitivity of the worst-case norm to each uncertain element, returned as a structure when the `'Sensitivity'` option of `opt` is `'on'`. The fields of `info.Sensitivity` are the names of the uncertain elements in `mat`. Each field contains a percentage that measures how much the uncertainty in the corresponding element affects the worst-case norm. For example, if `info.Sensitivity.p` is 50, then a given fractional change in the uncertainty range of element `p` causes half as much fractional change in the worst-case norm.

If the `'Sensitivity'` option of `opt` is off (the default setting), then `info.Sensitivity` is `NaN`.

• `BadUncertainValues` — Same as `WorstPerturbation`.

• `ArrayIndex` — Same as `Model`.

## Algorithms

See `wcgain`.

## Version History

Introduced before R2006a