Determinant of a transfer function matrix

24 vues (au cours des 30 derniers jours)
Carlos Alberto M Massera Filho
Hi,
I'm doing some general MIMO stability analysis and I want to evaluate the smallest and largest singular value of det(1 + L(s)). Apparently det does not support tf's and I'd like to know if there is a way of doing what I want (or a better way to approach the problem).
  1 commentaire
arun
arun le 6 Juil 2015
Could u give or (some clue about) tf u r using here?

Connectez-vous pour commenter.

Réponses (3)

Abhiram Bhanuprakash
Abhiram Bhanuprakash le 6 Juil 2015
Modifié(e) : Abhiram Bhanuprakash le 6 Juil 2015
Hi Carlos,
Since the transfer function is a matrix in 's', you can use Symbolic Math Toolbox to evaluate the determinant of 1+L(s). For example,
syms s;
L = [1 s;1 s^2]
det(1+L)
You would get the answer:
L =
[ 1, s] [ 1, s^2]
ans =
2*s^2 - 2*s
But I am not sure what you mean by smallest and largest singular value of det(1 + L(s)). Because determinant of a matrix is a scalar value, right? What do you mean by singular values of a scalar?
You can have a look at the documentation of the following functions which could be of help:
Hope it helps,
Cheers!
Abhiram
  1 commentaire
Vehzan Rustomji
Vehzan Rustomji le 15 Nov 2019
Modifié(e) : Vehzan Rustomji le 15 Nov 2019
Is there any other method suitable for very large transfer function matrices? My system is 5th order and it is quite inconvenient to transfer the TF into a symbolic matrix manually.

Connectez-vous pour commenter.


Vehzan Rustomji
Vehzan Rustomji le 15 Nov 2019
Modifié(e) : Vehzan Rustomji le 15 Nov 2019
I am stuck in the same boat, trying to calculate the determinant of transfer function matrices for the purpose of checking the MIMO Nyquist stability criteria, see MIMO Stability ETH Zurich or Lecture slides (pg 10). Unfortunately there does not seem to be a simple MATLAB command for this. I figured it can be evaluated manually.
If you have a 2x2 transfer function (TF) matrix G(s) of the following form:
G = [g_11 g_12; g_21 g_22];
you can obtain the determinant by evaluating it as per its original definition as
det_G = g_11*g_22 - g_12*g_21;
This will result in a 1x1 TF variable which you can use for further calculations. The only problem occurs when you need to evaluate it equal to zero to find the roots for any reason. Then you need to use transform this variable det_G manually into a symbolic term using the symbolic toolbox.
Example:
s = tf('s');
L = [ 2/s/(s+1) , 1/s^2 ; 0 , 1/(s+2) ];
I = eye(2);
G = I+L;
det_G = G(1,1)*G(2,2) - G(1,2)*G(2,1);
Results in:
det_G =
s^3 + 4 s^2 + 5 s + 6
---------------------
s^3 + 3 s^2 + 2 s
If you now want to find its roots, execute
syms s
det_G = (s^3 + 4 *s^2 + 5 *s + 6) / (s^3 + 3 *s^2 + 2 *s);
sol_s = solve(det_G==0,s)

Shanthi
Shanthi le 7 Mar 2024
s = tf('s');
L = [ (4+4*s) , -(2+4*s) , -2 ; -(2+4*s) , (14+10*s) , -(4+6*s) ; -2 , -(4+6*s) , (6+6*s+9/s) ];
I = eye(3);
G = I+L;
det_G = G(1,1)*(G(2,2)*G(3,3) - G(3,2)*G(2,3)) - G(1,2)*(G(2,1)*G(3,3) - G(3,1)*G(2,3)) + G(1,3)*(G(2,1)*G(3,2) - G(3,1)*G(2,2));

Community Treasure Hunt

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

Start Hunting!

Translated by