Repeated uncertanity Blocks in robust control

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?

답변 (1개)

Paul
Paul 2026년 2월 25일
편집: Paul 2026년 2월 26일
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

AMIT
AMIT 2026년 2월 26일
This uncertainity structure is related to fluid flow problem

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Robustness and Worst-Case Analysis에 대해 자세히 알아보기

질문:

2026년 2월 24일

댓글:

2026년 3월 1일

Community Treasure Hunt

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

Start Hunting!

Translated by