Main Content

Padé Approximant

The Padé approximant of order [mn] approximates the function f(x) around x = x0 as

a0+a1(xx0)+...+am(xx0)m1+b1(xx0)+...+bn(xx0)n.

The Padé approximant is a rational function formed by a ratio of two power series. Because it is a rational function, it is more accurate than the Taylor series in approximating functions with poles. The Padé approximant is represented by the Symbolic Math Toolbox™ function pade.

When a pole or zero exists at the expansion point x = x0, the accuracy of the Padé approximant decreases. To increase accuracy, an alternative form of the Padé approximant can be used which is

(xx0)p(a0+a1(xx0)+...+am(xx0)m)1+b1(xx0)+...+bn(xx0)n.

The pade function returns the alternative form of the Padé approximant when you set the OrderMode input argument to Relative.

The Padé approximant is used in control system theory to model time delays in the response of the system. Time delays arise in systems such as chemical and transport processes where there is a delay between the input and the system response. When these inputs are modeled, they are called dead-time inputs. This example shows how to use the Symbolic Math Toolbox to model the response of a first-order system to dead-time inputs using Padé approximants.

The behavior of a first-order system is described by this differential equation

τdy(t)dt+y(t)=ax(t).

Enter the differential equation in MATLAB®.

syms tau a x(t) y(t) xS(s) yS(s) H(s) tmp
F = tau*diff(y)+y == a*x;

Find the Laplace transform of F using laplace.

F = laplace(F,t,s)
F = laplace(y(t),t,s)-τy(0)-slaplace(y(t),t,s)=alaplace(x(t),t,s)

Assume the response of the system at t = 0 is 0. Use subs to substitute for y(0) = 0.

F = subs(F,y(0),0)
F = laplace(y(t),t,s)+sτlaplace(y(t),t,s)=alaplace(x(t),t,s)

To collect common terms, use simplify.

F = simplify(F)
F = sτ+1laplace(y(t),t,s)=alaplace(x(t),t,s)

For readability, replace the Laplace transforms of x(t) and y(t) with xS(s) and yS(s).

F = subs(F,[laplace(x(t),t,s) laplace(y(t),t,s)],[xS(s) yS(s)])
F = yS(s)sτ+1=axS(s)

The Laplace transform of the transfer function is yS(s)/xS(s). Divide both sides of the equation by xS(s) and use subs to replace yS(s)/xS(s) with H(s).

F = F/xS(s);
F = subs(F,yS(s)/xS(s),H(s))
F = H(s)sτ+1=a

Solve the equation for H(s). Substitute for H(s) with a dummy variable, solve for the dummy variable using solve, and assign the solution back to H(s).

F = subs(F,H(s),tmp);
H(s) = solve(F,tmp)
H(s) = 

asτ+1

The input to the first-order system is a time-delayed step input. To represent a step input, use heaviside. Delay the input by three time units. Find the Laplace transform using laplace.

step = heaviside(t - 3);
step = laplace(step)
step = 

e-3ss

Find the response of the system, which is the product of the transfer function and the input.

y = H(s)*step
y = 

ae-3sssτ+1

To allow plotting of the response, set parameters a and tau to their values. For a and tau, choose values 1 and 3, respectively.

y = subs(y,[a tau],[1 3]);
y = ilaplace(y,s);

Find the Padé approximant of order [2 2] of the step input using the Order input argument to pade.

stepPade22 = pade(step,'Order',[2 2])
stepPade22 = 

3s2-4s+22ss+1

Find the response to the input by multiplying the transfer function and the Padé approximant of the input.

yPade22 = H(s)*stepPade22
yPade22 = 

a3s2-4s+22ssτ+1s+1

Find the inverse Laplace transform of yPade22 using ilaplace.

yPade22 = ilaplace(yPade22,s)
yPade22 = 

a+9ae-s2τ-2-ae-sτ2τ2+4τ+3τ2τ-2

To plot the response, set parameters a and tau to their values of 1 and 3, respectively.

yPade22 = subs(yPade22,[a tau],[1 3])
yPade22 = 

9e-s4-11e-s34+1

Plot the response of the system y and the response calculated from the Padé approximant yPade22.

