0
\$\begingroup\$

I am trying to do an analysis similar to : Stability‐and performance‐robustness tradeoffs: MIMO mixed‐µ vs complex‐µ design

I have a MIMO system composed by a mass-spring damper system which has a plant with \$6\$ inputs and \$4\$ outputs.

In the system is present an unmodeled dynamics on the acutators, and it is modeled as a delay, and it adds to the system as a multiplicative uncertainty.

To add the unmodeled dynamics to the system, I am trying to do the following:

G = ss(A,[B1 B2],[C1;C2],[D11 D12;D21 D22]);

delta = ultidyn('delta',[2 2],'SampleStateDim',5,'Bound',1);

W_tau = ((2.1*s)/(s+40))*eye(2);

G  = G*append(eye(2)+W_tau*delta,3)

where G is the plant of the system, and contains uncertain parameters.

If I do this, I get the following error:

Error using  *  (line 80)
Model I/O dimensions must agree.

To try to solve the problem I am try to look at this : Control of a Spring-Mass-Damper System Using Mixed-Mu Synthesis from the Matlab documentation.

I have also found that the problem does not exists if I consider a \$1x1\$ system, so if I do:

G = ss(A,[B1 B2],[C1;C2],[D11 D12;D21 D22]);

delta = ultidyn('delta',[1 1],'SampleStateDim',5,'Bound',1);

W_tau = ((2.1*s)/(s+40))

G  = G*append(1+W_tau*delta)

everything works fine.

I have also tried to do:

G  = G.*append(1+W_tau*delta)

but still does not work.

can somebody please help me solve this problem?

\$\endgroup\$
5
  • \$\begingroup\$ is that a syntax err. change / to ./ \$\endgroup\$
    – D.A.S.
    Commented Feb 4, 2020 at 21:08
  • \$\begingroup\$ Thanks for answering. Sorry but I don't understand what do I have to change, could you please be more precise? Thanks again. \$\endgroup\$
    – J.D.
    Commented Feb 5, 2020 at 7:37
  • \$\begingroup\$ the period (.) prior to a division symbol dictates elementwise division. Without the period the function is matrix division, and the dimensions must agree. Go on MATLAB's website, they have alternative methods to the "/" and "./" functions you might be better off using in the future for clarity's sake. \$\endgroup\$
    – Jaywalk
    Commented Feb 7, 2020 at 14:11
  • \$\begingroup\$ Thanks for answering. I am sorry but I don't undesrstand, do you mean I have to do W_tau = (2.1*s) ./ (s+40)*eye(2); ? Because by doing so I get the error : Undefined operator './' for input arguments of type 'tf'. Also, this is a division between numerator and denominator of a trasnfer function. I think I have not understood sorry. Thanks again. \$\endgroup\$
    – J.D.
    Commented Feb 7, 2020 at 18:21
  • \$\begingroup\$ Disregard that, the ./ operator is for element-wise division, and what you have is a transfer function, the / operator should be ok. \$\endgroup\$
    – jDAQ
    Commented Feb 7, 2020 at 18:58

1 Answer 1

1
+50
\$\begingroup\$

It is a very interesting paper, the steps are very nicely explained. In your case the solution should be:

G = G*[eye(4,6); [zeros(2,4), eye(2)+W_tau*delta]];

The reason is that your uncertainty based unmodeled dynamics is the dynamics of the actuator and therefore does not influence any other input. The error you are getting is because you are trying to multiply 6 input system with 2 output transfer function. Or in your case 3 input (I am not really sure why you append 3 to your system equations, it is not in the paper - if you want to stick with it just make sure you add gain 3 to the appropriate input).

In your case the input vector is: $$ [w(t),\quad u(t)]' = [d_1(t),\quad d_2(t),\quad \theta_{w1}(t),\quad \theta_{w2}(t),\quad u_1(t),\quad u_2(t)]' $$

So your delay transfer function should influence only last two input states \$u_1\$ and \$u_2\$. Therefore you will multiply the system G with:

[eye(4,6); [zeros(2,4), eye(2)+W_tau*delta]]

The same approach you can use later on for the loop-shaping and frequency dependent performance weights \$W_{px}\$ and \$W_{pu}\$. Just remember when you are adding the transfer function G_new to the input of plant P you must multiply P*G_new. And when you are adding the transfer function G_new to the output you need to multiply G_new*P.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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