Transfer function of higher order

6 views (last 30 days)
M.Mohsin Siraj
M.Mohsin Siraj on 1 Aug 2012
Dear all,
I need to input a transfer function of the form shown below:
G(s) = 1/{((s+1)^10)*((s+3)^10)}
I have two questions:
1)- I am using conv command in a for loop to generate (s+1)^10, the most interesting thing that i observe that the roots of the polynomial that i obtain is NOT 1 with algebraic multiplicity of 10. Even if you go for (s+1)^3 or (s+1)^4, the roots won't be three times or four times 1 but somewhere near to 1 (not exactly 1). WHY IT IS SO?
2)- Surprisingly, the system G, when converted to ss form using tf2ss, the state-space realization is not minimal. BUT how on earth this is possible? there is no zero in G, where the pole zero cancellation is occurring so that the G is not controllable or observable?
Thanks in advance.
  1 Comment
Azzi Abdelmalek
Azzi Abdelmalek on 1 Aug 2012
Edited: Azzi Abdelmalek on 1 Aug 2012
when matlab resolves roots of your polynom, it uses a numerical method, that means there will be some errors calculations. so, where is the problem? i checked that the system is not controllable, i think it's the representation tf2ss is not adequate.

Sign in to comment.

Answers (2)

Azzi Abdelmalek
Azzi Abdelmalek on 1 Aug 2012
Edited: Azzi Abdelmalek on 1 Aug 2012
% to generate use poly without loop instead conv:
N=1 % numerator
D=poly([ones(1,10)*(-1) ones(1,10)*(-3)]) % -1 and -3 are your poles
[A,b,c,d]=tfn2ss(N,D) % my function to find another ss representation (see below)
%then check your controllabilité
% the function ft2re
function [F,h,c,d]=tfn2ss(N,D)
if nargin==1;D=N;N=1;end
D1=D(2:end);n=length(D1);m=length(N);
if m==n;N1=N;else N1=[zeros(1,n-m) N];end
F=[-D1' [eye(n-1) ; zeros(1,n-1)]];h=N1'; c=[1 zeros(1,n-1)];d=0;
% for more details about this function
  2 Comments
M.Mohsin Siraj
M.Mohsin Siraj on 1 Aug 2012
Thanks for your answer. But still the state-space realization is not minimal. The observablity matrix loses rank. Which i couldn't understand why.
Azzi Abdelmalek
Azzi Abdelmalek on 1 Aug 2012
Edited: Azzi Abdelmalek on 1 Aug 2012
you are right, the controllabilite is ok; but not the obs. the problem is numeric

Sign in to comment.


Azzi Abdelmalek
Azzi Abdelmalek on 1 Aug 2012
Edited: Azzi Abdelmalek on 1 Aug 2012
%we now both that your system is observable and controllable , then the problem is numeric, i suggest that you multiply your denominator by 0.0001
D=D*0.0001
% after when you calculate your observator or controller, you have to take into account that your output signal is multiplied by (1/0.0001)
% i advise you also to use my function tfn2ss, i tried it and it works. it did'nt work with tf2ss (it just works for controllability)
  3 Comments
Azzi Abdelmalek
Azzi Abdelmalek on 1 Aug 2012
Edited: Azzi Abdelmalek on 12 Sep 2012
what I suggested is not to replace D with 0.0001 * D when you simulate your system. It's just to calculate your observator, once the calcus finished, you change just the loi of your observator or controller.
M.Mohsin Siraj
M.Mohsin Siraj on 1 Aug 2012
Thanks, i got your point. But i am not designing an observer here... I want to have a balanced realization of a stable transfer function. Is such kind of problems very common in MATLAB? I mean i haven't worked on higher order systems. So for example, above 30 or 40 order does it start making problems?

Sign in to comment.

Categories

Find more on Dynamic System Models in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!