# How to convert symbolic transfer function to state space?

99 vues (au cours des 30 derniers jours)
Ali Almakhmari le 29 Nov 2023
Commenté : Sam Chak le 2 Déc 2023
I have this transfer function: where alpha, beta1, and beta2 are unknown constants. I want to convert this to a state space in MATLAB. But regardless of what I do it just doesnt work out.
##### 0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

### Réponse acceptée

Sam Chak le 29 Nov 2023
I am uncertain about your intention regarding the symbolic state-space. The state-space object from the Control System Toolbox cannot be expressed symbolically. However, I can provide you with the conversion formula for the symbolic state-space in LaTeX form.
Plant transfer function:
Equivalent state-space system:
% Parameters
a = 3;
b1 = 5;
b2 = 7;
% Plant transfer function
s = tf('s');
Gp = ((a + b2)*s^2 + 3*b1*s + 9*a)/(s^3 + 9*s)
Gp = 10 s^2 + 15 s + 27 ------------------ s^3 + 9 s Continuous-time transfer function.
% Plant state-space
A = [0 1 0;
0 0 1;
0 -9 0];
B = [a+b2;
3*b1;
9*a-9*(a+b2)];
C = [1 0 0];
D = 0;
sys = ss(A, B, C, D)
sys = A = x1 x2 x3 x1 0 1 0 x2 0 0 1 x3 0 -9 0 B = u1 x1 10 x2 15 x3 -63 C = x1 x2 x3 y1 1 0 0 D = u1 y1 0 Continuous-time state-space model.
% Check result if they are equivalent Gp = Gq
Gq = tf(sys)
Gq = 10 s^2 + 15 s + 27 ------------------ s^3 + 9 s Continuous-time transfer function.
##### 9 commentairesAfficher 7 commentaires plus anciensMasquer 7 commentaires plus anciens
Sam Chak le 30 Nov 2023
I am performing an analysis on how the variation of alpha, beta1, and beta2 effect the dynamics of my system (the state space response).
Obtaining the time responses of the system requires some real values for α, , and . Therefore, it cannot be purely symbolic. Also, if the initial condition is zero, then it is unnecessary to convert the transfer function to state-space. However, if the initial condition is non-zero, it becomes necessary to convert the transfer function to state-space. This is because the lsim(sys, u, t, x0) command can specify a vector x0 of initial state values only when sys is a state-space model.
Paul le 30 Nov 2023
Modifié(e) : Paul le 1 Déc 2023
Let's see the code you tried with tf2ss and we can see if it can be sorted out. tf2ss worked for me.
I still don't know what additional information you're trying to gain from the state space realization that you're not able to get from the transfer function.

Connectez-vous pour commenter.

### Plus de réponses (2)

Paul le 1 Déc 2023
Déplacé(e) : Sam Chak le 2 Déc 2023
Hi Sam,
I was hoping that the OP would show a little more effort before giving the answer. Anyway ...
The code should be modified to use the 'all' input to coeffs so as to return the 0 coefficients as well. That way we can use dencoeff as well, which is what we'd want in general, and not return numeric A and D matrices
syms s alpha beta_1 beta_2
assume(alpha, 'real');
assume(beta_1, 'real');
assume(beta_2, 'real');
%% Plant transfer function in symbolic form
Gp = ((alpha + beta_2)*s^2 + 3*beta_1*s + 9*alpha)/(s^3 + 0*s^2 + 9*s + 0)
Gp =
[num, den] = numden(Gp)
num =
den =
[numcoeff, numterm] = coeffs(num, s, 'all')
numcoeff =
numterm =
[dencoeff, denterm] = coeffs(den, s, 'all')
dencoeff =
denterm =
[A, B, C, D] = tf2ss(numcoeff, dencoeff)
A =
B =
C =
D =
0
simplify(C*inv(s*eye(3)-A)*B + D) % verify
ans =
##### 1 commentaireAfficher -1 commentaires plus anciensMasquer -1 commentaires plus anciens
Sam Chak le 2 Déc 2023
Thank you, @Paul.
Don't mind the OP. I'm also learning new things from you. Thus, I believe your proposed solution in the comment should be the true answer to this question because you have demonstrated how to execute this correctly in MATLAB. More importantly, it deserves my vote.

Connectez-vous pour commenter.

Sam Chak le 1 Déc 2023
@Paul's method is to use tf2ss(). In the past, I used this approach, but now I no longer use it since learning that the syntax ss(tf(num, den)) can achieve what I want. I also wasn't aware that tf2ss() can accept inputs of 'sym' (symbolic) data type.
syms s alpha beta_1 beta_2
assume(alpha, 'real');
assume(beta_1, 'real');
assume(beta_2, 'real');
%% Plant transfer function in symbolic form
Gp = ((alpha + beta_2)*s^2 + 3*beta_1*s + 9*alpha)/(s^3 + 0*s^2 + 9*s + 0)
Gp =
%% tf2ss(num, den) requires inputs of numerator and denominator in vector form
[num, den] = numden(Gp)
num =
den =
[numcoeff, numterm] = coeffs(num, s)
numcoeff =
numterm =
[dencoeff, denterm] = coeffs(den, s)
dencoeff =
denterm =
%% check data type
class(numcoeff)
ans = 'sym'
%% Obtain state-space matrices in symbolic form
[A, B, C, D] = tf2ss(numcoeff, [1 0 9 0])
A = 3×3
0 -9 0 1 0 0 0 1 0
B =
C =
D =
0
##### 0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

### Catégories

En savoir plus sur Control System Toolbox dans Help Center et File Exchange

R2022b

### Community Treasure Hunt

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

Start Hunting!

Translated by