Worst-case norm of uncertain matrix

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

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.

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))

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

[maxnorm,maxnormunc,info] = wcgain(mat)

The third output argument `info`

is a structure
with the following fields:

Field | Description |
---|---|

`Sensitivity` | A |

`ArrayIndex` | 1-by-1 scalar matrix with the value of 1. In more complicated situations (described later) the value of this field depends on the input data. |

You can construct an uncertain matrix and compute the worst-case norm of the matrix, as well as its inverse. Your objective is to 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',2,'Range',[1 3]); 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 = LowerBound: 14.7199 UpperBound: 14.7327 [maxnormMi] = wcnorm(Mi) maxnormMi = LowerBound: 2.5963 UpperBound: 2.5979

The condition number of `M`

must be less than
the product of the two upper bounds for all values of the uncertain
elements making up `M`

. Conversely, the largest value
of `M`

condition number must be at least equal to
the condition number of the nominal value of `M`

.
Compute these crude bounds on the worst-case value of the condition
number.

condUpperBound = maxnormM.UpperBound*maxnormMi.UpperBound; condLowerBound = cond(M.NominalValue); [condLowerBound condUpperBound] ans = 5.0757 38.2743

How can you get a more accurate estimate? Recall that the condition
number of an `nxm`

matrix `M`

can
be expressed as an optimization, where a free norm-bounded matrix
Δ tries to align the gains of `M`

and `M`

–^{1}

$$\begin{array}{l}\text{}\kappa (M)={\mathrm{max}}_{\Delta \in {C}^{m\times m}}\left({\sigma}_{\mathrm{max}}(M\Delta {M}^{-1})\right)\\ \text{}{\sigma}_{\mathrm{max}}(\Delta )\le 1\end{array}$$

If `M`

is itself 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 then by using `wcnorm`

to carry out
the maximization.

Create a 2-by-2 `ucomplexm`

object, with nominal
value equal to zero.

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.

You can create the expression involving `M, Delta`

and `inv(M)`

.

H = M*Delta*Mi;

Finally, consider the stopping criteria and call `wcnorm`

.
One stopping criteria for `wcnorm(H)`

is based on
the norm of the nominal value of `H`

. During the
computation, if `wcnorm`

determines that the worst-case
norm is at least

ABadThreshold+MBadThreshold*norm(N.NominalValue)

then the calculation is terminated. In our case, since `H.NominalValue`

equals
0, the stopping criteria is governed by `ABadThreshold`

.
The default value of `ABadThreshold`

is 5. To keep `wcnorm`

from
prematurely stopping, set `ABadThreshold`

to 38 (based
on our crude upper bound above).

opt = wcgopt('ABadThreshold',38); [maxKappa,wcu,info] = wcnorm(H,opt); maxKappa maxKappa = LowerBound: 26.9629 UpperBound: 27.9926

You can verify that `wcu`

makes the condition
number as large as `maxKappa.LowerBound`

.

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

`norm`

| `wcgain`

| `wcgainOptions`

Was this topic helpful?