hold on
grid on
fplot([y yPade22],[0 20])
title('Pade Approximant for dead-time step input')
legend('Response to dead-time step input',...
       'Pade approximant [2 2]',...
       'Location', 'Best')

Figure contains an axes object. The axes object with title Pade Approximant for dead-time step input contains 2 objects of type functionline. These objects represent Response to dead-time step input, Pade approximant [2 2].

The [2 2] Padé approximant does not represent the response well because a pole exists at the expansion point of 0. To increase the accuracy of pade when there is a pole or zero at the expansion point, set the OrderMode input argument to Relative and repeat the steps. For details, see pade.

stepPade22Rel = pade(step,'Order',[2 2],'OrderMode','Relative')
stepPade22Rel = 

3s2-6s+4s3s2+6s+4

yPade22Rel = H(s)*stepPade22Rel
yPade22Rel = 

a3s2-6s+4ssτ+13s2+6s+4

yPade22Rel = ilaplace(yPade22Rel)
yPade22Rel = 

a-ae-tτ4τ2+6τ+3σ1+12aτe-tcos(3t3)-3sin(3t3)36a-72aτ36aτ+1σ1where  σ1=4τ2-6τ+3

yPade22Rel = subs(yPade22Rel,[a tau],[1 3])
yPade22Rel = 

12e-tcos(3t3)+23sin(3t3)37-19e-t37+1

fplot(yPade22Rel,[0 20],'DisplayName','Relative Pade approximant [2 2]')

Figure contains an axes object. The axes object with title Pade Approximant for dead-time step input contains 3 objects of type functionline. These objects represent Response to dead-time step input, Pade approximant [2 2], Relative Pade approximant [2 2].

The accuracy of the Padé approximant can also be increased by increasing its order. Increase the order to [4 5] and repeat the steps. The [n-1 n] Padé approximant is better at approximating the response at t = 0 than the [n n] Padé approximant.

stepPade45 = pade(step,'Order',[4 5])
stepPade45 = 

27s4-180s3+540s2-840s+560s27s4+180s3+540s2+840s+560

yPade45 = H(s)*stepPade45
yPade45 = 

a27s4-180s3+540s2-840s+560ssτ+127s4+180s3+540s2+840s+560

yPade45 = subs(yPade45,[a tau],[1 3])
yPade45 = 

27s4-180s3+540s2-840s+560s3s+127s4+180s3+540s2+840s+560

yPade45 = ilaplace(yPade45)
yPade45 = 

101520k=14eσ2tσ21290σ2+45σ22+9σ23+70143-2721e-t31001+172560k=14etσ2σ1143+294120k=14etσ2σ22σ11001+46440k=14etσ2σ23σ11001+1where  σ1=129σ23+45σ22+90σ2+70  σ2=root(z4+20z33+20z2+280z9+56027,z,k)

yPade45 = vpa(yPade45)
yPade45 = 3.2418384981662546679005910164486e-1.930807068546914778929595950184tcos(0.57815608595633583454598214328008t)-2.7182817182817182817182817182817e-0.33333333333333333333333333333333t-1.5235567798845363861823092981669e-1.4025262647864185544037373831494tcos(1.7716120279045018112388813990878t)+11.595342871672681856604670597166e-1.930807068546914778929595950184tsin(0.57815608595633583454598214328008t)-1.7803798379230333426855987436911e-1.4025262647864185544037373831494tsin(1.7716120279045018112388813990878t)+1.0
fplot(yPade45,[0 20],'DisplayName','Pade approximant [4 5]')

Figure contains an axes object. The axes object with title Pade Approximant for dead-time step input contains 4 objects of type functionline. These objects represent Response to dead-time step input, Pade approximant [2 2], Relative Pade approximant [2 2], Pade approximant [4 5].

The following points have been shown:

  • Padé approximants can model dead-time step inputs.

  • The accuracy of the Padé approximant increases with the increase in the order of the approximant.

  • When a pole or zero exists at the expansion point, the Padé approximant is inaccurate about the expansion point. To increase the accuracy of the approximant, set the OrderMode option to Relative. You can also use increase the order of the denominator relative to the numerator.