Generate Samples of Uncertain Systems

Use the usample function to randomly sample an uncertain model, returning one or more non-uncertain instances of the uncertain model.

Generating One Sample

If A is an uncertain object, then usample(A) generates a single sample of A.

For example, a sample of a ureal is a scalar double.

A = ureal('A',6);
B = usample(A)
B =
5.7298

Create a 1-by-3 umat with A and an uncertain complex parameter C. A single sample of this umat is a 1-by-3 double.

C = ucomplex('C',2+6j);
M = [A C A*A];
usample(M)
ans =
5.9785             1.4375 + 6.0290i  35.7428

Generating Many Samples

If A is an uncertain object, then usample(A,N) generates N samples of A.

For example, 20 samples of a ureal gives a 1-by-1-20 double array.

B = usample(A,20);
size(B)
ans =
1     1    20

Similarly, 30 samples of the 1-by-3 umat M yields a 1-by-3-by-30 array.

size(usample(M,30))
ans =
1     3    30

See Sample Uncertain Elements to Create Arrays for more information on sampling uncertain objects.

Sampling Uncertain LTI Dynamics

When sampling an ultidyn element or an uncertain object that contains a ultidyn element, the result is always a state-space (ss) object. The property SampleStateDimension of the ultidyn class determines the state dimension of the samples. The same is true when sampling umargin objects, since these are a type of dynamic uncertainty.

Create a 1-by-1, gain bounded ultidyn object with gain bound 4. Verify that the default state dimension for samples is 3.

del = ultidyn('del',[1 1],'Bound',4);
del.SampleStateDimension
ans = 3

Sample the uncertain element at 30 points. Verify that this creates a 30-by-1 ss array of 1-input, 1-output, 1-state systems.

rng(0)  % for reproducibility
delS = usample(del,30);
size(delS)
30x1 array of state-space models.
Each model has 1 outputs, 1 inputs, and 3 states.

Plot the Nyquist plot of these samples and add a disk of radius 4, the gain bound of del.

nyquist(delS)
hold on;
theta = linspace(-pi,pi);
plot(del.Bound*exp(sqrt(-1)*theta),'r');
hold off; Change SampleStateDimension to 1, and repeat entire procedure. The Nyquist plots again satisfy the gain bound, but the Nyquist plots are all circles, indicative of 1st order systems.

del.SampleStateDimension = 1;
delS = usample(del,30);
nyquist(delS)
hold on;
theta = linspace(-pi,pi);
plot(del.Bound*exp(sqrt(-1)*theta),'r');
hold off; With SampleStateDimension = 1, all Nyquist plots touch the gain boundary at either (–1,0) or (1,0) (frequency = 0 or Inf). Higher sampling dimension yields a Nyquist curve that reaches the gain bound at more frequencies, yielding more thorough coverage.

Create a umargin object using the default SampleStateDimension. The umargin block models uncertain gain and phase. The modeled variations are within bounded ranges. For this example use a umargin block that captures relative gain variations of a factor of two in either direction, and phase variations of ±30°.

DGM = getDGM(2,30,'tight');
F = umargin('F')
F =
Uncertain gain/phase "F" with relative gain change in [0.5,2] and phase change of ±36.9 degrees.

The samples of a umargin block are also state-space models.

Fs = usample(F,30);
size(Fs)
30x1 array of state-space models.
Each model has 1 outputs, 1 inputs, and 3 states.

Plot the samples on the Nyquist plane.

nyquist(Fs) The Nyquist plot of any sample of F stays within the disk of uncertainty modeled by F. To confirm this bound, use plot to examine the uncertainty disk. Compare the Nyquist plot above with the right side of the following plot.

plot(F) For further details about the gain and phase uncertainty model, see umargin. 