Repeated uncertanity Blocks in robust control

27 visualizaciones (últimos 30 días)
AMIT
AMIT el 24 de Feb. de 2026 a las 11:27
Comentada: AMIT hace alrededor de 9 horas
for calculating the SSV using the mussv command, I am required to define the BlocKStructure. How to define the Blockstructure as defined in the above image?

Respuestas (1)

Paul
Paul el 25 de Feb. de 2026 a las 1:29
Editada: Paul hace alrededor de 4 horas
Hi Amit,
As far as I can see, mussv does not support repeated, full, complex blocks. Out of curiosity, in what sort of problem does one encounter such an uncertainty structure?
However, the block structure can be rearranged to solve a different problem that might (or might not) be of interest.
I'll show an example with Ny = 2 and only two repeated blocks to keep things simpler (and less typing).
Define the full block
delta = sym('delta',[6,2]);
And the full uncertainty block
Delta = blkdiag(delta,delta);
The input to Delta, i.e., the output from M, are two, 2 x 1 vectors.
z1 = sym('z1',[2,1]);
z2 = sym('z2',[2,1]);
z = [z1;z2];
The output of Delta is then
w = Delta*z
w = 
Rearrange the elements of Delta so that instead having two, repeated 6 x 2 blocks we have 6 blocks, where each block is a repeated scalar of one of the elements of delta.
bDelta = [delta(:),delta(:)].';
bDelta = diag(bDelta(:))
bDelta = 
Now we define a right-side pre-multiplication and left-side post-multiplication on bdelta such that:
L*bdelta*R*z = Delta*z.
R and L are (there's probably a smart way to automate this)
R = zeros(24,4);
R(1:2:12,1) = 1; % z11
R(2:2:12,3) = 1; % z21
R(13:2:end,2) = 1; % z12
R(14:2:end,4) = 1; % z22
L = zeros(12,24);
L(1,[1,13]) = 1;
L(2,[3,15]) = 1;
L(3,[5,17]) = 1;
L(4,[7,19]) = 1;
L(5,[9,21]) = 1;
L(6,[11,23]) = 1;
L(7,[2,14]) = 1;
L(8,[4,16]) = 1;
L(9,[6,18]) = 1;
L(10,[8,20]) = 1;
L(11,[10,22]) = 1;
L(12,[12,24]) = 1;
Show the equivalence
sympref('AbbreviateOutput',false)
ans = logical
1
[L*bDelta*R*z , Delta*z]
ans = 
all(isAlways(L*bDelta*R*z == Delta*z))
ans = logical
1
Now we can analyze how large bdelta can be to maintain loop stability of R*M*L*bdelta instead of how large Delta can be to maintain loop stability of M*Delta.
For example
rng(100);
M = rand(4,12) + 1j*rand(4,12);
Run mussv on R*M*L
[bounds,muinfo] = mussv(R*M*L,repmat([2,0],12,1));
bounds
bounds = 1×2
16.4127 16.3555
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
Extract the peturbation with the structure of bdelta that corresponds to the lower bound
bdelta = mussvextract(muinfo);
Verify that bdelta makes the loop unstable (eigenvalue at 1)
eig(R*M*L*bdelta)
ans =
1.0000 + 0.0000i 0.0088 + 0.1163i 0.0006 + 0.0011i 0.0004 + 0.0004i 0.0000 - 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 - 0.0000i -0.0000 + 0.0000i -0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 - 0.0000i -0.0000 + 0.0000i 0.0000 - 0.0000i 0.0000 - 0.0000i -0.0000 + 0.0000i -0.0000 - 0.0000i -0.0000 + 0.0000i 0.0000 - 0.0000i -0.0000 + 0.0000i -0.0000 + 0.0000i 0.0000 + 0.0000i -0.0000 - 0.0000i 0.0000 - 0.0000i
Compute Delta from bdelta and verify that Delta makes the loop unstable
Delta = L*bdelta*R;
eig(M*Delta)
ans =
1.0000 + 0.0000i 0.0088 + 0.1163i 0.0006 + 0.0011i 0.0004 + 0.0004i
However, the norm of bdelta is quite a bit smaller than the norm of Delta and, I believe, it's possible that there might exist a different Delta with smaller norm that also makes the M*Delta loop unstable.
[max(svd(bdelta)), 1/bounds(2)]
ans = 1×2
0.0611 0.0611
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
max(svd(Delta))
ans = 0.2118
Like I said, we're solving a different problem than posed, but maybe it can still provide useful information for the problem of interest. Maybe.
  1 comentario
AMIT
AMIT hace alrededor de 2 horas
This uncertainity structure is related to fluid flow problem

Iniciar sesión para comentar.

Categorías

Más información sobre Robustness and Worst-Case Analysis en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by