Sample Uncertain Elements to Create Arrays
A common way to generate an array is to sample the uncertain elements of an uncertain object. This example shows how to generate arrays by taking random samples of a umat
uncertain matrix that has two uncertain elements. (To generate arrays by sampling at specific values, use usubs
.)
Create an uncertain matrix.
a = ureal('a',4); b = ureal('b',2); M = [a b;b*b a/b;1-b 1+a*b]
Uncertain matrix with 3 rows and 2 columns. The uncertainty consists of the following blocks: a: Uncertain real, nominal = 4, variability = [-1,1], 3 occurrences b: Uncertain real, nominal = 2, variability = [-1,1], 6 occurrences Type "M.NominalValue" to see the nominal value and "M.Uncertainty" to interact with the uncertain elements.
Sample the uncertain real parameter b
in the matrix M
, at 20 random points within its range.
[Ms,bvalues] = usample(M,'b',20);
This results in an array of 20 3-by-2 umat
matrices, with only one uncertain element, a
. The uncertain element b
of M
has been sampled out, leaving a new array dimension in its place.
Ms
20x1 array of uncertain matrices with 3 rows, 2 columns, and the following uncertain blocks: a: Uncertain real, nominal = 4, variability = [-1,1], 3 occurrences Type "Ms.NominalValue" to see the nominal value and "Ms.Uncertainty" to interact with the uncertain elements.
Additionally, bvalues
is a structure containing the corresponding sampled values of b
.
bvalues
bvalues=20×1 struct array with fields:
b
Next, sample the remaining uncertain real parameter a
in the matrix Ms
. This removes the second uncertain block, resulting in a 3-by-2-by-20-by-15 double
.
[Mss,avalues] = usample(Ms,'a',15);
size(Mss)
ans = 1×4
3 2 20 15
You can also sample multiple parameters at once. The following operation returns Mss1
, which is identical to Mss
.
[Mss1,values] = usample(M,'b',20,'a',15);
Rather than sampling each variable (a
and b
) independently, generating a 20-by-15 grid in a 2-dimensional space, you can sample the two-dimensional space directly. Sample the 2-dimensional space with 800 points.
[Ms2d,values] = usample(M,{'a' 'b'},800);
Ms2d
is a 3-by-2-by-800 umat
array, where each entry corresponds to a different randomly selected (a,b)
pair. The structure array values
contains these (a,b)
values.
values
values=800×1 struct array with fields:
a
b