Create uncertain linear time-invariant object
H = ultidyn('Name',iosize) H = ultidyn('Name',iosize,'Property1',Value1,'Property2',Value2,...)
H = ultidyn('Name',iosize) creates an uncertain linear, time-invariant objects are used to represent unknown dynamic objects whose only known attributes are bounds on their frequency response. Uncertain linear, time-invariant objects have a name (the
Name property), and an input/output size (
Trailing Property/Value pairs are allowed in the construction.
H = ultidyn('name',iosize,'Property1',Value1,'Property2',Value2,...)
'GainBounded' (default) or
'PositiveReal', and describes in what form the knowledge about the object's frequency response is specified.
'GainBounded', then the knowledge is an upper bound on the magnitude (i.e., absolute value), namely
abs(H)<= Bound at all frequencies. The matrix generalization of this is ∥
'PositiveReal' then the knowledge is a lower bound on the real part, namely
Real(H) >= Bound at all frequencies. The matrix generalization of this is
H+H' >= 2*Bound
Bound is a real, scalar that quantifies the bound on the frequency response of the uncertain object as described above.
SampleStateDimension is a positive integer, defining the state
dimension of random samples of the uncertain object when sampled with
usample. The default value is 3.
AutoSimplify controls how expressions involving the uncertain matrix are simplified. Its default value is
'basic', which means elementary methods of simplification are applied as operations are completed. Other values for
'off', no simplification performed, and
'full' which applies model-reduction-like techniques to the uncertain object.
Use the property
SampleMaxFrequency to limit the natural frequency for sampling. Randomly sampled uncertain dynamics are no faster than the specified value. The default value is
Inf (no limit).
To model frequency-dependent uncertainty levels, multiply the
ultidyn object by a suitable shaping filter. For example, for a
dH, the following commands specify an uncertainty bound that increases from 0.1 at low frequencies to 10 at high frequencies.
W = tf([1 .1],[.1 1]); dH = W*dH;
ultidyn object with internal name
'H', norm bounded by 7, with three inputs and two outputs.
H = ultidyn('H',[2 3],'Bound',7)
H = Uncertain LTI dynamics "H" with 2 outputs, 3 inputs, and gain less than 7.
Typically, when you use uncertain dynamics, you apply a weighting function to emphasize the uncertain contribtion in a certain bandwidth. For instance, suppose that the behavior of your system is modestly uncertain (say 10%) at low frequencies, while the high-frequency behavior beyond 20 rad/s is not accurately modeled. Use
makeweight to create a shaping filter that captures this behavior.
W = makeweight(.1,20,50); bodemag(W)
Apply the weighting filter at the block outputs. Examine samples of the unmodeled dynamics.
Hw = blkdiag(W,W)*H; bodemag(Hw)
Create a scalar
ultidyn object with an internal name
'B', whose frequency response has a real part greater than 2.5.
B = ultidyn('B',[1 1],'Type','PositiveReal','Bound',2.5)
B = Uncertain LTI dynamics "B" with 1 outputs, 1 inputs, and positive real bound of 2.5.
SampleStateDimension to 5, and plot the Nyquist plot of 30 random samples.
B.SampleStateDimension = 5; nyquist(usample(B,30))
Behavior changed in R2020a
The default value of the
SampleStateDimension property is now
3. Prior to R2020a, the default value was 1.
SampleStateDimension sets the number of states in random
samples of uncertain dynamics taken with analysis commands such as
SampleStateDimension = 1, all
Nyquist plots of sampled dynamics touch the gain bound at either (–1,0) (frequency =
0) or (1,0) (frequency =
SampleStateDimension yields points of contact at other
frequencies, meaning better coverage of worst-case possibilities. (The odds of
hitting a worst-case value by random sampling is still very low. You can use
sampling to get a rough idea of the effects of uncertainty, but for rigorous
worst-case analysis, use commands such as
wcdiskmargin.) For an example of the effect of
SampleStateDimension, see Generate Samples of Uncertain Systems.
If you have code that relies on the default value of
SampleStateDimension being 1, update your code to explicitly
set the property.