a problem with pade approximation

6 views (last 30 days)
arash rad
arash rad on 3 Jun 2021
Edited: arash rad on 3 Jun 2021
Hi
I have te code below
And i want to approxiamte delay with pade of first order :
clc
clear all
close all
s = tf('s');
G = [(-21.6*exp(-1*s))/(8.5*s+1) (1.26*exp(-0.3*s))/(7.05*s+1);...
(-2.75*exp(-1.8*s))/(8.2*s+1) (-4.28*exp(-0.35*s))/(9.0*s+1)]
G_new = pade (G,1)
but the answers is like this :
My tf was first order and with first order pade it should be second order
why some of it is third order ?
Thanks

Accepted Answer

Paul
Paul on 3 Jun 2021
tf objects have three delay properties: InputDelay, OutputDelay, and IODelay. Look at all three of these properties for each element of G:
s = tf('s');
G = [(-21.6*exp(-1*s))/(8.5*s+1) (1.26*exp(-0.3*s))/(7.05*s+1);...
(-2.75*exp(-1.8*s))/(8.2*s+1) (-4.28*exp(-0.35*s))/(9.0*s+1)]
G = From input 1 to output... -21.6 1: exp(-1*s) * --------- 8.5 s + 1 -2.75 2: exp(-1.8*s) * --------- 8.2 s + 1 From input 2 to output... 1.26 1: exp(-0.3*s) * ---------- 7.05 s + 1 -4.28 2: exp(-0.35*s) * ------- 9 s + 1 Continuous-time transfer function.
[G(1,1).InputDelay G(1,1).OutputDelay G(1,1).IODelay G(1,2).InputDelay G(1,2).OutputDelay G(1,2).IODelay; G(2,1).InputDelay G(2,1).OutputDelay G(2,1).IODelay G(2,2).InputDelay G(2,2).OutputDelay G(2,2).IODelay]
ans = 2×6
0 0.3000 0.7000 0 0.3000 0 0 0.3500 1.4500 0 0.3500 0
As shown, the exp(-Ts) terms in G11 and G21 were divided into two different types of delays. It looks like the software is trying capture a common delay at the two outputs, and then makes up for the additional delay as needed with the IODelay. Then pade() comes along and substitutes a first order approximant for both of those delays in G11 and G21, resulting in third order models for Gnew11 and Gnew21
Gnew = pade(G,1)
Gnew = From input 1 to output... -21.6 s^2 + 205.7 s - 411.4 1: ------------------------------------- 8.5 s^3 + 81.95 s^2 + 171.4 s + 19.05 -2.75 s^2 + 19.51 s - 21.67 2: ------------------------------------- 8.2 s^3 + 59.17 s^2 + 71.72 s + 7.882 From input 2 to output... -1.26 s + 8.4 1: ----------------------- 7.05 s^2 + 48 s + 6.667 4.28 s - 24.46 2: ----------------------- 9 s^2 + 52.43 s + 5.714 Continuous-time transfer function.
Verify that Gnew11 is based on two first order approximants:
[num1,den1]=pade(.7,1);[num2,den2]=pade(.3,1);
Gnew(1,1), tf(-21.6,[8.5 1])*tf(num1,den1)*tf(num2,den2)
ans = -21.6 s^2 + 205.7 s - 411.4 ------------------------------------- 8.5 s^3 + 81.95 s^2 + 171.4 s + 19.05 Continuous-time transfer function. ans = -21.6 s^2 + 205.7 s - 411.4 ------------------------------------- 8.5 s^3 + 81.95 s^2 + 171.4 s + 19.05 Continuous-time transfer function.
Explicitly using IODelay on the individual elements looks like it yields what you might have expected.
G2 = [-21.6/(8.5*s+1) (1.26)/(7.05*s+1);...
(-2.75)/(8.2*s+1) (-4.28)/(9.0*s+1)];
G2(1,1).IODelay = 1; G2(1,2).IODelay = 0.3; G2(2,1).IODelay = 1.8; G2(2,2).IODelay = 0.35;
G2
G2 = From input 1 to output... -21.6 1: exp(-1*s) * --------- 8.5 s + 1 -2.75 2: exp(-1.8*s) * --------- 8.2 s + 1 From input 2 to output... 1.26 1: exp(-0.3*s) * ---------- 7.05 s + 1 -4.28 2: exp(-0.35*s) * ------- 9 s + 1 Continuous-time transfer function.
pade(G2,1)
ans = From input 1 to output... 21.6 s - 43.2 1: ------------------ 8.5 s^2 + 18 s + 2 2.75 s - 3.056 2: ------------------------- 8.2 s^2 + 10.11 s + 1.111 From input 2 to output... -1.26 s + 8.4 1: ----------------------- 7.05 s^2 + 48 s + 6.667 4.28 s - 24.46 2: ----------------------- 9 s^2 + 52.43 s + 5.714 Continuous-time transfer function.
Make sure that G and G2 have the same IO characteristics:
bode(G,G2)
  1 Comment
arash rad
arash rad on 3 Jun 2021
Edited: arash rad on 3 Jun 2021
Thank you very much
your explanation is complete

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!