| Control System Toolbox™ | ![]() |
tf
sys = tf(num,den)
sys = tf(num,den,Ts)
sys = tf(M)
sys = tf(num,den,ltisys)
tfsys = tf(sys)
tf is used to create real- or complex-valued transfer function models (TF objects) or to convert state-space or zero-pole-gain models to transfer function form.
sys = tf(num,den) creates a continuous-time transfer function with numerator(s) and denominator(s) specified by num and den. The output sys is a TF object storing the transfer function data (see "Transfer Function Models" on page 2-8).
In the SISO case, num and den are the real- or complex-valued row vectors of numerator and denominator
coefficients ordered in descending powers of
. These two vectors
need not have equal length and the transfer function need not be proper.
For example, h = tf([1 0],1) specifies the pure
derivative
.
To create MIMO transfer functions, specify the numerator and denominator of each SISO entry. In this case:
num and den are cell arrays of row vectors with as many rows as outputs and as many columns as inputs.
The row vectors num{i,j} and den{i,j} specify the numerator and denominator of the transfer function from input j to output i (with the SISO convention).
If all SISO entries of a MIMO transfer function have the same denominator, you can set den to the row vector representation of this common denominator. See "Examples" for more details.
sys = tf(num,den,Ts) creates
a discrete-time transfer function with sample time Ts (in seconds). Set Ts = -1 or Ts = [] to leave the sample time unspecified. The input arguments num and den are as in the continuous-time
case and must list the numerator and denominator coefficients in descending powers of
.
sys = tf(M) creates a static gain M (scalar or matrix).
sys = tf(num,den,ltisys) creates a transfer function with generic LTI properties inherited from the LTI model ltisys (including the sample time). See "Generic Properties" on page 2-26 for an overview of generic LTI properties.
There are several ways to create LTI arrays of transfer functions. To create arrays of SISO or MIMO TF models, either specify the numerator and denominator of each SISO entry using multidimensional cell arrays, or use a for loop to successively assign each TF model in the array. See "Building LTI Arrays" on page 4-12 for more information.
Any of the previous syntaxes can be followed by property name/property value pairs
'Property',Value
Each pair specifies a particular LTI property of the model, for example, the input names or the transfer function variable. See set entry and the example below for details. Note that
sys = tf(num,den,'Property1',Value1,...,'PropertyN',ValueN)
is a shortcut for
sys = tf(num,den) set(sys,'Property1',Value1,...,'PropertyN',ValueN)
You can also use real- or complex-valued rational expressions to create a TF model. To do so, first type either:
s = tf('s') to specify a TF model using a rational function in the Laplace variable, s.
z = tf('z',Ts) to specify a TF model with sample time Ts using a rational function in the discrete-time variable, z.
Once you specify either of these variables, you can specify TF models directly as rational expressions in the variable s or z by entering your transfer function as a rational expression in either s or z.
tfsys = tf(sys) converts an arbitrary SS or ZPK LTI model sys to transfer function form. The output tfsys (TF object) is the transfer function of sys. By default, tf uses zero to compute the numerators when converting a state-space model to transfer function form. Alternatively,
tfsys = tf(sys,'inv')
uses inversion formulas for state-space models to derive the
numerators. This algorithm is faster but less accurate for high-order
models with low gain at
.
Create the two-output/one-input transfer function

with input current and outputs torque and ang velocity.
To do this, type
num = {[1 1] ; 1}
den = {[1 2 2] ; [1 0]}
H = tf(num,den,'inputn','current',...
'outputn',{'torque' 'ang. velocity'},...
'variable','p')
Transfer function from input "current" to output...
p + 1
torque: -------------
p^2 + 2 p + 2
1
ang. velocity: -
p
Note how setting the 'variable' property
to 'p' causes the result to be displayed as a transfer
function of the variable
.
To use a rational expression to create a SISO TF model, type
s = tf('s');
H = s/(s^2 + 2*s +10);
This produces the same transfer function as
h = tf([1 0],[1 2 10]);
Specify the discrete MIMO transfer function

with common denominator
and sample time of
0.2 seconds.
nums = {1 [1 0];[-1 2] 3}
Ts = 0.2
H = tf(nums,[1 0.3],Ts) % Note: row vector for common den. d(z)
Compute the transfer function of the state-space model with the following data.
![]()
To do this, type
sys = ss([-2 -1;1 -2],[1 1;2 -1],[1 0],[0 1])
tf(sys)
Transfer function from input 1 to output:
s
-------------
s^2 + 4 s + 5
Transfer function from input 2 to output:
s^2 + 5 s + 8
-------------
s^2 + 4 s + 5
Example 5
You can use a for loop to specify a 10-by-1 array of SISO TF models.
s = tf('s')
H = tf(zeros(1,1,10));
for k=1:10,
H(:,:,k) = k/(s^2+s+k);
end
The first statement pre-allocates the TF array and fills it with zero transfer functions.
The control and digital signal processing (DSP) communities
tend to use different conventions to specify discrete transfer functions.
Most control engineers use the
variable and order the numerator
and denominator terms in descending powers of
, for example,
![]()
The polynomials
and
are then specified by the row vectors [1 0 0] and [1 2 3], respectively. By
contrast, DSP engineers prefer to write this transfer function as
![]()
and specify its numerator as 1 (instead of [1 0 0]) and its denominator as [1 2 3].
tf switches convention based on your choice of variable (value of the 'Variable' property).
Variable | Convention |
|---|---|
'z' (default) | Use the row vector [ak ... a1 a0] to
specify the polynomial
|
'z^-1', 'q' | Use the row vector [b0 b1 ... bk] to
specify the polynomial
|
For example,
g = tf([1 1],[1 2 3],0.1)
specifies the discrete transfer function
![]()
because
is the default variable. In contrast,
h = tf([1 1],[1 2 3],0.1,'variable','z^-1')
uses the DSP convention and creates
![]()
See also filt for direct specification of discrete transfer functions using the DSP convention.
Note that tf stores data so that the numerator and denominator lengths are made equal. Specifically, tf stores the values
num = [0 1 1]; den = [1 2 3]
for g (the numerator is padded with zeros on the left) and the values
num = [1 1 0]; den = [1 2 3]
for h (the numerator is padded with zeros on the right).
tf uses the MATLAB® function poly to convert zero-pole-gain models, and the functions zero and pole to convert state-space models.
filt, frd, get, set, ss, tfdata, zpk
![]() | sumblk | tfdata | ![]() |
| © 1984-2008- The MathWorks, Inc. - Site Help - Patents - Trademarks - Privacy Policy - Preventing Piracy - RSS |