I'm trying to compute the H$_\infty$ norm of a matrix using the paper:

Bruinsma, N. A.; Steinbuch, M., A fast algorithm to compute the $H{\infty}$-norm of a transfer function matrix, Syst. Control Lett. 14, No. 4, 287-293 (1990). ZBL0699.93021.

It requires calculation of a matrix derived from the original system matrices A,B,C,D: the required matrix

and I just can't seem to figure out the sequence of operations this would require in matlab, after multiple tries, the closest I've gotten to something being even close to be workable is this:

R = D'*D - Ylb^2*eye(2);

S = D*D' - Ylb^2*eye(2);

H(y)=[A-C*D'*(R^-1)*B -Ylb*B'*(R^-1)*B; Ylb*C*S^-1*C' -A'+B'*(R^-1)*D*C']

but this throws out an horizontal concatenation error, as the dimensions don't match.

If it helps the system matrices I'm using are:

A = [0 1; -10 -1];
B = [0; 1];
C = [1 0];
D = 0;

Any help here would be nice.


1 Answer 1


Well...it might help to compute the four blocks one at a time, and look at them as you do so, comparing to the values you compute by hand. Something like

NW = A - B * inv(R) * D' * C
NE = -ga * B * inv(R) * B'
H = [NW, NE ; SW, SE]

And then when you notice that the inverse of $R$ keeps appearing, you can clean it up with

Ri = inv(R);
NW = A - B * Ri * D' * C
NE = -ga * B * Ri * B'
H = [NW, NE ; SW, SE]

As it happens, what you've written is this:

H(y)=[A-C*D'*(R^-1)*B -Ylb*B'*(R^-1)*B; 
      Ylb*C*S^-1*C' - A'+B'*(R^-1)*D*C']

where I've inserted a newline to make it fit better. The "northwest" entry in your matrix is $A - CD^t R^{-1}B$, where it should be $A - BR^{-1}D^TC$, so you've got the order of matrices wrong in that entry at least. You should fix that and check the other three.

Your next problem is that you're assigning this to H(y), which is not a variable name. It could be interpreted as a subscripted matrix, but my best guess is that $\gamma$ (that's a "gamma", not a "y") is a real number, and real numbers aren't allowed as subscripts in Matlab.

Gratuitous advice about things like this in general:

I suspect that you need to

  • Get a better grasp on the order of operations in matrix multiplication, both in mathematics and in Matlab
  • Learn Matlab's basic syntax better before you try to write comparatively complex mathematics in it
  • Make certain you actually understand the paper whose results you're hoping to implement in software. In particular, you should be able to carry out at least one example by hand.
  • $\begingroup$ Thank you for your advice, while yes as you do say my grasp on the order of matrix multiplication is relatively weak however in this case, this is a result of me fiddling around trying to make things work. If I try to compute the NW entry as you've asked me to here which I have indeed tried earlier as well matlab throws out an incorrect dimensions error, which resulted in me trying to play around with the equation to make it work. I don't exactly have a solved example with me right now that I could use to make sense of why this is isn't working. $\endgroup$ Oct 30, 2018 at 13:13
  • $\begingroup$ One other thing I'd like to point out, the norm function in matlab gives an appropriate result, and that uses this method behind the scenes afaik, so I fail to understand why this wouldn't work. link this cites the exact same paper that I've shown above. $\endgroup$ Oct 30, 2018 at 13:15
  • $\begingroup$ You have sample data (your "system matrices"). If you try to compute $R = D^tD - \gamma^2 I$, you find that $D^t D$ is the $1 \times 1$ zero matrix. So the "I" in this formula must be eye(1) rather than eye(2). That's the sort of thing I mean by "carrying out one example by hand": you do one step at a time, and resolve the problems before moving on. Best of luck. $\endgroup$ Oct 30, 2018 at 13:17
  • $\begingroup$ Norm may use the same paper's results; that doesn't mean that the implementation of norm contains the same errors as your implementation. :) $\endgroup$ Oct 30, 2018 at 13:19
  • $\begingroup$ Now that you've pointed that out, it seems obvious. I can't believe how I missed that. The result of pulling an all-nighter working on assignments. Thank you for your patience and help. Cheers! $\endgroup$ Oct 30, 2018 at 13:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.