www.gusucode.com > robust 案例源码程序 matlab代码 > robust/CreateAndManipulateUncertainMatricesExample.m

    %% Create and Manipulate Uncertain Matrices
% You create uncertain matrices (<docid:robust_ref.f10-328118> objects) by
% creating uncertain parameters and using them to build matrices.  You can
% then use uncertain matrices to build uncertain state-space models.  This
% example shows how to create an uncertain matrix, access and change its
% uncertain parameters, extract elements, and perform matrix arithmetic.
%%
% For example, create two uncertain real parameters, and use them to create a 3-by-2
% uncertain matrix.
a = ureal('a',3); 
b = ureal('b',10,'Percentage',20); 
M = [-a, 1/b; b, a+1/b; 1, 3] 
%% Examine and Modify |umat| Properties
% |M| is a |umat|  object.  Examine its properties using |get|.
get(M)
%%
% The nominal value of |M| is the matrix obtained by replacing all the
% uncertain elements with their nominal values.
M.NominalValue
%%
% The |Uncertainty| property is a structure containing the uncertain
% elements (the <docid:control_ug.bsxmtrr>) of |M|. 
M.Uncertainty
%%
M.Uncertainty.a
%%
% Use the |Uncertainty| property for direct access to the uncertain
% elements.  For example, check the |Range| of the uncertain element |a|
% within |M|.
M.Uncertainty.a.Range
%%
% The range is |[2,4]| because you created the |ureal| parameter |a| with a
% nominal value 3 and the default uncertainty of +/- 1.  Change the range
% to |[2.5,5]|.
%%
M.Uncertainty.a.Range = [2.5,5]
%%
% This change to |a| only takes place within |M|.  Verify that the variable
% |a| in the MATLAB workspace still has the original range. 
a.Range
%%
% You cannot combine elements that have a common internal name, but
% different properties.  So, for example, entering |M.Uncertainty.a - a|
% would generate an error, because the |realp| parameter |a| in the
% workspace has different properties from the element |a| in |M|.
%% Row and Column Referencing
% You can use standard row-column referencing to extract elements from a
% |umat|. For example, extract a 2-by-2 selection from |M| consisting of
% its second and third rows.
Msub = M(2:3,:)
%%
% You can use single indexing only if the |umat| is a
% single column  or row. Make a single-column selection from |M| and use
% single-index references to access elements of it. 
Msing = M([2 1 2 3],2);
Msing(2)
%%
% You can use indexing to change the value of any element of a |umat|. For
% example, set the (3,2) entry of |M| to an uncertain parameter |c|.
c = ureal('c',3,'Percentage',40);
M(3,2) = c
%%
% M now has three uncertain blocks.
%% Matrix Operations on |umat| Objects
% You can perform many matrix operations on a |umat| object, such as
% matrix-multiply, transpose, and inverse. You can also combaine uncertain
% matrices with numeric matrices that do not have uncertainty. 
%%
% For example, premultiply |M| by a |1-by-3| numeric matrix, resulting in a
% 1-by-2 |umat|.
M1 = [2 3 1]*M;
%%
% Verify that the first entry of |M1| is as expected, |-2*a + 3*b + 1|.
d = M1(1) - (-2*M.Uncertainty.a + 3*M.Uncertainty.b + 1)
%%
% Transpose |M|, form a product, and invert it. As expected, the product of
% a matrix and its inverse is the identity matrix.  You can verify this by
% sampling the result.
H = M.'*M; 
K = inv(H); 
usample(K*H,3)
%% Lifting a Double Matrix to |umat|
% You can convert a numeric matrix to a |umat| object with no uncertain
% elements.  Use the |umat| command to _lift_ a double matrix to the |umat|
% class. For example:
Md = [1 2 3;4 5 6]; 
M = umat(Md) 
%%
% You can also convert higher-dimension numeric matrices to |umat|. When
% you do so, the software interprets the third dimension and beyond as
% array dimensions. For example, convert a random three-dimensional
% numeric array to |umat|.
Md = randn(4,5,6); 
M = umat(Md) 
%%
% The result is a one-dimensional array of uncertain matrices, rather than
% a three-dimensional uncertain array. Similarly, a four-dimensional
% numeric array converts to a two-dimensional array of |umat| objects.
Md = randn(4,5,6,7); 
M = umat(Md) 
%% 
% See <docid:robust_ug.f15-35207> for more information about
% multidimensional arrays of uncertain objects.