If an uncertain object (
ufrd) has many uncertain parameters, it is
often necessary to freeze some, but not all, of the uncertain parameters to specific values.
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
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.
usubs to substitute the uncertain element named
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
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
Any superfluous substitution requests are ignored. Hence, the following returns an
uncertain model that is the same as
B4 = usubs(A,'fred',5);
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,
eta. Set the values of these fields to be the desired substituted
values. Then perform the substitution with
NV.delta = 2.3; NV.eta = A.Uncertainty.rho; B6 = usubs(A,NV);
B6 is the same as
B2 above. Again, any superfluous fields are ignored. Therefore, adding
an additional field
NV, and substituting does
not alter the result.
NV.gamma = 0; B7 = usubs(A,NV);
B7 is the same as
If the replacement value is
'Nominal' (or a shortened version such as
'Nom'), then the listed element are replaced with their nominal values.
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
eta to its nominal value,
delta to a random value (within its range) and
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
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