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