# Documentation

## Substitution by usubs

If an uncertain object (umat, uss, ufrd) has many uncertain parameters, it is often necessary to freeze some, but not all, of the uncertain parameters to specific values. The usubs command accomplishes this, and also allows more complicated substitutions for an element.

usubs accepts a list of element names, and respective values to substitute for them. You can create three uncertain real parameters and use them to create a 2-by-2 uncertain matrix A.

delta = ureal('delta',2);
eta = ureal('eta',6);
rho = ureal('rho',-1);
A = [3+delta+eta delta/eta;7+rho rho+delta*eta]
A =

Uncertain matrix with 2 rows and 2 columns.
The uncertainty consists of the following blocks:
delta: Uncertain real, nominal = 2, variability = [-1,1], 2 occurrences
eta: Uncertain real, nominal = 6, variability = [-1,1], 3 occurrences
rho: Uncertain real, nominal = -1, variability = [-1,1], 1 occurrences

Type "A.NominalValue" to see the nominal value, "get(A)" to see all properties, and "A.Uncertainty" to interact with the uncertain elements.

Use usubs to substitute the uncertain element named delta in A with the value 2.3, leaving all other uncertain elements intact. Note that the result, B, is an uncertain matrix with dependence only on eta and rho.

B = usubs(A,'delta',2.3)
B =

Uncertain matrix with 2 rows and 2 columns.
The uncertainty consists of the following blocks:
eta: Uncertain real, nominal = 6, variability = [-1,1], 3 occurrences
rho: Uncertain real, nominal = -1, variability = [-1,1], 1 occurrences

Type "B.NominalValue" to see the nominal value, "get(B)" to see all properties, and "B.Uncertainty" to interact with the uncertain elements.

To set multiple elements, list individually, or group the values in a data structure. For instance, the following are the same.

B1 = usubs(A,'delta',2.3,'eta',A.Uncertainty.rho);
S.delta = 2.3;
S.eta = A.Uncertainty.rho;
B2 = usubs(A,S);

In each case, delta is replaced by 2.3, and eta is replaced by A.Uncertainty.rho.

Any superfluous substitution requests are ignored. Hence, the following returns an uncertain model that is the same as A.

B4 = usubs(A,'fred',5);

### Specifying the Substitution with Structures

An alternative syntax for usubs is to specify the substituted values in a structure, whose fieldnames are the names of the elements being substituted with values.

Create a structure NV with 2 fields, delta and eta. Set the values of these fields to be the desired substituted values. Then perform the substitution with usubs.

NV.delta = 2.3;
NV.eta = A.Uncertainty.rho;
B6 = usubs(A,NV);

Here, B6 is the same as B1 and B2 above. Again, any superfluous fields are ignored. Therefore, adding an additional field gamma to NV, and substituting does not alter the result.

NV.gamma = 0;
B7 = usubs(A,NV);

Here, B7 is the same as B6.

The commands wcgain, robuststab and usample all return substitutable values in this structure format. More discussion can be found in Create Arrays with usubs.

### Nominal and Random Values

If the replacement value is the (partial and case-independent) string 'Nominal', then the listed element are replaced with their nominal values. Therefore

B8 = usubs(A,fieldnames(A.Uncertainty),'nom')
B8 =

11.0000    0.3333
6.0000   11.0000
B9 = A.NominalValue
B9 =

11.0000    0.3333
6.0000   11.0000

are the same. It is possible to only set some of the elements to NominalValues, and would be the typical use of usubs with the 'nominal' argument.

Within A, set eta to its nominal value, delta to a random value (within its range) and rho to a specific value, say 6.5

B10 = usubs(A,'eta','nom','delta','rand','rho',6.5)
B10 =

10.5183    0.2531
13.5000   15.6100

Unfortunately, the 'nominal' and 'Random' specifiers may not be used in the structure format. However, explicitly setting a field of the structure to an element's nominal value, and then following (or preceeding) the call to usubs with a call to usample (to generate the random samples) is acceptable, and achieves the same effect.