When an uncertain model has multiple uncertain elements, you can sample a subset of them, allowing other elements to remain uncertain. You can also generate sample grids by sampling multiple elements independently. For instance, consider a mass-spring-damper system with uncertain mass *m*, damping constant *c*, and spring constant *k*. The system has the following transfer function:

$\mathit{A}\left(\mathit{s}\right)=\frac{1}{\mathit{m}{\mathit{s}}^{2}+\mathit{cs}+\mathit{k}}$.

Create an uncertain state-space model representing the mass-spring-damper system, using `ureal`

parameters for the three uncertain coefficients.

A =
Uncertain continuous-time state-space model with 1 outputs, 1 inputs, 2 states.
The model uncertainty consists of the following blocks:
c: Uncertain real, nominal = 1, variability = [-20,20]%, 1 occurrences
k: Uncertain real, nominal = 2, variability = [-30,30]%, 1 occurrences
m: Uncertain real, nominal = 3, variability = [-40,40]%, 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.

First, sample the model at five values of the mass `m`

.

B1 =
5x1 array of uncertain continuous-time state-space models.
Each model has 1 outputs, 1 inputs, 2 states, and the following uncertain blocks:
c: Uncertain real, nominal = 1, variability = [-20,20]%, 1 occurrences
k: Uncertain real, nominal = 2, variability = [-30,30]%, 1 occurrences
Type "B1.NominalValue" to see the nominal value, "get(B1)" to see all properties, and "B1.Uncertainty" to interact with the uncertain elements.

`B1`

is an array of five models, sampled at each of five values of `m`

. The models in `B1`

no longer contain the uncertain element `m`

, which has been sampled away. However, because you have not sampled `c`

and `k`

, the models in `B1`

still contain those uncertain parameters. The randomly generated values of `m`

are returned in `SampleValues1`

, which is an array of five structures with a single field, m. All values fall within the specified uncertainty range of `m`

.

SampleValues1=*5×1 struct array with fields:*
m

Next, sample at five values of `m`

and `c`

, or five randomly chosen `(m,c)`

pairs. To do so, specify both elements in the same `Names`

argument. This time, `k`

is the only remaining uncertain parameter in the resulting models.

B2 =
5x1 array of uncertain continuous-time state-space models.
Each model has 1 outputs, 1 inputs, 2 states, and the following uncertain blocks:
k: Uncertain real, nominal = 2, variability = [-30,30]%, 1 occurrences
Type "B2.NominalValue" to see the nominal value, "get(B2)" to see all properties, and "B2.Uncertainty" to interact with the uncertain elements.

`B2`

is also an array of five models, one at each of the randomly chosen `(m,c)`

pairs. The structure array `SampleValues2`

also contains five entries, the corresponding values of `m`

and `c`

.

SampleValues2=*5×1 struct array with fields:*
c
m

Now, instead of sampling `(m,c)`

pairs, let `m`

and `c`

vary independently. Sample at five values of `m`

and three values of `c`

.

B3 =
5x3 array of uncertain continuous-time state-space models.
Each model has 1 outputs, 1 inputs, 2 states, and the following uncertain blocks:
k: Uncertain real, nominal = 2, variability = [-30,30]%, 1 occurrences
Type "B3.NominalValue" to see the nominal value, "get(B3)" to see all properties, and "B3.Uncertainty" to interact with the uncertain elements.

This time, `usample`

creates a grid of values `(mi,cj)`

, the five random `m`

values paired with each of the three random `c`

values. Therefore, `B3`

is a 5-by-3 array of models. Each entry `SampleValues3(i,j)`

in the structure array contains the corresponding values `(mi,cj)`

.

SampleValues3=*5×3 struct array with fields:*
c
m

Examine the sample values to see the independent variation of m and c. For instance, `SampleValues3(1,1)`

and `SampleValues3(1,3)`

have the same `m`

but different `c`

, while `SampleValues3(1,3)`

and `SampleValues3(2,3)`

have the same `c`

but different `m`

.

ans = *struct with fields:*
c: 1.0623
m: 2.1405

ans = *struct with fields:*
c: 1.1397
m: 2.1405

ans = *struct with fields:*
c: 1.1397
m: 2.8122

Finally, if you sample all three uncertain parameters, the result is an array of numeric (non-uncertain) state-space models. For instance, sample at a three-dimensional grid of five `m`

values, three `c`

values, and two `k`

values.

5x3x2 array of state-space models.
Each model has 1 outputs, 1 inputs, and 2 states.